图像分割网络探究

回眸只為那壹抹淺笑 提交于 2019-12-28 04:46:29


主要图像分割任务的区别:
语义分割:把一定数目不同的类别的图像分割出来,不需要分开多个相同的个体;
实例分割:区分一定数目相同类别的不同个体;
全景分割:区分未知数目相同类别的不同个体。
在这里插入图片描述

1. FCN全卷积网络-2014

参考:FCN
在这里插入图片描述
特点

  • 输入:整幅图像。输出:空间尺寸与输入图像相同,通道数等于全部类别个数。真值:通道数为1(或2)的分割图像。
  • 池化层P5上采样(反卷积)+P4上采样+P3上采样作为最终的预测具有最好的效果。即把后阶段的特征加到前面的特征图,再更大的尺寸进行预测。(一般分类是下采样到最好层进行加操作,但是这里是上采样,能够不丢失信息的同时保持最后阶段的语义特征)。相当于在特征金字塔的最底层进行预测。

缺点

  • 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
  • 对各个像素进行分类,没有充分考虑像素与像素之间的关系。

尽管FCN意义重大,在当时来讲效果也相当惊人,但是FCN本身仍然有许多局限。比如:
(1)没有考虑全局信息
(2)无法解决实例分割问题
(3)速度远不能达到实时
(4)不能够应对诸如3D点云等不定型数据
相关改进如图所示:
在这里插入图片描述

2. 编解码结构SegNet-2015

在这里插入图片描述
特点

  • 使用记住位置的反池化进行上采样,而不是FCN的反卷积,能够减少参数。基于pooling indices的上采样方法更加锐化了边缘,同时存储空间的需求大大减小了;
  • 解码器特征图的大小恢复到了输入图的大小,而不是FCN的8倍下采样的大小。相当于完整的特征金字塔。

3. U-Net分割网络-2015

在这里插入图片描述
特点

  • 上采样采用双线性插值,没有学习参数。
  • FCN 中深层信息与浅层信息融合是通过对应element-add的方式,而 Unet 是通过Concat的方式。(在相加的方式下,feature map 的维度没有变化,但每个维度都包含了更多特征,对于普通的分类任务这种不需要从 feature map 复原到原始分辨率的任务来说,这是一个高效的选择;而拼接则保留了更多的维度/位置 信息,这使得后面的 layer 可以在浅层特征与深层特征自由选择,这对语义分割任务来说更有优势。)

4. DeepLab v1,v2,v3 -2015,2017,2018

参考:分割模型解读】感受野与分辨率的控制术—空洞卷积
DeepLab系列总结「v1、v2、v3、v3+」
Deeplab系列(V1\V2\V3)论文理解
v1特点

  • 网络中重复的最大池化和下采样会造成分辨率下降,DeepLabv1通过带孔卷积(atrous)解决。也就是poo4之后在不改变特征尺寸的基础上增大了感受野,也就不需要前面提到的解码器了。但是最后使用插值上采样恢复到输入尺寸。
  • 分类器获得以对象为中心的决策需要空间不变性,从而限制了DCNN的空间精度,DeepLabv1通过条件随机场(CRF)提高模型捕获精细细节的能力
    在这里插入图片描述
    网络基于VGG做出的改变:
  • 把最后的全连接层FC6、7、8改造成卷积层,步幅32(步幅=输入尺寸/输出特征尺寸)
  • pool4,pool5的stride由2变为1。(目标步幅8)
  • conv5_1, conv5_2和conv5_3中hole size为2,后面的fc6中hole size为4。
  • 由于Hole算法让feature map更加dense,所以网络直接用差值升采样就能获得很好的结果,而不用去学习升采样的参数了(FCN中采用了de-convolution)

v2特点

  • 采用多尺度处理和ASPP达到了更好的性能。
  • 在DeepLab-v1基础上将VGG-16换成ResNet
    在这里插入图片描述
    在这里插入图片描述
    v3特点
  • ASPP后加了BN层
  • 没有使用CRF
  • 尝试复制了ResNet最后的block,并级联
  • 使用了深层次的空洞卷积,改进的ASPP

下图尝试了使用多个空洞卷积的串联结构:
在这里插入图片描述
下图尝试并联结构,相当于ASPP,但是对其进行了改进:当采样率接近特征映射大小时,原来3x3卷积的9个参数只剩下中间参数有效,其他参数作用于前面feature层的padding部分,为无效参数,所以在rate变大时,33卷积退化成11卷积,所以这里的aspp去掉了rate=24的分支,直接使用1*1卷积分支。另外,为了获得全局信息,加入了image pooling分支,其实这个分支做的操作就是将block4输出的feature进行全局池化,然后再双线性插值到与其他分支一样的分辨率。最后将五个分支concat,再做1*1卷积(通道数变化)。
在这里插入图片描述
v3+特点
在这里插入图片描述
( a ): 即DeepLabv3的结构,使用ASPP模块获取多尺度上下文信息,直接上采样得到预测结果
( b ): encoder-decoder结构,高层特征提供语义,decoder逐步恢复边界信息
( c ): DeepLabv3+结构,以DeepLabv3为encoder,decoder结构简单
完整网络如下所示:
在这里插入图片描述
decoder的组成:

encoder输出的feature的outputstride=16,经过双线性上采样4倍得到FA,FA的outputstride=4。再取encoder中对应着相同分辨率(即outputstride=4)的特征层,经过1×1卷积降通道,此时输出的feature记为FB。这里为什么要经过1×1卷积降通道,是因为此分辨率的特征通道较多(256或512),而FA输出只有256,故降通道以保持与FA所占比重,利于模型学习。将FA和FB做concat,再经过一个3×3卷积细化feature,最终再双线性上采样4倍得到预测结果。

