Paddle图像分割7日打卡营学习总结

课程地址:课程

1.FCN

FCN论文地址:https://arxiv.org/abs/1411.4038
代码地址:https://github.com/shelhamer/fcn.berkeleyvision.org

1.1 什么是FCN?

对于一般的分类CNN网络,都会在网络的最后加入全连接层,经过softmax后就可以获得类别概率信息。但这个概率信息是1维的,即智能标识整个图片的类别,不能识别每个像素点的类别。而图像语义分割是像素级分类任务,所以对于分类CNN网络需要加以改进。FCN=Fully Convolution Networks,即网络是全卷积,没有全连接层。这样换一下之后,网络可以输出二维图像。但是经过前面的CNN,会使特征图的尺寸变小,那么怎么输出与原图一样大小的图呢?这需要采用上采用方法。下面首先看FCN网络结构。
在这里插入图片描述

1.2 FCN网络结构

输入图像经过conv1-5个下采样,特征图变为原来尺寸的1/32。对于FCN-32s,直接对pool5 feature进行32倍上采样,再对每个点做softmax prediction获得分割图。还可以集成多层的特征图,以element-wise add的方式结合。下图是FCN结构示意图。这里需要注意的是,为了解决图像过小后 1/32 下采样后输出feature map太小情况,FCN原作者在第一个卷积层conv1_1加入pad=100。
在这里插入图片描述

1.3 feature map上采样

FCN在backbone输出后需要将特征图上采样到原输入大小。一般上采样的方式有resize、transpose conv和un-pooling。

  • Resize
    原文中说到的resize用的是双线性插值。插值原理如下图所示。
    在这里插入图片描述
  • Traspose conv(反卷积)
    把普通卷积反过来,输入2x2,卷积核为3x3,设置padding值,如下图所示,得到4x4的输出。其中卷积核相当于先垂直翻转,再水平翻转。
    在这里插入图片描述
  • Un-pooling
    Pooling的反向操作,这个用得不多。看示意图就能理解。
    在这里插入图片描述

2. U-Net

论文:https://arxiv.org/pdf/1505.04597.pdf
FCN的缺点是没有考虑上下文信息,分割结果不够精细。U-Net采用编码器和解码器结构,融合不同水平的特征来获取上下文信息,如下图所示。首先进行conv+conv+pooling下采样,然后反卷积进行上采样。Crop之前的低层特征图,最后经过softmax获得分割图。
语义分割在特征融合时有两种方法:FCN式的逐点相加,对应tensorflow的add();U-Net的channel维度拼接融合,对应tensorflow的concat()。不过上课时老师说这两者区别不太,concat计算量大但效果要好些。
在这里插入图片描述

3. PSPNet

论文:https://arxiv.org/pdf/1612.01105.pdf,https://hszhao.github.io/projects/pspnet/
PSPNet采用一个不同的策略来解决上下文信息获取问题——增大感受野。具体说来,首先利用特征提取网络如ResNet提取特征。然后用金字塔池化模块聚合不同区域的上下文信息。这个金字塔池化采用自适应池化(adaptive pool),即给定输入特征图HxWxC和输入大小binsize,即可得到binsize大小的输出特征图,论文中的binsize是[1,2,3,6];用1X1卷积将特征图通道变为C/4;再用上采样将特征图尺寸变为原来输入大小HxW;连接金字塔池化模块的输出与backbone的输出得到HxWx2C大小的特征图。最后采样1x1卷积和softmax得到预测图。
值得一提的是,这个backbone可以换成dilated ResNet,可能效果会更好。
在这里插入图片描述

4. DeepLab

DeepLab有四个系列,下表是不同系列的对比。直接放上老师画的模型结构图。
在这里插入图片描述
在这里插入图片描述
这里我们直接来看ASPP(Astrous Spatial Pyramid Pooling),如下图所示。与PSPNet的自适应池化不同,这里采用的是dilated conv,即空洞卷积。红色问号处表示经过空洞卷积后特征图的长宽与输入一致,这里不需要做上采样,即需将空洞卷积的padding值设置为dilation大小,stride设置为1即可。Kernel表示的是卷积核大小。
在这里插入图片描述
再看看ASPP的升级模块,即加入了conv1x1与adaptive pool+interpolate。
在这里插入图片描述
上课时老师给了一个deeplabv3模型实现的流程,我觉得非常清晰,按照这个可以自己写出来,这里也放出来。
在这里插入图片描述

5.总结

这次7日营打卡学到了很多东西,感谢飞桨官方这样一个课程。同时看到了与别人的差距,还需要努力!

猜你喜欢

转载自blog.csdn.net/qq_43265072/article/details/109284584