题外话

\quad 这篇论文是拿到了CVPR2015 best paper候选的,意义可见一般。

算法总体原理

\quad 算法第一次提出end2end来做语义分割的网络,简称为FCN。

FCN网络的结构如上,直接用原图像的ground truth作为监督信息,训练一个端到端的网络,让网络做像素级别的预测,直接预测标签(mask)图像。

Trick1:在分类网络finetune

\quad 将传统网络如AlexNet,VGG等最后的全连接层变为卷积层,可以发现这样做了之后可以共享分类网络的权重。这个过程如下图:

Trick2: 上采样

\quad 在一般的CNN结构中均是使用pooling层来缩小输出图片的size,如果在VGG16中,五次pooling之后特征图的大小比输入图缩小了32倍。而在fcn网络中,要求网络输出与原图size相同的分割图,因此我们需要对最后一层进行上采样。在caffe中也被称为反卷积(Deconvolution)。
\quad 虽然转置卷基层和卷积层一样,也是可以训练参数的,但是在实验中发现,让转置卷基层可学习,并没有带来性能的提高,所以在实验中转置卷基层的lr全部设为0.
这两段话来源:http://melonteam.com/posts/quan_juan_ji_shen_jing_wang_luo_fcn_xue_xi_bi_ji/#1-cnn卷积神经网络

Trick3: Skip Layer(跳跃结构)

\quad 从这个图来解释,对于输入的原始图像,首先经历了卷积conv1,池化pool1,将原图缩小为1/2。再经过第二次卷积conv2,pool2将原图缩小为1/4。第3次卷积池化conv3,pool3将原图缩小为1/8,这个节点将pool3得到feturemap保存下来。再进行第4次卷积池化,conv4和pool4将现在图像大小变为原图的1/16,并保存pool4得到的feature map。最后对图像经过第5次卷积和池化conv5和pool5将图像缩小为1/32,然后是CNN操作过程中的全连接卷积操作conv6,conv7,得到当前的feature map,conv7的feature map被叫做heat map。
\quad 实际上对第5层的输出进行32倍放大(反卷积)就可以得到原图大小了。但是这样做精度不好,会丢失一些细节。所以作者提出将第4层的输出和第3层的输出也依次反卷积,分别做16倍和8倍上采样,最后把不同层级的池化层上采样得到的结果图像叠加在一起,可以得到更加精细的结果,这样做的好处是兼顾了局部和全局的信息,分割细节更加明显。下面有一张32倍,16倍和8倍上采样得到的结果图对比:
可以看到分割结果越来越精细。

算法优点

\quad FCN有2个明显的优点,首先是end2end,可以接受任意大小的输入图像尺寸。而是更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。

参考和推荐博客

http://melonteam.com/posts/quan_juan_ji_shen_jing_wang_luo_fcn_xue_xi_bi_ji/#1-cnn卷积神经网络