飞桨paddlepaddle图像分割课程笔记
飞桨paddlepaddle图像分割课程笔记
最近花了一周时间听了百度飞桨推出的图像分割课程,受益匪浅,特此记录一下。
1. FCN 全卷积网络
上图是一个FCN-32s网络的结构图。在这个网络中,图片经过骨干网络(VGG Network)提取特征后,得到长宽缩小32倍的特征图,随后直接将特征图上采样32倍,得到和输入图片一样大小的分割图。
是不是特别简单直接。别看这个网络设计的这么简单,但确实可以得到分割图。
当然,因为是直接将特征图上采样32倍,这种方式得到的分割精度不会很高。
为了提高分割精度,作者还提出将骨干网络的中间层提取出来,与上述分割结果融合,得到最终的输出结果。这样就可以得到FCN-16s, FCN-8s, FCN-4s以及FCN-2s网络。
上图展示的是FCN-8s网络,该网络将Pool3和Pool4的输出取出,与FCN-32s的输出结果融合,得到最终的分割图。具体的融合方式见下图:
首先将FC7(FCN-32s的输出)上采样2倍,与Pool4输出结果相加,得到与Pool4融合的特征图。随后将这个特征图再上采样2倍,与Pool3层的结果相加,得到融合了Pool4、Pool3信息的特征图。再将这个特征图上采样8倍,经过一个softmax层,就得到了与输入图片一样大小的分割图。因为最终上采样8倍,所以称为FCN-8s。
2. U-Net
上图是U-Net的网络结构图,图片首先经过4次卷积池化操作后得到特征图,随后又将特征图经过4次上采样(这里使用的是反卷积)卷积操作得到最终的分割结果。同时,在每一次上采样的过程中,特征图还会与前面特征提取层的对应层结果拼接起来,以便融合特征提取层的信息,提高分割结果的精度。
U-Net与FCN网络结构很相似,区别在于,U-Net上采样时,还会一系列卷积操作,而FCN没有。另外,融合特征提取层信息时,U-Net使用的时沿通道拼接(Concat),而FCN使用的时相加。
3. PSPNet
PSPNet (Pyramid Scene Parsing Network)网络结构如下图所示:
PSPNet在特征图上引入了Pyramid Pooling Module(上图虚线框部分),扩大了感受野,使得模型能够获取到更多上下文信息,期待让分割结果更加准确。
Pyramid Pooling Module的设计也不复杂。该模块将骨干网络提取的特征图通过AdaptivePooling缩放为四种不同的尺寸,并分别通过卷积层将通道数压缩为原来的四分之一,随后各自经过上采样得到与输入特征图长宽一样、通道数为原来的1/4的特征图,最后将这些特征图与原特征图拼接(Concat)起来,得到该模块的输出。
4. DeepLab系列
DeepLab图像分割网络有V1、V2、V3、V3+等一系列网络,下表对比了DeepLab系列网络的关键结构
下图显示了DeepLabV1 - V3的网络结构。
这里我们主要介绍一下ASPP模块,ASPP’ (upgraded ASPP)模块。
ASPP(Atrous Spatial Pyramid Pooling)模块是在DeepLabV2中引入的一个模块,它的结构如下图所示。特征图分别经过4种kernel size一样,dilation不一样的卷积,得到4个大小一样的特征图,最后将这四个特征图相加融合,得到输出结果
ASPP’ (upgraded ASPP)是ASPP模块的改进版,结构如下图所示。相比原始的ASPP模块,改进版的增加了一个1x1的卷积以及一个AdaptivePooling层,最后将5个特征图concat并经过一个1x1卷积,得到最终的输出。
5. 总结
我们对比上面介绍的网络可以发现,这些分割网络从设计上来讲都是大同小异。图片特征提取层使用的都是典型的网络,例如VGG、ResNet等,主要的不同点在于分割头的设计上,也就是如何将从特征图变换到分割图。FCN和U-Net选择将特征提取网络中间层的输出融合到分割图中,而PSPNet以及DeepLab系列则是选择用扩大网络的感受野的方式整合上下文信息,以期待获得良好的分割图。
学完这些网络后,自然而然会问出这么几个问题:网络这样设计为什么有效?除此之外,有没有其他方式融合浅层信息,有没有其他方式整合整合上下文信息?好好想想,也许就是一篇不错的paper咧!
Acknowledgement
非常感谢百度AIStudio开设的这次课程,感谢百度研究院的朱老师伍老师授课!特别是朱老师,在线Coding,佩服至极!