文章目录

  • 一、语义分割介绍
  • 二、语义分割的思路
    • 空洞卷积
    • 条件随机场
  • 三、经典语义分割算法介绍
    • 1.FCN
    • 2.UNet Family
      • (1)UNet
      • (2)Attention U-Net
      • (3)UNet++
    • 3.DeepLab系列:v1、v2、v3、v3 plus
      • (1)DeepLabV1
        • 多尺度信息融合预测
      • (2)DeepLabV2
      • (3)DeepLabV3
      • (4)DeepLabV3+
    • 4.PSPNet
    • 5.RefineNet
    • 6.FastFCN
      • 扩展卷积与步幅卷积
      • JPU
  • 四、其他语义分割模型
    • 1.基于全卷积的GAN语义分割模型
    • 2.基于注意力的语义分割方法
      • (1)Non-local
      • (2)DANet
      • (3)CCNet
  • 五、实例分割

参考文章:
图像语义分割综述
语义分割综述:深度学习背景下的语义分割的发展状况
一文看尽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的延伸方法:

1.FCN

参考文章:FCN的学习及理解

FCN提出可以把分类任务中后面几个全连接都换成卷积,这样就可以获得一张2维的feature map,后接softmax获得每个像素点的分类信息,从而解决了分割问题。

FCN主要的技术手段如下:

  • 全卷积化(Fully Convolutional):用于解决逐像素(pixel-wise)的预测问题。通过将基础网络(例如VGG)最后面几个全连接层换成卷积层,可实现任意大小的图像输入,并且输出图像大小与输入相对应;
  • 反卷积(deconvolution) :上采样操作,用于恢复图片尺寸,方便后续进行逐像素预测;
  • 跳跃结构(skip architecture):用于融合高低层特征信息。通过跨层连接的结构,结合了网络浅层的细(fine-grain)粒度信息信息以及深层的粗糙(coarse)信息,以实现精准的分割任务。

FCN网络基本原理如下图:

下采样过程:

  • image经过多个conv和+一个max pooling变为pool1 feature,宽高变为1/2
  • pool1 feature再经过多个conv+一个max pooling变为pool2 feature,宽高变为1/4
  • pool2 feature再经过多个conv+一个max pooling变为pool3 feature,宽高变为1/8
  • 直到pool5 feature,宽高变为1/32。

上采样过程:

  • 对于FCN-32s,直接对pool5 feature进行32倍上采样获得32x upsampled feature,再对32x upsampled feature每个点做softmax prediction获得32x upsampled feature prediction(即分割图)。
  • 对于FCN-16s,首先对pool5 feature进行2倍上采样获得2x upsampled feature,再把pool4 feature和2x upsampled feature逐点相加,然后对相加的feature进行16倍上采样,并softmax prediction,获得16x upsampled feature prediction。
  • 对于FCN-8s,首先进行pool4+2x upsampled feature逐点相加,然后又进行pool3+2x upsampled逐点相加,即进行更多次特征融合。具体过程与16s类似,不再赘述。

损失函数是在最后一层的 spatial map上的 pixel 的 loss 和,在每一个 pixel 使用 softmax loss

由上图可知,FCN-32s < FCN-16s < FCN-8s,即使用多层feature融合有利于提高分割准确性。

2.UNet Family

参考文章:
图像分割必备知识点 | Unet详解 理论+ 代码
一文快速回顾U-Net Family

(1)UNet

Unet结构图如下:

Unet网络非常的简单,前半部分就是特征提取,后半部分是上采样。

  • Encoder:左半部分,由两个3x3的卷积层(RELU)再加上一个2x2的maxpooling层组成一个下采样的模块,一共四个下采样模块
  • Decoder:有半部分,由一个上采样的卷积层(去卷积层)+特征拼接concat+两个3x3的卷积层(ReLU)反复构成,一共四个上采样模块

(2)Attention U-Net

尽管U-Net具有良好的表示能力,但它依赖于多级级联卷积神经网络。这些级联框架提取感兴趣的区域并做出密集的预测。这种方法在重复提取低层特征时会导致计算资源的过度和冗余使用。

UNet++在原来的U-Net基础上增加:Attention gates。

Attention gates的结构如上图顶部所示。首先,输入分别经过2个1×1×1卷积,然后将其相加再使用ReLU。其次,再次执行1×1×1转换,但是这次以Sigmoid作为激活函数。然后,它会经过重采样器(实际上是三线性插值),以使特征图的大小与要乘元素的大小相同。最后,使用较低级别的上采样特征图和原始特征进行Element-wise。

(3)UNet++

UNet++通过在编码器和解码器之间加入密集的块和卷积层来提高分割精度。

