1、说明git
fcn的开源代码:https://github.com/shelhamer/fcn.berkeleyvision.orggithub
论文地址:fully convolutional networks for semantic segmentation网络
其中,pascalcontext-fcn语义分割,算上背景,一共分割为60类。ide
pascalcontext-fcn全卷积神经网络主要使用了三种技术:工具
1. 卷积化(Convolutional)spa
2. 上采样(Upsample)code
3. 跳跃结构(Skip Layer)blog
2、网络结构概况图片
一、FCN-32sip
经过前五段的卷积层,直接从第五个最大池化层经过32倍上采样,获得和原图高宽一致的多通道预测label;
二、FCN-16s
pool5经过两倍上采样,获得预测label,与pool4 的预测label求和,再进行16倍上采样,获得和原图高宽一致的多通道预测label;
三、FCN-8s
pool5经过两倍上采样,获得预测label,与pool4 的预测label求和,再将求和结果进行2倍上采样,与pool3的预测label求和,最终进行8倍上采样,获得和原图高宽一致的多通道预测label。
四、训练过程
使用vgg16初始化FCN-32s网络结构;再将训练好的FCN-32s去初始化FCN-16s;再将训练好的FCN-16s去初始化FCN-8s。
3、各阶段网络结构
一、pascalcontext-fcn32s
原vgg16的最后三层全链接层,都改成卷积层,经过上采样获得upscore,再进行crop获得和原图宽高一致的预测label(score层)。
二、pascalcontext-fcn16s
将scrore_fr进行两倍上采样获得预测标签upscore2;将pool4的预测s标签core_pool4进行crop,获得和upscore2同样尺寸的预测标签score_pool4c;而后将upscore2与score_pool4c求和,获得fuse_pool4;再进行16倍上采样,再crop,就获得预测标签score。
三、pascalcontext-fcn8s
将fuse_pool4进行两倍上采样获得upscore_pool4;将pool3的预测标签score_pool3进行crop(宽高与upscore_pool4一致),获得score_pool3c;将upscore_pool4与score_pool3c求和获得fuse_pool3;而后进行8倍上采样,crop,获得预测标签score。
4、其余说明
一、查看网络结构的在线工具:http://ethereon.github.io/netscope/#/editor
二、pool四、pool3的上采样,有进行了crop操做,会形成信息的损失,该网络结构有一个巧妙的处理,在第一层卷积层四周添加pad为100,再进行卷积操做,即先扩展图片,以后再进行crop。裁切
的区域也是补出来的区域,这样就能无损地像素级分割。读者可试着计算pad的最小值。
layer { name: "conv1_1" type: "Convolution" bottom: "data" top: "conv1_1" param { lr_mult: 1 decay_mult: 1 } param { lr_mult: 2 decay_mult: 0 } convolution_param { num_output: 64 pad: 100 kernel_size: 3 stride: 1 } }
end