【论文阅读】Fully Convolutional Networks for Semantic Segmentation

2022新年啦,今年准备每天读一篇论文(大概)。由于个人能力问题,阅读过程可能是粗读,因为有的地方看不懂,看不懂的地方我就标记一下挖个坑,以后能力长进的时候我再来填坑(大概)。因为怕读完就扔掉了,所以还是在这里记录一下,以后常来复习。

第一篇就读过一段时间可能会考的计算机视觉课里提到的全卷积神经网络(FCN)开始吧

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

以下为正文:

全卷积神经网络(FCN)是一种可以处理任意尺寸的图片输入并输出同样大小尺寸的图片的卷积网络。可以应用的任务包括但不限于语义分割。

【论文阅读】Fully Convolutional Networks for Semantic Segmentation


论文的第一和第二部分分别是“引言”与“相关工作”。“引言”部分从CNN和语义分割任务引入FCN,并且介绍了一些FCN的基本内容。“相关工作”部分介绍了一些有关语义分割与“让网络对各种输入尺寸通用”的其他研究,并对比提出FCN的优势。


论文的第三部分开始正式介绍FCN的一些思想。以下按照论文顺序依次介绍:

1.将模型的全连接部分改成卷积实现(Adapting classifiers for dense prediction)

        通常,CNN的最后会是一些全连接层,这些全连接层本质上是线性操作(不考虑激活函数),是能用卷积的形式表示出来的。改成卷积的形式可以让模型应对各种输入尺寸,因为卷积操作是滑动实现的,只有全连接层才对输入尺寸有严格的要求。而且卷积可以高效地实现,以提高效率。

2.在模型有下采样的情况下如何维持尺寸(Shift-and-stitch is filter rarefaction)

        FCN输出的尺寸要求和输入的尺寸一样,在模型有下采样(pooling)的情况下如何做到呢?这一部分论文首先提到的是Shift-and-stitch的技巧,但是这个技巧不是很高效。于是作者用另一种方式实现了同样的效果,我总结为两步:(设置stride=1)+(filter rarefaction)。具体的方式我本来也没太看懂,直到看了这个文章:Shift and stitch理解 - 知乎 (zhihu.com)。因此不再赘述。

3.反卷积以保持同样大小尺寸(Upsampling is backwards strided convolution)

        另一种保持尺寸的方式是插值,可以看做反着进行的卷积,也就是反卷积(deconvolution)。优点是可以不是固定操作,而是可学习的。        

        虽然第二点也可以做到保持尺寸,但是作者实验发现效果不如可学习的反卷积,因此之后的模型一律使用反卷积。

4.如何模仿通常的patchwise模型训练过程(Patchwise training is loss sampling)

        通常有关此类任务的模型是用patchwise的方式实现的,patchwise的介绍如下图:

【论文阅读】Fully Convolutional Networks for Semantic Segmentation

        对我们的FCN如何模拟这样的随机选一些patchs 组成minibatch的过程呢?答案是先对整个图像进行逐像素损失的计算,之后从图像上随机采一些点组成batch,而这个batch的损失就是已经计算出的这些点的损失的平均。这个过程作者称为“loss sampling”。因为是一次性计算出所有点的损失之后再采样,相比采样后再计算损失,loss sampling要更加高效(我觉着是因为少了很多可能的重复计算)。

        但是,作者实验发现,这种从已经计算好的整个图像的损失上采样再反向传播并不会提高收敛速度与最终性能,因此还是直接用整个图像的损失进行训练,不用这个采样的过程。


在论文的第四部分,作者首先用上述的方式改造了一些用于图像分类的经典网络(LeNet、VGG等),进行迁移学习加微调。改造方式为:

  1. 将全连接部分改造成卷积实现
  2. 加上一个1*1卷积调整通道数
  3. 加上一个反卷积层以进行上采样

改造后的性能如下:

【论文阅读】Fully Convolutional Networks for Semantic Segmentation

之后,作者又自己自己实现了一个网络架构,来融合粗粒度与细粒度的信息(也可以说是全局信息与局部信息)。方式为加上一种跳跃连接, 图片说明比文字更直接:

【论文阅读】Fully Convolutional Networks for Semantic Segmentation

不同程度的融合被称作不同的名称,如FCN-32s、FCN-16s、FCN-8s,数字越小融合程度越高。作者发现继续融合带来的提升不怎么高了,也就没有继续融合下去。

第四部分的剩余部分作者介绍了实验的一些配置,如优化器参数选择、微调方式选择、图像增强等,我就不再重复啦,论文里说的很明白。


第五部分是“实验结果”与第六部分“总结”,因为看不懂这些数据集以及评价指标,就没再看下去,以后在这方面了解更深入之后再回来看吧。


我再在这记录一下看不太懂的地方哈,如果有高手碰巧看到这里的话,请赐教(orz拜谢拜谢拜谢orz!!)

  • 第三部分介绍loss sampling时,下面标记红字的地方看不懂

    【论文阅读】Fully Convolutional Networks for Semantic Segmentation

  • 第四部分(第七页)有提到类别不平衡问题,不是很懂这么做怎么会缓解类别不平衡问题

    【论文阅读】Fully Convolutional Networks for Semantic Segmentation


 大概就这些啦!非常感谢论文的三位作者!

 

 

上一篇:x86-3-段式管理(segmentation)


下一篇:编译正确,运行ORB_SLAM3报错Segmentation fault