[FCN]Fully Convolutional Networks for Semantic Segmentation学习

论文翻译

又是一个看不懂原文,又看不懂翻译的论文。

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

 

semantic segmentation 图像语义分割

  • 就是预测每个像素所属的对象类别

语义分割是指像素级地识别图像,即标注出图像中每个像素所属的对象类别。下图为语义分割的一个实例,其目标是预测出图像中每一个像素的类标签。

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

图片中每一个像素都有了预测结果。粉红色区域的像素,预测结果是人。等。

简单来说,分割的目标一般是将一张RGB图像(height*width*3)或是灰度图(height*width*1)作为输入,输出的是分割图,其中每一个像素包含了其类别的标签(height*width*1). 为了清晰起见,使用了低分辨率的预测图,但实际上分割图的分辨率应与原始输入的分辨率相匹配。 

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

  • 要与实例分割区分

根据我的理解,实例分割,上图就应该把三个人分别标注出来,有甲乙丙三个人。但是图像语义分割就没有必要分得清楚了,只要告诉我们这三个地方都是人就行了。

  • 曾经流行图像块分类(patch classification)

语义分割任务最初流行的深度学习方法是图像块分类(patch classification),即利用像素周围的图像块对每一个像素进行独立的分类。使用图像块分类的主要原因是分类网络通常是全连接层(full   connected   layer),且要求固定尺寸的图像.

 

反卷积(backwards convolution)

  • 先了解一下正常的三种卷积

(1)same卷积:output和input的大小是一样的

滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1

卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值。

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

 

(2)valid卷积 : 

滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1-N2)/S+1     x     (N1-N2)/S+1

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

(3)full卷积

蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。图6的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1+N2-1)    x   (N1+N2-1)

上图滑动步长为1,图片大小为2x2,卷积核大小为3x3,卷积后图像大小:4x4

  • 反卷积(后卷积,转置卷积)​​​​​​​

​​​​​​​Deconvolution layer is a very unfortunate name and should rather be called a transposed convolutional layer。23333

实际上通过反卷积操作并不能还原出卷积之前的图片,只能还原出卷积之前图片的尺寸。那么到底反卷积有什么作用呢?通过反卷积可以用来可视化卷积的过程,反卷积在GAN等领域中有着大量的应用。

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7
即输入为2x2的图片经过4x4的卷积核进行步长为3的反卷积的过程
1.输入图片每个像素进行一次full卷积,根据full卷积大小计算可以知道每个像素的卷积后大小为 1+4-1=4, 即4x4大小的特征图,输入有4个像素所以4个4x4的特征图
2.将4个特征图进行步长为3的 fusion(即相加); 例如红色的特征图仍然是在原来输入位置(左上角),绿色还是在原来的位置(右上角),步长为3是指每隔3个像素进行fusion,重叠部分进行相加,即输出的第1行第4列是由红色特阵图的第一行第四列与绿色特征图的第一行第一列相加得到,其他如此类推。 

可以看出反卷积的大小是由卷积核大小与滑动步长决定, in是输入大小, k是卷积核大小, s是滑动步长, out是输出大小
得到 out = (in - 1) * s + k

上图过程就是, (2 - 1) * 3 + 4 = 7

图像语义分割的度量标准

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

 

FCN 

FCN将传统CNN中的全连接层转化成一个个的卷积层。如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。
 

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

可以发现,经过多次卷积(还有pooling)以后,得到的图像越来越小,分辨率越来越低(粗略的图像),那么FCN是如何得到图像中每一个像素的类别的呢?为了从这个分辨率低的粗略图像恢复到原图的分辨率,FCN使用了上采样。例如经过5次卷积(和pooling)以后,图像的分辨率依次缩小了2,4,8,16,32倍。对于最后一层的输出图像,需要进行32倍的上采样,以得到原图一样的大小。

这个上采样是通过反卷积(deconvolution)实现的。对第5层的输出(32倍放大)反卷积到原图大小,得到的结果还是不够精确,一些细节无法恢复。于是Jonathan将第4层的输出和第3层的输出也依次反卷积,分别需要16倍和8倍上采样,结果就精细一些了。下图是这个卷积和反卷积上采样的过程:

[FCN]Fully Convolutional Networks for Semantic Segmentation学习


下图是32倍,16倍和8倍上采样得到的结果的对比,可以看到它们得到的结果越来越精确:

[FCN]Fully Convolutional Networks for Semantic Segmentation学习

 FCN的优缺点

与传统用CNN进行图像分割的方法相比,FCN有两大明显的优点:一是可以接受任意大小的输入图像,而不用要求所有的训练图像和测试图像具有同样的尺寸。二是更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。

同时FCN的缺点也比较明显:一是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。二是对各个像素进行分类,没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
 

 

参考链接

卷积神经网络CNN(1)——图像卷积与反卷积(后卷积,转置卷积)

彻底搞懂CNN中的卷积和反卷积(含代码)

FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation)

深度学习之语义分割中的度量标准(准确度)(pixel accuracy, mean accuracy, mean IU, frequency weighted IU)

全卷积网络(FCN)与图像分割(超棒的!!!)

Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

FCN的学习及理解(Fully Convolutional Networks for Semantic Segmentation) 包括详细的网络架构

FCN笔记(Fully Convolutional Networks for Semantic Segmentation)

深度学习 15. 全连接和区域连接,fully connected 和 local connected, 解释说明(最简单的解释)

图像语义分割综述(semantic segmentation) 上篇 ​​​​​​​