如何实现多视角协同训练CNN?

viviayi 2017-08-04 09:09:10
对于每个对象有几个不同视角的图像(v1...v9)和一个对象分类的标签值(0/1)
希望能对不同视角分别通过网络,在最后的全连接层将各个视角的结果进行融合,最后得到分类结果
这样去训练,但是对于如何用caffe实现表示毫无头绪,输入数据该如何准备?如何输入进入不同的网络,如何将多个网络的输出融合在一起训练?
小白对于更改caffe源码表示很抗拒,度娘找不到相关指导,跪求大神指点!另外曾经也使用过一点theano, 如果有theano的方法也可以。
...全文
1910 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
京小乔 2017-09-20
  • 打赏
  • 举报
回复
我现在在做二分类,请问有没有简单的多视角SVM的代码,求救,谢谢你们
ssbqrm 2017-09-14
  • 打赏
  • 举报
回复
引用 22 楼 u013837566 的回复:
[quote=引用 21 楼 ssbqrm 的回复:] 你训练图片多少,不够用dataAugmentation,可以参考https://github.com/aleju/imgaug
嗯,我还是先把数据做多一点先[/quote] 那你现在训练图片多少张?
viviayi 2017-09-12
  • 打赏
  • 举报
回复
引用 21 楼 ssbqrm 的回复:
你训练图片多少,不够用dataAugmentation,可以参考https://github.com/aleju/imgaug
嗯,我还是先把数据做多一点先
ssbqrm 2017-09-12
  • 打赏
  • 举报
回复
引用 20 楼 u013837566 的回复:
我把concat改了然后试了方法[1], loss值还是震荡,我测试了一个数据发现训练模型还是会把所有的分为一个类 另外我想问问的是为什么最后预测两类的概率会有负数值出现,我的网络有写错么?还是说也是因为没训练好? 因为现在训练数据量很小(和文献里比),我是应该先把数据做多一些还是在现有的数据上先根据你后面的建议调网络呢?因为我怕数据的影响是根本性的,再怎么调也调不出来
你训练图片多少,不够用dataAugmentation,可以参考https://github.com/aleju/imgaug
viviayi 2017-09-11
  • 打赏
  • 举报
