一、说明

fcn的开源代码:https://github.com/shelhamer/fcn.berkeleyvision.org

论文地址:fully convolutional networks for semantic segmentation

其中,pascalcontext-fcn语义分割,算上背景,一共分割为60类。

pascalcontext-fcn全卷积神经网络主要使用了三种技术:

1. 卷积化(Convolutional)

2. 上采样(Upsample)

3. 跳跃结构(Skip Layer)

二、网络结构概况

pascalcontext-fcn全卷积网络结构理解-LMLPHP

1、FCN-32s

通过前五段的卷积层,直接从第五个最大池化层通过32倍上采样,得到和原图高宽一致的多通道预测label;

2、FCN-16s

pool5通过两倍上采样,得到预测label,与pool4 的预测label求和,再进行16倍上采样,得到和原图高宽一致的多通道预测label;

3、FCN-8s

pool5通过两倍上采样,得到预测label,与pool4 的预测label求和,再将求和结果进行2倍上采样,与pool3的预测label求和,最终进行8倍上采样,得到和原图高宽一致的多通道预测label。

4、训练过程

使用vgg16初始化FCN-32s网络结构;再将训练好的FCN-32s去初始化FCN-16s;再将训练好的FCN-16s去初始化FCN-8s。

三、各阶段网络结构

1、pascalcontext-fcn32s

pascalcontext-fcn全卷积网络结构理解-LMLPHP

原vgg16的最后三层全连接层,都改为卷积层,通过上采样得到upscore,再进行crop得到和原图宽高一致的预测label(score层)。

2、pascalcontext-fcn16s

pascalcontext-fcn全卷积网络结构理解-LMLPHP

将scrore_fr进行两倍上采样得到预测标签upscore2;将pool4的预测s标签core_pool4进行crop,得到和upscore2一样尺寸的预测标签score_pool4c;然后将upscore2与score_pool4c求和,得到fuse_pool4;再进行16倍上采样,再crop,就得到预测标签score。

3、pascalcontext-fcn8s

pascalcontext-fcn全卷积网络结构理解-LMLPHP

将fuse_pool4进行两倍上采样得到upscore_pool4;将pool3的预测标签score_pool3进行crop(宽高与upscore_pool4一致),得到score_pool3c;将upscore_pool4与score_pool3c求和得到fuse_pool3;然后进行8倍上采样,crop,得到预测标签score。

四、其他说明

1、查看网络结构的在线工具:http://ethereon.github.io/netscope/#/editor

2、pool4、pool3的上采样,有进行了crop操作,会造成信息的损失,该网络结构有一个巧妙的处理,在第一层卷积层四周添加pad为100,再进行卷积操作,即先扩展图片,之后再进行crop。裁切

的区域也是补出来的区域,这样就能无损地像素级分割。读者可试着计算pad的最小值。

layer {
name: "conv1_1"
type: "Convolution"
bottom: "data"
top: "conv1_1"
param {
lr_mult:
decay_mult:
}
param {
lr_mult:
decay_mult:
}
convolution_param {
num_output:
pad:
kernel_size:
stride:
}
}

end

05-08 08:14