encoder结构变化:

扩张分离卷积:
深度分离卷积,将标准卷积分解成深度卷积(depthwise convolution)和逐点卷积(pointwise convolution),我们对扩张卷积和深度卷积结合在一起,即扩张分离卷积,显著减少模型的计算复杂度并维持相似的表现。

本文使用Xception的结构,在每个3*3的深度卷积后增加BN和ReLU,将此作为encoder网络主体,代替本来的ResNet101。与Xception不同的几点是:
(1)层数变深了
(2)所有的最大池化都被替换成了3x3 with stride 2 的separable convolution
(3)在每个3x3 depthwise separable convolution的后面加了BN和ReLU

总结Deeplab的发展过程:首先是提出了空洞卷积,然后提出了空洞金字塔卷积,最后是融合中间特征的解码器结构。主干网络从VGG换成了Resnet101,再到Xception。

5. 实时分割网络ENet-2016

实时网络设计可考虑的内容(这部分细节要看看论文):

  • 特征图分辨率:不可以太小,但是也不能太大。目前被广泛接受的下降比率不超过1/8。可采用空洞卷积。
  • 提前下采样:原始图片存在大量的冗余信息,所以可以先缩小图片,同时特征数目不用太多,16和32差不多。
  • 解码器规模:编码器用于编码信息,但是解码器主要用于信息微调,所以不用太大。
  • PRelu,分解卷积层,空洞卷积,正则化等。

下面是ENet的主要模块和网络:
在这里插入图片描述
输入同时使用了卷积和池化,使用池化的目的是获得更多的有用信息,因为这里只用了一层卷积。在bottleneck中,也是同时使用了卷积和池化(需要下采样时),但是卷积层先降维再升维。
在这里插入图片描述

6. CRFasRNN-空了看看

7. PSPNet-2017

Pyramid Scene Parsing Network:可看做是输出特征金字塔。对最后的特征进行了不同尺度的卷积操作(卷积核为1,2,3,6等)。优点是可以关注到不同尺寸的物体。
POOL为全局平均池化;
conv是11卷积,实现降维;
Upsample是双线性插值;
Concat包括池化前和后的所有特征;
最后使用了1
1卷积获得不同类别的特征图。
在这里插入图片描述

8.Parsenet

特点

  • 认为实际感受野达不到理论感受野,故提出使用全局池化增加全局信息;

在这里插入图片描述
特征图全局平均池化,再分别使用L2归一化,因为这些特征的尺度(scale)和范数(norm)是不同的。如果直接将这些特征级联起来会造成大特征控制小特征,使分割效果变差。最后池化后的赋值H*W次,恢复特征维度,最后caoncat,再学习尺度参数对尺度进行调整,因为如果只是单纯地对所有输入层进行归一化,不仅会减慢网络的训练速度,同时也会改变该层的尺度。因此,还需要对其增加一个尺度参数gamma,将归一化的结果进行尺度缩放(缩放结果为y)。
感觉前面提到的ENet和Deeplabv3都借鉴了本文的思想,ENet在卷积的时候使用了最大池化,Deeplabv3在最后的特征金字塔使用了全局平均池化(原文明确提出引用了)。

9. UNet++ 2018

在这里插入图片描述
Unet++论文解读
分析:
(1)Unet的缺点在哪
这个结构最优秀的点就在于结合了深浅层特征,结合的方式类似却优于FCN。但是如何进一步提升特征结合的方式呢?这里使用了中间层进行残差卷积的方式。只有短链接,没有长连接,那么前面的特征似乎还是没用起来,那么就想到了dense的想法,将前层的内容都加到一起。
(2)Unet要多深合适?
有些问题简单,浅层网络就能解决,增加深度并不能增加效果。有些问题难,就需要深层网络,毕竟需要将问题抽象的更猛烈些。如何选择最优呢?这里使用中间层输出进行深度监督的方式。
(3)降采样对于分割网络到底是不是必须的?
这一点我认为除了作者所说的增加鲁棒性,轻微的旋转不变性,减少训练参数等原因。其实也有为了能增加卷积网络深层的原因,还有增加感受野的原因。这里中间层的特征其实是没有进过完全的下采样的。
总结主要改进点:
在每阶段都恢复输出到原尺寸,最后进行多监督。效果:保证不受深度的影响,每阶段都有输出,多次卷积也在保留低层次特征的同时提高了每阶段特征的抽象效果。

10. Deepmask 实例分割 2015

感觉不是很懂,为什么网络的输出只是一个分割结果,但是又能够分割出多个对象。
在这里插入图片描述
VGG出来的网络很简单,一个掩膜分支,一个概率分支。

11. RefineNet 多分辨率特征融合 -2016

特点

  • 对融合前后的特征进行了处理,增强特征融合的效果;
  • 全程使用了残差结构,保证至少达到简单的特征融合的效果。
    在这里插入图片描述
    其实网络图和UNet很相似,分为三个模块:残差卷积模块(RCU,Residual Convolution Unit)、多分辨率融合模块(Multi-Resolution Fusion)和串联残差池化模块(Chained Residual Pooling)。
    在这里插入图片描述
    RCU:用于特征的前处理,相当于学习主干网络新的东西;
    MRF:进行多分辨率图像的融合;
    CRP:特征融合后非处理,相当于学习处理后的新特征。(池化步长为1,估计是重叠池化)

12. LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation

在这里插入图片描述
特点

  • 解码过程中,使用了解码器,而不是UNet的直接相加。编码器主要是ResNet18,解码器使用11卷积修改维度,使用**33卷积提取融合后的特征**。编码解码结构如下:
    在这里插入图片描述
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!