UNet++在原来的U-Net基础上增加了3项功能:

  • redesigned skip pathways(以绿色显示):使语义上不同的特征映射的融合,以融合编码器和解码器子路径映射之间的语义差距。Redesigned skip pathways的所有卷积都使用3×3大小的核。
  • dense skip connections(以蓝色显示):在编码器和解码器之间实现了跳跃连接。这些稠密块的设计灵感来自DenseNet,目的是提高分割精度和改善梯度流。
  • deep supervision(红色显示):可以修剪模型以调整模型的复杂性,从而在速度(推理时间)和性能之间取得平衡。对于精确模式,平均所有细分分支的输出。对于快速模式,从分割分支之一中选择最终的输出。

3.DeepLab系列:v1、v2、v3、v3 plus

参考文章:
DeepLab 语义分割模型 v1、v2、v3、v3+ 概要(附 Pytorch 实现)
图像分割三-DeepLab V1~4

(1)DeepLabV1

DeepLab v1 模型是在VGG的基础上改造而成。下图为VGG网络示意图

DeepLabV1做的改变包括:

  • 把全连接层(fc6、fc7、fc8)改成卷积层。
  • 把最后两个池化层(pool4、pool5)的步长2改成1(下采样32倍变为8倍,保证feature的分辨率)
  • 把最后三个卷积层(conv5_1、conv5_2、conv5_3)的dilate rate设置为2,且第一个全连接层的dilate rate设置为4(保持感受野)
  • 把最后一个全连接层fc8的通道数从1000改为21

多尺度信息融合预测

作者尝试融合了多层次信息,前四个pool层之后都额外接了两个卷积层,第一个卷积层128x3x3,第二卷积层128x1x1,这四个预测结果与最终模型输出拼接(concatenate)到一起,相当于多了128*5=640个channel。虽然效果不如dense CRF,但也有一定提高。最终模型是结合了Desne CRF与Multi-scale Prediction。

(2)DeepLabV2

DeepLabv2 相对于 v1 最大的改动是增加了受 SPP(Spacial Pyramid Pooling) 启发得来的 空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP)),在模型最后进行像素分类之前增加一个类似 Inception 的结构,包含不同 rate(空洞间隔) 的 Atrous Conv(空洞卷积),增强模型识别不同尺寸的同一物体的能力:

在任意尺度的区域,可以用从单个尺度图像中进行重采样提取的卷积特征进行准确有效地分类。我们用不同采样率的多个并行的空洞卷积实现了他们的方案的一个变体。并行的采用多个采样率的空洞卷积提取特征,再进行特征融合,类似于空间金字塔结构。

(3)DeepLabV3

DeepLabv3 的主要变化如下:

  1. 使用了Multi-Grid 策略,即在模型后端多加几层不同 rate 的空洞卷积:
  2. 将 batch normalization 加入到 ASPP模块.
  3. DeeplabV3中,不需要DenseCRF后处理
  4. 具有不同 atrous rates 的 ASPP 能够有效的捕获多尺度信息。不过,论文发现,随着sampling rate的增加,有效filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小,极端情况下,当空洞卷积的 rate 和 feature map 的大小一致时,3x3 卷积会退化成 1x1 :
  5. 为了保留较大视野的空洞卷积的同时解决这个问题,DeepLabv3 的 ASPP 加入了 全局池化层+conv1x1+双线性插值上采样 的模块:

(4)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+的其他改进还有:

  • 借鉴MobileNet,使用 Depth-wise 空洞卷积+ 1x1 卷积:
  • 使用修改过的 Xception:

4.PSPNet

参考文章:
pspnet.py
PSPNet模型学习笔记

PSPNet是在FCN上的改进,引入更多的上下文信息进行解决,当分割层有更多全局信息时,出现误分割的概率就会低一些。

PSPNet网络结构如下:

详细步骤如下:

  • 输入图像后,使用预训练的带空洞卷积ResNet提取特征图。空洞卷积的作用主要是增大感受野,最终特征图尺寸为输入图像的1/8(stride=8),如上图(b)所示。
  • 我们对上述特征图使用(c)中所示的深度为4的金字塔池化模块来获取语境信息,不同深度的特征是基于输入特征通过不同尺度的池化操作得到的。其中,该PSPNet金字塔池化模块分4个层级,其池化核大小分别为图像的全部、一半和小部分,通过一个1*1卷积层将特征维度缩减为原来的1/4,将这些金字塔特征直接上采样到与输入特征相同尺寸,然后和输入特征做合并(将融合得到的全局特征与原始特征图连接起来),也就是concat操作得到最终输出的特征图,即全局特征。特征合并的过程其实就是融合目标的细节特征(浅层特征)和全局特征(深层特征,也就是上下文信息)的过程。
  • 然后,在(c)模块的最后部分,我们将融合得到的全局特征与原始特征图连接起来。最后,在(d)中通过一层卷积层生成最终的预测图。

