深度学习系列分割网络模型(DeepLab V1V2V3V3+PSPNet)

Posted Python编程和深度学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习系列分割网络模型(DeepLab V1V2V3V3+PSPNet)相关的知识,希望对你有一定的参考价值。

深度学习系列(五)分割网络模型(DeepLab V1、DeepLab V2、PSPNet、DeepLab V3DeepLab V3+)

内容目录

1、Deeplab V12、DeepLab V23、PSPNet4、Deeplab v35、DeepLab V3+

1、Deeplab V1

《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFS》
http://arxiv.org/pdf/1412.7062v3.pdf
由于卷积神经网络在提取特征时会将输入图像逐渐缩小,featuremap变小形成高级别的特征对分割任务并不适用,DeepLab采用了空洞卷积替换传统的卷积和fully connected CRF。为了利用已经训练好的VGG模型进行fine-tuning,又想改变网络结构得到更加dense的score map而引入的空洞卷积。

1-空洞卷积的引入
VGG16的原始模型,卷积层的卷积核大小统一为 3x3,步长为 1,最大池化层的池化窗口为 2x2,步长为2 。

改进是使用 1x1 的卷积层代替FC层,那么就变成了全卷积网络,输出得到的是得分图,也可以理解成概率图。将pool4和pool5的步长由2改为1, 这样在原本FC7的位置,VGG网络总的步长由原来的32变为8(总步长=输入size/特征图size)。一般来说,池化层的步长为2,池化后输出大小变为输入大小的一半。原VGG16模型有5次池化,缩小 2^5=32倍,修改后的VGG16有3次步长为2的池化,缩小 2^3=8倍,两次步长为1的池化,输出大小基本不变,所以说VGG网络总的步长由原来的32变为8。这样改的原因是为了获得更为稠密(dense)的score map。感受野是当前这一层的节点往前能看到多少前些层的节点,最直观的是与步长和pooling size有关。步长缩小之后感受野不变,但输出更加Dense密集,有利于分割结果的精细化。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

2-Fully connected CRF
CRF就是Conditional Random Field (条件随机场),在图像处理领域的作用是平滑处理,在针对某个位置的像素值处理时会综合考虑周围像素的值,采用Fully connected CRF可以综合考虑全局信息,恢复详细的局部结构,如精确图形的轮廓。CRF几乎可以用于所有的分割任务中图像精度的提高。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

第一列是原图像和Ground Truth;第二列是DCNN的输出,上面是得分图(Score map),下面是置信图(Belief map)。最后一个DCNN层的输出用作CRF的输入。后面三列分别是CRF迭代1、2、10次后的得分图和置信图。

2、DeepLab V2

《DeepLab-v2: Semantic Image Segmentation 》
https://arxiv.org/pdf/1606.00915.pdf
Deeplabv2 在之前的基础上做了新的改进,引入ASPP(Atrous spatial pyramid pooling)使用多尺度multi-scale构造多感受野域,对最后输出的性能提升明显。
使用空间金字塔池化的方法,代替原来对图像做预处理resize 的方法,使得输入图片可以具有任意尺度,而不影响神经网络中全连接层的输入大小,实现对图像大小和不同长宽比的处理,通过不同的空洞卷积对图像进行不同程度的缩放,得到不同大小的feature map,之后进行池化得到固定大小的图像,
DeepLab V2有两个基础网络结构,一个是基于vgg16,另外一个是基于resnet101的。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

上图a为DeepLab-LargeFOV(仅单个atrous conv),b为DeepLab-ASPP。

3、PSPNet

《Pyramid Scene Parsing Network》
https://arxiv.org/pdf/1612.01105.pdf

通过多尺度 Pooling 的方式得到不同 Scale 的 Feature,Concat 得到判别的多尺度特征,对于输入图像,首先通过一个ResNet网络提取图像特征(feature map),如图(b);之后将得到的feature map输出到一个全局pool层,再通过一个Pyramid Pooling Module金字塔池化模块获得多个sub-region的特征表示,之后通过上采样(upsampling),并串联层(concat)所有特征,得到最后的特征表示向量,从而获得图像的局部和全局特征,如图(c)所示,图中从上到下四个卷积层,最后将得到的向量输入一个卷积层(卷积,用于减小维度),得到最后的预测结果。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