回复
引用 19 楼 ssbqrm 的回复:
[1] 卷积的初始化用 weight_filler { type: "xavier" }取代gaussian试试 [2] 方法[1]还不行,试试增大卷积的num_output,你的GPU是啥?好像显存挺大的啊,8个都BatchSize128 [3] 上面[1]+[2]还不行,可以试试加个BatchNorm层(http://caffe.berkeleyvision.org/tutorial/layers/batchnorm.html),一般来说会加快收敛效果很好,不过训练速度相对变慢,BatchNorm层用的时候 注意train的时候设置use_global_stats :false,test的时候true [4] concat可以一下子把8个视角一起人concat,没必要两个两个
我把concat改了然后试了方法[1], loss值还是震荡,我测试了一个数据发现训练模型还是会把所有的分为一个类 另外我想问问的是为什么最后预测两类的概率会有负数值出现,我的网络有写错么?还是说也是因为没训练好? 因为现在训练数据量很小(和文献里比),我是应该先把数据做多一些还是在现有的数据上先根据你后面的建议调网络呢?因为我怕数据的影响是根本性的,再怎么调也调不出来
ssbqrm 2017-09-07
  • 打赏
  • 举报
回复
引用 18 楼 u013837566 的回复:
[quote=引用 16 楼 ssbqrm 的回复:] solver也发一下
还在么大神,我今天重新训练了一下,文档在这里 链接: https://pan.baidu.com/s/1o7CUCMA 密码: wk4s 麻烦你看看有什么问题没有,还是不收敛,不过现在我只做出来每个视角三万多张图作为训练数据,没有用测试数据[/quote] [1] 卷积的初始化用 weight_filler { type: "xavier" }取代gaussian试试 [2] 方法[1]还不行,试试增大卷积的num_output,你的GPU是啥?好像显存挺大的啊,8个都BatchSize128 [3] 上面[1]+[2]还不行,可以试试加个BatchNorm层(http://caffe.berkeleyvision.org/tutorial/layers/batchnorm.html),一般来说会加快收敛效果很好,不过训练速度相对变慢,BatchNorm层用的时候 注意train的时候设置use_global_stats :false,test的时候true [4] concat可以一下子把8个视角一起人concat,没必要两个两个
viviayi 2017-09-07
  • 打赏
  • 举报
回复
引用 16 楼 ssbqrm 的回复:
solver也发一下
还在么大神,我今天重新训练了一下,文档在这里 链接: https://pan.baidu.com/s/1o7CUCMA 密码: wk4s 麻烦你看看有什么问题没有,还是不收敛,不过现在我只做出来每个视角三万多张图作为训练数据,没有用测试数据
ssbqrm 2017-08-09
  • 打赏
  • 举报
回复
solver也发一下
ssbqrm 2017-08-09
  • 打赏
  • 举报
回复
引用 14 楼 u013837566 的回复:
我正在尝试,目前还不能训练收敛,师兄提到是不是可以用多通道?把9个view作为9个通道输入数据?
要不你把caffe的prototxt和训练的log日志发到百度云 共享出来给我看看
viviayi 2017-08-09
  • 打赏
  • 举报
回复
引用 16 楼 ssbqrm 的回复:
solver也发一下
昨天一不小心re -rf了,今天要悲剧的重新弄系统,暂时发不了,哭
viviayi 2017-08-08
  • 打赏
  • 举报
回复
引用 12 楼 u013837566 的回复:
[quote=引用 10 楼 ssbqrm 的回复:] 我上面data_1 对应视角1, data_2 对应视角2, data层的类似是 type: "ImageData" 打乱顺序你可以在写入label的时候自己先弄好,关键是每个视角的要一一对应
所以可以在做数据的时候先进行打乱,然后对应每个对象写好不同视角的txt,然后多个输入这样?[/quote] 我正在尝试,目前还不能训练收敛,师兄提到是不是可以用多通道?把9个view作为9个通道输入数据?
ssbqrm 2017-08-04
  • 打赏
  • 举报
回复
引用 12 楼 u013837566 的回复:
[quote=引用 10 楼 ssbqrm 的回复:] 我上面data_1 对应视角1, data_2 对应视角2, data层的类似是 type: "ImageData" 打乱顺序你可以在写入label的时候自己先弄好,关键是每个视角的要一一对应
所以可以在做数据的时候先进行打乱,然后对应每个对象写好不同视角的txt,然后多个输入这样?[/quote] 应该可以,你试试看
viviayi 2017-08-04
  • 打赏
  • 举报
回复
引用 10 楼 ssbqrm 的回复:
我上面data_1 对应视角1, data_2 对应视角2, data层的类似是 type: "ImageData" 打乱顺序你可以在写入label的时候自己先弄好,关键是每个视角的要一一对应
所以可以在做数据的时候先进行打乱,然后对应每个对象写好不同视角的txt,然后多个输入这样?
viviayi 2017-08-04
  • 打赏
  • 举报
回复
引用 10 楼 ssbqrm 的回复:
我上面data_1 对应视角1, data_2 对应视角2, data层的类似是 type: "ImageData" 打乱顺序你可以在写入label的时候自己先弄好,关键是每个视角的要一一对应
恩,对的,主要是一直在纠结对应的问题,多个输入是可以的,但是怎么对应我也是不太知道,之前在做分割时让输入和标签都是图像的时候做过两个ImageData层,data1的图像作为输入,data2的图像为标签,但是现在想来我之前也并没有进行打乱的操作
ssbqrm 2017-08-04
  • 打赏
  • 举报
回复
我上面data_1 对应视角1, data_2 对应视角2, data层的类似是 type: "ImageData" 打乱顺序你可以在写入label的时候自己先弄好,关键是每个视角的要一一对应
ssbqrm 2017-08-04
  • 打赏
  • 举报
回复


原来caffe直接多个输入也可以的,之前没试过
viviayi 2017-08-04
  • 打赏
  • 举报
回复
引用 7 楼 ssbqrm 的回复:
[quote=引用 6 楼 u013837566 的回复:] [quote=引用 3 楼 ssbqrm 的回复:] 把v1...v9九个视角的图拼接成一张图,然后传入模型后再增加一层分成9张(不知道caffe有没有现成的,或者github上有没有人改造过),然后分别输出到九个不同的网络, 最后的融合倒是用concat层或者Eltwise层直接可以用哦
这个方法应该可以试试,目前我有考虑的是用九个txt写九个视角的图像输入,如果保证顺序相同的话,不知道能不能使得输入数据是属于同一个对象的,然后在后面的层用concatenate。 另外网络里加了一层dropout在全连接层后面,训练图像是几十万张64*64大小的图像块,参考文章: Pulmonary Nodule Detection in CT Images: False Positive Reduction Using Multi-View Convolutional Networks[/quote] 这个一般训练的图像都是要shuffle的,不打乱的会遇到不收敛的 你假如是用 ImageData Layer ,http://caffe.berkeleyvision.org/tutorial/layers/imagedata.html shuffle: true #每个epoch都会进行shuffle[/quote] 之前确实没有打乱额`````我先打乱把之前早期融合的再训练一下看看吧,谢谢
ssbqrm 2017-08-04
  • 打赏
  • 举报
回复
引用 6 楼 u013837566 的回复:
[quote=引用 3 楼 ssbqrm 的回复:] 把v1...v9九个视角的图拼接成一张图,然后传入模型后再增加一层分成9张(不知道caffe有没有现成的,或者github上有没有人改造过),然后分别输出到九个不同的网络, 最后的融合倒是用concat层或者Eltwise层直接可以用哦
这个方法应该可以试试,目前我有考虑的是用九个txt写九个视角的图像输入,如果保证顺序相同的话,不知道能不能使得输入数据是属于同一个对象的,然后在后面的层用concatenate。 另外网络里加了一层dropout在全连接层后面,训练图像是几十万张64*64大小的图像块,参考文章: Pulmonary Nodule Detection in CT Images: False Positive Reduction Using Multi-View Convolutional Networks[/quote] 这个一般训练的图像都是要shuffle的,不打乱的会遇到不收敛的 你假如是用 ImageData Layer ,http://caffe.berkeleyvision.org/tutorial/layers/imagedata.html shuffle: true #每个epoch都会进行shuffle
viviayi 2017-08-04
  • 打赏
  • 举报
回复
引用 3 楼 ssbqrm 的回复:
把v1...v9九个视角的图拼接成一张图,然后传入模型后再增加一层分成9张(不知道caffe有没有现成的,或者github上有没有人改造过),然后分别输出到九个不同的网络, 最后的融合倒是用concat层或者Eltwise层直接可以用哦
这个方法应该可以试试,目前我有考虑的是用九个txt写九个视角的图像输入,如果保证顺序相同的话,不知道能不能使得输入数据是属于同一个对象的,然后在后面的层用concatenate。 另外网络里加了一层dropout在全连接层后面,训练图像是几十万张64*64大小的图像块,参考文章: Pulmonary Nodule Detection in CT Images: False Positive Reduction Using Multi-View Convolutional Networks
ssbqrm 2017-08-04
  • 打赏
  • 举报
回复
引用 1 楼 ssbqrm 的回复:
"Attention-based Extraction of Structured Information from Street View Imagery" 这篇论文就是用4个不同角度拍摄的图片最后融合进行识别的,不过是基于TensorFlow的 源码在:https://github.com/tensorflow/models/tree/master/attention_ocr caffe不知道怎么传不同视角的,一种简单处理方法你就把v1...v9当成一种视角,不过这种估计识别率会降低。 或者你一个视角训练一个caffe模型,最终判断是时候融合9个模型的结果
9个视角训练9个模型,每个模型会输出一个概率啊,最后 把0的概率和1的概率都加起来 看哪个大就行,应该还是有点用的
加载更多回复(4)

4,449

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