参考文章:
图像语义分割综述
语义分割综述:深度学习背景下的语义分割的发展状况
一文看尽9篇语义分割最新论文(GPSNet/Graph-FCN/HMANet等)
基于深度学习的语义分割技术讲解
Github:
Awesome Semantic Segmentation
语义分割是 在像素级别上的分类,属于同一类的像素都要被归为一类。比如以下照片,属于人的像素都要分成一类,属于摩托车的像素也要分成一类,除此之外还有背景像素也被分为一类。
像素精度(pixel accuracy ):每一类像素正确分类的个数/ 每一类像素的实际个数
均像素精度(mean pixel accuracy ):每一类像素的精度的平均值
平均交并比(Mean Intersection over Union):MIoU是指求出每一类的IOU取平均值。IOU指的是两块区域相交的部分/两个部分的并集,如下图中:绿色部分/总面积。
权频交并比(Frequency Weight Intersection over Union):每一类出现的频率作为权重
dilated/atrous (空洞卷积)架构,这种结构代替了pooling,一方面它可以保持空间分辨率,另外一方面它由于可以扩大感受野因而可以很好地整合上下文信息。如下图:
除了以上思路,还有一种对分割结果进行后处理的方法,那就是条件随机场(Conditional Random Fields (CRFs))后处理用来改善分割效果。DeepLab系列文章基本都采用这种后处理方法,可以较好地改善分割结果,其思想是在对一个像素做分类时,不光考虑 DCNN 输出的结果,还要考虑周围像素的意见尤其像素值比较接近的,这样得出的语义分割结果会有更好的边缘。如下图:
条件随机场的公式如下:
加号左边的式子中对于每个像素点xi,P(xi)表示预测值
加号右边的式子中p 表示像素的位置,I 表示像素的 RGB 数值。第一项会迫使颜色相似、位置相近的像素具有相似的标签,第二个内核是为了在迫使结果平滑时能够考虑到空间相似度。
现在的深度学习语义分割模型基本上都是基于FCN发展而来的,它是开山鼻祖,一张图概括FCN的延伸方法:
参考文章:FCN的学习及理解
FCN提出可以把分类任务中后面几个全连接都换成卷积,这样就可以获得一张2维的feature map,后接softmax获得每个像素点的分类信息,从而解决了分割问题。
FCN主要的技术手段如下:
上采样过程:
损失函数是在最后一层的 spatial map上的 pixel 的 loss 和,在每一个 pixel 使用 softmax loss
由上图可知,FCN-32s < FCN-16s < FCN-8s,即使用多层feature融合有利于提高分割准确性。
参考文章:
图像分割必备知识点 | Unet详解 理论+ 代码
一文快速回顾U-Net Family
Unet结构图如下:
Unet网络非常的简单,前半部分就是特征提取,后半部分是上采样。
尽管U-Net具有良好的表示能力,但它依赖于多级级联卷积神经网络。这些级联框架提取感兴趣的区域并做出密集的预测。这种方法在重复提取低层特征时会导致计算资源的过度和冗余使用。
UNet++在原来的U-Net基础上增加:Attention gates。
Attention gates的结构如上图顶部所示。首先,输入分别经过2个1×1×1卷积,然后将其相加再使用ReLU。其次,再次执行1×1×1转换,但是这次以Sigmoid作为激活函数。然后,它会经过重采样器(实际上是三线性插值),以使特征图的大小与要乘元素的大小相同。最后,使用较低级别的上采样特征图和原始特征进行Element-wise。
UNet++通过在编码器和解码器之间加入密集的块和卷积层来提高分割精度。
UNet++在原来的U-Net基础上增加了3项功能:
参考文章:
DeepLab 语义分割模型 v1、v2、v3、v3+ 概要(附 Pytorch 实现)
图像分割三-DeepLab V1~4
DeepLab v1 模型是在VGG的基础上改造而成。下图为VGG网络示意图
DeepLabV1做的改变包括:
作者尝试融合了多层次信息,前四个pool层之后都额外接了两个卷积层,第一个卷积层128x3x3,第二卷积层128x1x1,这四个预测结果与最终模型输出拼接(concatenate)到一起,相当于多了128*5=640个channel。虽然效果不如dense CRF,但也有一定提高。最终模型是结合了Desne CRF与Multi-scale Prediction。
DeepLabv2 相对于 v1 最大的改动是增加了受 SPP(Spacial Pyramid Pooling) 启发得来的 空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP)),在模型最后进行像素分类之前增加一个类似 Inception 的结构,包含不同 rate(空洞间隔) 的 Atrous Conv(空洞卷积),增强模型识别不同尺寸的同一物体的能力:
在任意尺度的区域,可以用从单个尺度图像中进行重采样提取的卷积特征进行准确有效地分类。我们用不同采样率的多个并行的空洞卷积实现了他们的方案的一个变体。并行的采用多个采样率的空洞卷积提取特征,再进行特征融合,类似于空间金字塔结构。
DeepLabv3 的主要变化如下:
V3+ 最大的改进是将 DeepLab 的 DCNN 部分看做 Encoder,将 DCNN 输出的特征图上采样成原图大小的部分看做 Decoder ,构成 Encoder+Decoder 体系,双线性插值上采样便是一个简单的 Decoder,而强化 Decoder 便可使模型整体在图像语义分割边缘部分取得良好的结果。
具体来说,DeepLabV3+ 在 stride = 16 的DeepLabv3 模型输出上采样 4x 后,将 DCNN 中 0.25x 的输出使用 1x1 的卷积降维后与之连接(concat)再使用 3x3 卷积处理后双线性插值上采样 4 倍后得到相对于 DeepLabv3 更精细的结果。
DeepLabv3+的其他改进还有:
参考文章:
pspnet.py
PSPNet模型学习笔记
PSPNet是在FCN上的改进,引入更多的上下文信息进行解决,当分割层有更多全局信息时,出现误分割的概率就会低一些。
PSPNet为像素级场景解析提供了一个有效的全局语境信息,其中,金字塔池化模块能收集不同尺度的语境信息并融合,会比全局池化所得的全局信息更具代表性。在计算成本方面,我们的PSPNet并没有比原来的扩展FCN网络增加多少。另外,在端到端的学习中,全局金字塔池化模块和局部FCN特征还可被同时优化。
参考文章:
语义分割之RefineNet
Pytorch Implementation of RefineNet
RefineNet网络是基于Resnet的残差连接的思想设计的,可以充分利用下采样过程损失的信息,使稠密预测更为精准。另外提出了chained residual pooling,能够以一种有效的方式来捕捉背景上下文信息。
RefineNet包括以下几种小模块:
多路径RefineNet
根据feature map的分辨率将预训练RESNET划分为4个block,并采用4个RefineNet的级联结构,每个RefinetNet都接收一个相应的RESNET block的输出和之前的RefineNet。
注意:
参考文章:语义分割之FastFCN
现今的语义分割模型一般会采用两种框架,一种是Encoder-Decoder模型,一种是采用扩展卷积的方法。
为了解决上述的问题,作者提出了一种新的联合上采样方法(JPU),其可以搭配众多的语义分割模型。FastFCN的网络结构如下:
如上图所示,左边是进行了五次的下采样,每层下采样得到的特征图是该层输入特征图的1/2,最后conv5输出的特征图是原图的1/32,然后将conv3~5 的feature map输入到JPU(联合金字塔上采样)模块中,最后再接一个多尺度文本模块(PSP,ASPP)或一个全局文本模块(Encoding),就可以得到最后的图片分割图。
如上图所示,JPU可以分为a,b,c三个阶段,其中a输入特征图x,经过卷积CONV得到ym,将fm转换为具有缩减尺寸的嵌入空间,有助于融合和降低计算复杂度。b该阶段对上部分输入进行上采样和concatenate,得到yc,在利用四个不同的空洞率并行地对yc提取特征,所以JPU可以在多层特征图上提取多尺度文本信息,与ASPP(在单层上提取多尺度信息)不同。其中,dilated rate=1学习ym0和ym1之间的关系,dilated rate=2,4,8学习的是mapping h,即ym0转换成ys。c阶段对提取到的特征进行一次CONV,最后得到分割图。至此,JPU解决了两个紧密层之间联合上采样问题,也就是解决了基于conv3上采样conv4,根据采样之后的Conv4对Conv5进行上采样。
生成对抗网络模型(Generative Adversarial Nets,GAN)同时训练生成器 G 和判别器 D,判别器用来预测给定样本是来自于真实数据还是来自于生成模型。
利用对抗训练方法训练语义分割模型,将传统的多类交叉熵损失与对抗网络相结合,首先对对抗网络进行预训练,然后使用对抗性损失来微调分割网络,如下图所示。左边的分割网络将 RGB 图像作为输入,并产生每个像素的类别预测。右边的对抗网络将标签图作为输入并生成类标签(1 代表真实标注,0 代表合成标签)。
基于注意力的方法,如通道注意力、空间注意力,有选择地聚合不同类别之间的上下文信息。然而,由于缺乏明确的区分,注意力机制的关系描述不够清晰。因此,它可能会选择不需要的上下文依赖关系。
卷积是对局部区域进行的操作,所以它是典型的local operations。受计算机视觉中经典的非局部均值(non-local means)的启发,本文提出一种non-local operations用于捕获长距离依赖(long-range dependencies),即如何建立图像上两个有一定距离的像素之间的联系。
这篇论文主要的创新点在于引入了双注意力机制(Dual Attention)来获取上下文关系,所谓双注意力,指对通道(channel)以及空间(spatial)的 Attention 机制,具体实现如下图:
在DANet中,作者用了non-local的思想来解决这个问题,我在上一篇介绍中也提到了,这种方法的局限性在于需要的计算量很大,因此CCNet提出了criss-cross attention module在解决long-range dependencies的前提下,大幅降低了内存占用和计算量。
参考文章:
实例分割最新最全面综述:从Mask R-CNN到BlendMask
2020 实例分割最新综述
【进展综述】单阶段实例分割(Single Stage Instance Segmentation)