PSPNet为像素级场景解析提供了一个有效的全局语境信息,其中,金字塔池化模块能收集不同尺度的语境信息并融合,会比全局池化所得的全局信息更具代表性。在计算成本方面,我们的PSPNet并没有比原来的扩展FCN网络增加多少。另外,在端到端的学习中,全局金字塔池化模块和局部FCN特征还可被同时优化。

5.RefineNet

参考文章:
语义分割之RefineNet
Pytorch Implementation of RefineNet

RefineNet网络是基于Resnet的残差连接的思想设计的,可以充分利用下采样过程损失的信息,使稠密预测更为精准。另外提出了chained residual pooling,能够以一种有效的方式来捕捉背景上下文信息。

RefineNet包括以下几种小模块:

  • Residual convolution unit :对ResNet block进行2层的卷积操作。注意这里有多个ResNet block作为输入。
  • Multi-resolution fusion:将1中得到的feature map进行加和融合。
  • Chained residual pooling :其设计本意是使用侧支上一系列的pooling来获取背景信息(通常尺寸较大)。直连通路上的ReLU可以在不显著影响梯度流通的情况下提高后续pooling的性能,同时不让网络的训练对学习率很敏感。注意:pooling的stride为1。
  • Output convolutions:由三个RCUs构成。

多路径RefineNet

根据feature map的分辨率将预训练RESNET划分为4个block,并采用4个RefineNet的级联结构,每个RefinetNet都接收一个相应的RESNET block的输出和之前的RefineNet。

注意:

  • 这样的设计不是唯一的。实际上每个RefineNet可以接收多个RESNET blocks。不过这里只将前者。
  • 虽然所有的RefineNet都具有相同的内部结构,但是它们的参数没有不一样,这样允许更灵活地适应各个级别的细节信息。

6.FastFCN

参考文章:语义分割之FastFCN

现今的语义分割模型一般会采用两种框架,一种是Encoder-Decoder模型,一种是采用扩展卷积的方法。

  • 对Encoder-Decoder模型来说,在Encoder下采样的过程中随着层数的加深,导致高层次的特征丢失了精细的图像结构信息,虽然在Decoder中人们通过不同的上采样方法来减少损失,但是依旧会使特征有丢失。
  • 对采用扩展卷积的方法的模型来说,引入了扩展卷积方法使得模型感受野增大也会保留了图像中精细的图像结构信息,但是引入扩展卷积会使得计算复杂度和内存占用均大大增加,从而限制了其应用在很多实时的任务中。

为了解决上述的问题,作者提出了一种新的联合上采样方法(JPU),其可以搭配众多的语义分割模型。FastFCN的网络结构如下:

如上图所示,左边是进行了五次的下采样,每层下采样得到的特征图是该层输入特征图的1/2,最后conv5输出的特征图是原图的1/32,然后将conv3~5 的feature map输入到JPU(联合金字塔上采样)模块中,最后再接一个多尺度文本模块(PSP,ASPP)或一个全局文本模块(Encoding),就可以得到最后的图片分割图。

扩展卷积与步幅卷积

扩展卷积与步幅卷积的结构如下图

  • (a)表示的就是扩展卷积的过程,左边的dilated conv可以分解为右边的split+conv+merge(SCrM)。其中split就是将输入按照序号奇偶不同分为两列,conv就是一般的卷积,merge就是交叉连接。dilated conv可以扩大感受域大小,提供更多的上下文信息。
  • (b)表示的是步幅卷积的过程,stride conv=conv+reduce。首先对输入的fin进行一次卷积得到中间特征fm,再删除基数位置数值,得到最后的结果。

下面作者给出了最终得到的特征的过程:

JPU


如上图所示,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进行上采样。

四、其他语义分割模型

1.基于全卷积的GAN语义分割模型

生成对抗网络模型(Generative Adversarial Nets,GAN)同时训练生成器 G 和判别器 D,判别器用来预测给定样本是来自于真实数据还是来自于生成模型。

利用对抗训练方法训练语义分割模型,将传统的多类交叉熵损失与对抗网络相结合,首先对对抗网络进行预训练,然后使用对抗性损失来微调分割网络,如下图所示。左边的分割网络将 RGB 图像作为输入,并产生每个像素的类别预测。右边的对抗网络将标签图作为输入并生成类标签(1 代表真实标注,0 代表合成标签)。

2.基于注意力的语义分割方法

基于注意力的方法,如通道注意力、空间注意力,有选择地聚合不同类别之间的上下文信息。然而,由于缺乏明确的区分,注意力机制的关系描述不够清晰。因此,它可能会选择不需要的上下文依赖关系。

