基于caffe的fcn网络的训练

论文解读:
global information 可以揭露 what , local information 揭露 where
deep 分类网络当做预训练,微调网络,whole image 当做输入,whole image ground truth 是标签
损失函数是在最后一层的 spatial map上的 pixel 的 loss 和,在每一个 pixel 使用 softmax loss
在全部图像上的基于l的随机梯度下降计算将和基于l’的梯度下降结果一样,将最后一层的所有接收域作为minibatch(分批处理)
当感受野重叠的很大的时候,前向和后向传播计算会很有效率???
使用 skip 结构融合多层输出,底层网络应该可以预测更多的位置信息,因为他的感受野小可以看到小的 pixels,结合 fine layers 和 corase layers 可以使模型 respect global structure 的情况下 make local predictions
上采样 lower-resolution layers 时,如果采样后的图因为 padding 等原因和前面的图大小不同,使用 crop ,当裁剪成大小相同的,spatially aligned ,使用 concat 操作融合两个层
softmax loss 会导致类间竞争,促使做最好的预测,但不知道是否有用,使用 sigmod cross-entropy loss 获得相同的结果

下载伯克利大学的fcn文件,基于论文Fully Convolutional Networks for Semantic Segmentation
尝试运行siftflow-fcn32s模型
首先下载数据集siftflow 将下载的数据放在fcn文件夹下的data目录下,将其重新命名为siftflow并将原data文件夹下的siftflow中的文件拷贝到其中,删除原来的。
基于caffe的fcn网络的训练_第1张图片
images保存的是数据,semanticlabels保存的是语义分割标签,geolabels保存场景识别标签?
所以是分别训练了两个网络,网络的前七层一样。
下载caffemodel,在siftflow-fcn32s目录下根据caffemodel-url 下载预训练好的模型。将下载好的模型放在fcn目录下的ilsvrc-nets文件夹下。
将fcn目录下的score.py siftflow_layer.py和surgery.py 复制到siftflow-fcn32s的文件夹下。
修改siftflow-fcn32s目录下的solve.py文件,将weights的路径修改为下载好的预训练模型的位置。修改caffe.set_device(int(0))。
运行python solve.py 进行训练。
网络配置如下等:
基于caffe的fcn网络的训练_第2张图片
基于caffe的fcn网络的训练_第3张图片
.
.
.
基于caffe的fcn网络的训练_第4张图片
基于caffe的fcn网络的训练_第5张图片
基于caffe的fcn网络的训练_第6张图片
loss计算参考softmaxwithloss的解释。
具体的网络结构是基于vggnet网络,网络的前五层是五个卷积层,3*3的卷积核,strides=1,pool大小是2*2,strides=2,第一层卷积的padding是100,其他都是1。
之后是三层全连接层换成卷积层,卷积核的大小分别为7 7, 1 1, 1 1.padding=0,stride=1.
只有连接上采样层,fcn32s直接上采样到原图像的水平,卷积核的大小是64 64,stride=32 ,padding = 0 .
最后还有一个crop层,因为data在第一层卷积的时候padding=100,所以上采样之后图片包含一部分padding,比data大。
crop操作从需要裁剪的轴,以一定偏移为起始位置,以要剪裁的数据大小为长度,进行剪裁。最后生成和原图大小相同的图片。
网络的输入:
基于caffe的fcn网络的训练_第7张图片
网络的crop层
基于caffe的fcn网络的训练_第8张图片
caffe中数据格式为【batchsize,channals,height,weight】
bottem:’upscore_sem ’ 表示要裁剪的数据
bottem:’data’ 表示需要裁剪的格式
axis=2 代表在 2 及其之后的轴上修改
offset 表示偏移量,从哪里开始修改,修改的长度是第二个bottem的长度
基于caffe的fcn网络的训练_第9张图片

网络loss层
这里写图片描述
sem是网络输入层的top:’sem’ 是数据的标签
fcn网络的输入batchsize是1,因为分割loss的计算在每一个像素点都一个真值(标签),相当于每一个像素点的都是一个分类任务,一个图像就有对应像素点个样本。所以分割任务的batch是一个图片,将一个图片最后在所有像素点上的分类loss加起来计算一次梯度的更新。
同时fcn网络提高了momentum的大小,0.99。因为online学习可以更快的收敛,增大momentum可以加快梯度的更新。

对momentum的理解
基于caffe的fcn网络的训练_第10张图片
在fcn8s中采取了跳跃结构,类似于图像多尺度融合的过程,图像经过下采样和池化操作之后丢失了很多的信息,在上采样的时候融合前面某几个层的feature map,对丢失的信息就行弥补,较低层会保留更多的局部信息,这样就可以使模型做基于全局结构的局部预测了。

你可能感兴趣的:(caffe,论文)