并且引入额外的深度监督 Loss,除了使用softmax loss,还引入了res4b22 residule模块的loss2,并引入一个权重参数来控制loss2的权重,辅助分类器可以帮助优化学习过程。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

4、Deeplab v3

《Rethinking Atrous Convolution for Semantic Image Segmentation》
https://arxiv.org/pdf/1706.05587.pdf

空洞卷积是一种显式调整滤波器感受野和控制网络特征响应分辨率的有效工具。为了解决多尺度分割对象的问题,我们设计了采用级联或并行多个不同膨胀系数的空洞卷积模块,以更好的捕获上下文语义信息。此外,改进了在DeepLab V2中提出的ASPP模块,将BN层引入ASPP,采用全局平均池化进一步提升了它的性能,deeplabv3中,使用大采样率的3X3空洞卷积,图像边界响应无法捕捉远距离信息,会退化为1×1的卷积, 所以deeplabv3将图像级特征融合到ASPP模块中,去掉了 CRFs。
文章讨论了四种利用上下文信息进行语义分割的全卷积网络(FCNs)如下,
图像金字塔(Image pyramid):多个尺度的图片输入到一个相同的网络中,并将所有比例的特征图合并。
编码器-解码器(Encoder-Decoder) 。应用有反卷积进行上采样、SegNet复用编码器中的池化索引,学习额外的卷积层来平滑特征响应、U-Net将编码器中的特征层通过跳跃连接添加到相应的解码器激活层中。
上下文模块(Context module) 包含了额外的模块,采用级联的方式,用来编码远距离上下文信息。一种有效的方法是合并Dense CRF到DCNN中,共同训练DCNN和CRF。
空间金字塔池化(Spatial pyramid pooling) 空间金字塔池化可以在多个范围内捕捉上下文信息。DeepLabv V2提出了空洞卷积空间金字塔池化(ASPP),使用不同采样率的并行空洞卷积层才捕获多尺度信息。PSPNet在不同网格尺度上执行空间池化,并在多个语义分割数据集上获得出色的性能。

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

深度学习系列(五)分割网络模型(DeepLab V1、V2、V3、V3+、PSPNet)

这篇论文还提出了三种改善ASPP的方法,涉及了像素级特征的连接、加入1×1的卷积层和三个不同比率下3×3的空洞卷积,还在每个并行卷积层之后加入了批量归一化操作。

5、DeepLab V3+

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
https://arxiv.org/pdf/1802.02611.pdf
在语义分割任务中,spatial pyramid pooling module(SPP)可以捕获更多尺度信息,encoder-decoder结构可以更好恢复物体的边缘信息。DeepLab V3+将DeepLab V3作为encoder,把Xception和深度可分离卷积Depthwise separable convolution(之前的文章介绍过)应用到ASPP和decoder中,encoder网络使用resnet101或 Xception,

文章还对Xception 改进作为backbone,介绍了两种backbone,一是Resnet101,二是改进后的xception。xception效果好于resnet。
Xception 主要采用了deepwish seperable convolution来替换原来的卷积层。Entry flow 保持不变,但是添加了更多的 Middle flow。所有的 max pooling 被 depthwise separable convolutions 替代。在每个 3x3 depthwise convolution 之外,增加了 batch normalization 和 ReLU。


多个分割网络的pytorch实现,如:Deeplabv3, Deeplabv3_plus, PSPNet, UNet, UNet_AutoEncoder, UNet_nested, R2AttUNet, AttentionUNet, RecurrentUNet, SEGNet, CENet, DsenseASPP, RefineNet, RDFNet

链接:

https://github.com/Minerva-jiezhao/Pytorch-Segmentation-multi-models


以上是关于深度学习系列分割网络模型(DeepLab V1V2V3V3+PSPNet)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB深度学习采用 Deeplab v3+ 实现全景分割

深度学习系列分割网络模型(FCNUnetUnet++SegNetRefineNet)

从FCN到DeepLab

Keras深度学习实战(18)——语义分割详解

深度学习系列卷积神经网络模型(从LeNet-5到Inception V4)

论文笔记SegNet