(1)Non-local

卷积是对局部区域进行的操作,所以它是典型的local operations。受计算机视觉中经典的非局部均值(non-local means)的启发,本文提出一种non-local operations用于捕获长距离依赖(long-range dependencies),即如何建立图像上两个有一定距离的像素之间的联系。

(2)DANet

这篇论文主要的创新点在于引入了双注意力机制(Dual Attention)来获取上下文关系,所谓双注意力,指对通道(channel)以及空间(spatial)的 Attention 机制,具体实现如下图:

(3)CCNet

在DANet中,作者用了non-local的思想来解决这个问题,我在上一篇介绍中也提到了,这种方法的局限性在于需要的计算量很大,因此CCNet提出了criss-cross attention module在解决long-range dependencies的前提下,大幅降低了内存占用和计算量。

五、实例分割

参考文章:
实例分割最新最全面综述:从Mask R-CNN到BlendMask
2020 实例分割最新综述
【进展综述】单阶段实例分割(Single Stage Instance Segmentation)

图像语义分割模型综述相关推荐

  1. 深度学习-Tensorflow2.2-图像处理{10}-UNET图像语义分割模型-24

    UNET图像语义分割模型简介 代码 import tensorflow as tf import matplotlib.pyplot as plt %matplotlib inline import ...

  2. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送

    计算机视觉作为人工智能的主流技术领域之一,历经图像分类-->目标定位-->目标检测,最终发展到图像语义分割技术. 如下图所示,从最初的识别图片信息进行单一分类,到单图片中多目标识别分析,而 ...

  3. 用PaddlePaddle实现图像语义分割模型ICNet

    什么是图像语义分割? 图像语意分割顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割,图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进 ...

  4. 当前主流的深度学习图像语义分割模型解析

    转载自[量子位]公众号 QbitAI 原文地址:http://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容. 量子位 ...

  5. 一文总结图像语义分割模型

    作者:咫尺小厘米 链接:https://zhuanlan.zhihu.com/p/133268053 本文转载自知乎,作者已授权,未经许可请勿二次转载 语义分割是图像分割中的基本任务,是指对于图像将每 ...

  6. 图像语义分割模型 FCN

    全卷积网络(Fully Convolutional Networks,FCN) 是用深度神经网络来做语义分割的开山之作,它是首个端对端的针对像素级预测的全卷积网络,自从该网络提出后,就成为语义分割的基 ...

  7. 图像语义分割模型DeepLab训练Cityscapes数据集过程记录

    参考:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/cityscapes.md https://git ...

  8. [论文笔记]图片语义分割 文献综述

    原文:<基于深度学习的图像语义分割方法综述>2019_田萱,引用量=19 1.简介 是什么:ISS 为图像中的每一个像素分配一个预先定义好的表示其语义类别的标签.(田萱,2019) 与目标 ...

  9. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

最新文章

  1. R语言gc函数垃圾回收实战
  2. [转载]OBJECTIVE C (XCODE) 绘图功能简介
  3. 二叉树深度优先遍历和广度优先遍历
  4. 3D 三角形的前面和后面
  5. MFC VS2005 添加Override 和 Message
  6. HTTP 中的 304
  7. 关于面试时碰到的几个多线程手撕代码题
  8. 跟随报文,开启一段奇妙之旅
  9. 什么是工业微型计算机,2008年(下)全国自考工业用微型计算机试卷02241
  10. Element UI el-table 表格多选的使用
  11. jroo,已开源,一个java web快速开发工具
  12. JavaScript之继承和prototype
  13. WPF 获取控件模板中的控件
  14. MYSQL char字符型区分大小写,查询区分大小写
  15. 找网络高手联系方式_怎么才能联系到网络高手(找网络大牛联系方式)
  16. 以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
  17. 编程入门先学什么 c语言软件,编程入门先学什么软件
  18. docker应用篇(1)如何搭建VXXXN
  19. 命令行运行coppeliasim(vrep)出现/usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12‘ not found
  20. c和cpp实现CPU核上绑定固定线程

热门文章

  1. 计算机网络基础知识+学习路线
  2. PHP魔鬼训练第二季,设计模式,注册树模式,模版模式,HTTP响应过程,多进程
  3. 【手写源码-设计模式6】-适配器模式-基于IPhoneX手机充电场景
  4. 工具----8、Xray漏洞扫描器
  5. iOS View添加四周阴影
  6. 名编辑电子杂志大师教程 | *.FLB文件怎么打开
  7. Java实现集成Google邮箱第三方登录
  8. selenium执行js代码
  9. win10系统崩溃蓝屏,开机报错:0xc000000e的解决办法
  10. QQ发消息出现红色感叹号,害得我以为好友都把我删了?