这篇论文是拿到了CVPR2015 best paper候选的,在图像分割领域是一篇开山力作。
算法第一次提出end2end来做语义分割的网络,简称为FCN。
FCN网络的结构如上,直接用原图像的ground truth作为监督信息,训练一个端到端的网络,让网络做像素级别的预测,直接预测标签(mask)图像。
将传统网络如AlexNet,VGG等最后的全连接层变为卷积层,可以发现这样做了之后可以共享分类网络的权重。这个过程如下图:
在一般的CNN结构中均是使用pooling层来缩小输出图片的size,如果在VGG16中,五次pooling之后特征图的大小比输入图缩小了32倍。而在fcn网络中,要求网络输出与原图size相同的分割图,因此我们需要对最后一层进行上采样。在caffe中也被称为反卷积(Deconvolution)。 虽然转置卷基层和卷积层一样,也是可以训练参数的,但是在实验中发现,让转置卷基层可学习,并没有带来性能的提高,所以在实验中转置卷基层的lr全部设为0。
从这个图来看,对于输入的原始图像,首先经历了卷积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。
实际上对第5层的输出进行32倍放大(反卷积)就可以得到原图大小了。但是这样做精度不好,会丢失一些细节。所以作者提出将第4层的输出和第3层的输出也依次反卷积,分别做16倍和8倍上采样,最后把不同层级的池化层上采样得到的结果图像叠加在一起,可以得到更加精细的结果,这样做的好处是兼顾了局部和全局的信息,分割细节更加明显。下面有一张32倍,16倍和8倍上采样得到的结果图对比:
可以看到随着上采样做得越多,分割结果越来越精细。
FCN有2个明显的优点,首先是end2end,可以接受任意大小的输入图像尺寸。而是更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。
算法局限
(1)得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
(2)对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
代码实现
https://github.com/BBuf/Keras-Semantic-Segmentation
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!