图像分割算法FCN论文解读

论文名称:Fully Convolutional Networks for Semantic Segmentation

论文地址:https://arxiv.org/pdf/1411.4038.pdf

代码地址:https://github.com/shekkizh/FCN.tensorflow

 

语义分割是指对图像进行像素级别的分类,即标注出图像中每个像素所属的类别。

这篇论文是语义分割算法的开山之作,作者提出了:

(1)将全连接层替换为卷积层的end-to-end的全卷积网络,可以适应任意尺寸的输入,在不破坏空间结构的基础上,可以对图像进行像素级别的分类。

(2)一种跳跃结构,也就是将不同池化层的结果进行上采样,可以得到更为精细的输出。

 

一、论文解读

1、CNN与FCN

CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图映射成一个固定长度的特征向量,softmax归一化后表示输入图像属于每一类的概率。

图像分割算法FCN论文解读_第1张图片

FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,通过逐个像素地求其在1000张特征图(1000个通道、1000个类别)上,该像素位置的最大数值描述(概率)作为该像素的分类,也就是求每个像素的所属类别,损失函数是在最后一层的特征图上各像素的损失之和。

图像分割算法FCN论文解读_第2张图片
 

 

2、跳跃结构

对图像进行5次卷积+池化,图像会缩小至原图的1/2、1/4、1/8、1/16、1/32,如下:

图像分割算法FCN论文解读_第3张图片

把CNN中的全连接层变成卷积核为1*1*outputsize的卷积层conv6、conv7,图像大小不变,得到heatmap,如下:

图像分割算法FCN论文解读_第4张图片

只对最后一层上采样的话,生成的图像不能够很好地还原图像当中的特征。

现在有1/32、1/16、1/8的特征图:

  • 将1/32尺寸的heatMap进行反卷积上采样(stride=2,得到1/16的特征图),加上(concat操作)pool4的结果(1/16的特征图)补充细节(相当于一个插值过程),得到1/16的特征图;
  • 再对这个concat的结果(1/16的特征图)进行再次反卷积上采样(stride=2,得到1/8的特征图),加上(concat操作)pool3的结果(1/8的特征图)补充细节,得到1/8的特征图;
  • 再对这个concat的结果(1/8的特征图)进行一次反卷积(stride=8,得到原图大小的特征图),也就完成了整个图像的还原。

具体来说,就是将不同池化层的结果进行上采样。其中,使用 concat 操作融合两个层 ,然后结合这些结果来优化输出。

图像分割算法FCN论文解读_第5张图片

 

3、思考1:FCN是如何得到最后的分割图的?

取每个像素在1000个特征图中,类别可能性最大的像素值,作为这个像素最后的预测像素值,这样可以为每个像素预测一个类别,每种颜色代表一个类别,自然就分割开了。

图像分割算法FCN论文解读_第6张图片

 

4、思考2:FCN缺点?

FCN只能做类别预测,不能做实例预测

 

二、代码理解

1、FCN网络结构图

将vgg19最后三个全连接层换成卷积层,再将不同池化层的结果综合考虑。

图像分割算法FCN论文解读_第7张图片

代码如下(vgg19的前16个卷积层):

图像分割算法FCN论文解读_第8张图片

将vgg19个最后三个全连接层换成卷积层

图像分割算法FCN论文解读_第9张图片

对不同池化层结果进行上采样,最终还原到原图大小。

论文中提出,最后一层输出1000张特征图,通过逐个像素地求其在1000张特征图上,该像素位置的最大数值描述(概率)作为该像素的分类,也就是求每个像素的所属类别。(代码中是3通道,和原图一致)

图像分割算法FCN论文解读_第10张图片

2、损失函数(交叉熵损失)

 

 

 

参考文章:

https://blog.csdn.net/xg123321123/article/details/53092154

https://www.cnblogs.com/gujianhan/p/6030639.html

 

 

你可能感兴趣的:(paper阅读,图像处理,FCN)