翻译不易,麻烦 Ctrl-C Ctrl-V 之后标注转载并加上原译者!!
部分内容翻译,部分内容原创。
内容较多,可以传送门直达。新网络待更…
文章目录
介绍
图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。虽然自 2007 年以来,语义分割/场景解析一直是计算机视觉社区的一部分,但与计算机视觉中的其他领域很相似,自 2014 年 Long等人 首次使用全卷积神经网络对自然图像进行端到端分割,语义分割才产生了大的突破。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190325193029702.jpg) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190325193121990.png)
FCN-8s 架构在 Pascal VOC 2012 数据集上的性能相对以前的方法提升了 20%,达到了 62.2% 的mIOU 。这种架构是语义分割的基础,此后一些较新的和更好的体系结构都基于此架构。
全卷积网络(FCNs)可以用于自然图像的语义分割、多模态医学图像分析和多光谱卫星图像分割。
我总结了 FCN、SegNet、U-Net、FC-Densenet E-Net 和 Link-Net、RefineNet、PSPNet、Mask-RCNN 以及一些半监督方法,例如 DecoupledNet 和 GAN-SS,并为其中的一些网络提供了PyTorch实现。在文章的最后一部分,我总结了一些流行的数据集,并展示了一些网络训练的结果。
网络架构
一般的语义分割架构可以被认为是一个编码器-解码器网络。编码器通常是一个预训练的分类网络,像 VGG、ResNet,然后是一个解码器网络。这些架构不同的地方主要在于解码器网络。解码器的任务是将编码器学习到的可判别特征(较低分辨率)从语义上投影到像素空间(较高分辨率),以获得密集分类。
不同于分类任务中网络的最终结果(对图像分类的概率)是唯一重要的事,语义分割不仅需要在像素级有判别能力,还需要有能将编码器在不同阶段学到的可判别特征投影到像素空间的机制。不同的架构采用不同的机制(跳跃连接、金字塔池化等)作为解码机制的一部分。
一些上述架构和加载数据的代码可在以下链接获得:
- Pytorch:meetshah1995/pytorch-semseg
这篇论文 对语义分割(包括 Recurrent Style Networks)作了一个更正式的总结。
Fully Convolution Networks (FCNs) 全卷积网络
CVPR 2015 | Fully Convolutional Networks for Semantic Segmentation | Arxiv |
我们将当前分类网络(AlexNet, VGG net 和 GoogLeNet)修改为全卷积网络,通过对分割任务进行微调,将它们学习的表征转移到网络中。然后,我们定义了一种新的架构,它将深的、粗糙的网络层的语义信息和浅的、精细的网络层的表层信息结合起来,来生成精确和详细的分割。我们的全卷积网络在 PASCAL VOC(在2012年相对以前有20%的提升,达到了62.2%的平均IU),NYUDv2 和 SIFT Flow 上实现了最优的分割结果,对于一个典型的图像,推断只需要三分之一秒的时间。
关键特点:
- 特征是由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同。
- 低分辨率语义特征图的上采样使用经双线性插值滤波器初始化的反卷积操作完成。
- 从 VGG16、Alexnet 等分类器网络进行知识迁移来实现语义细分。
如上图所示,像 VGG16
分类网络的全连接层(fc6
,fc7
)被转换为全卷积层。它生成了一个低分辨率的类的热图,然后使用经双线性插值初始化的反卷积,并在上采样的每一个阶段通过融合(简单地相加) VGG16
中的低层(conv4
和conv3
)的更加粗糙但是分辨率更高的特征图进一步细化特征。在 这里 可以找到更加详细的 netscope 风格的网络可视化。
在传统的分类 CNNs 中,池化操作用来增加视野,同时减少特征图的分辨率。这对于分类任务来说非常有用,因为分类的最终目标是找到某个特定类的存在,而对象的空间位置无关紧要。因此,在每个卷积块之后引入池化操作,以使后续块能够从已池化的特征中提取更多抽象、突出类的特征。
另一方面,池化和带步长的卷积对语义分割是不利的,因为这些操作造成了空间信息的丢失。下面列出的大多数架构主要在解码器中使用了不同的机制,但目的都在于恢复在编码器中降低分辨率时丢失的信息。如上图所示,FCN-8s 融合了不同粗糙度(conv3
、conv4
和fc7
)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。
![conv_1_1_gradient](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NoZWtraXpoL0ZDTi50ZW5zb3JmbG93L21hc3Rlci9sb2dzL2ltYWdlcy9jb252XzFfMV9ncmFkaWVudC5wbmc) ![conv_4_1_gradient](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NoZWtraXpoL0ZDTi50ZW5zb3JmbG93L21hc3Rlci9sb2dzL2ltYWdlcy9jb252XzRfMV9ncmFkaWVudC5wbmc)
![conv_4_2_gradient](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NoZWtraXpoL0ZDTi50ZW5zb3JmbG93L21hc3Rlci9sb2dzL2ltYWdlcy9jb252XzRfMl9ncmFkaWVudC5wbmc) ![conv_4_3_gradient](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NoZWtraXpoL0ZDTi50ZW5zb3JmbG93L21hc3Rlci9sb2dzL2ltYWdlcy9jb252XzRfM19ncmFkaWVudC5wbmc)
第一个卷积层捕捉低层次的几何信息,因为这完全依赖数据集,你可以注意到梯度调整了第一层的权重以使模型适应数据集。VGG 中更深层的卷积层有非常小的梯度流,因为这里捕获的高层次的语义概念足够用于分割。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190325194358270.gif)
语义分割架构的另一个重要方面是,对特征图使用反卷积,将低分辨率分割图上采样至输入图像分辨率,或者花费大量计算成本,使用空洞卷积在编码器上部分避免分辨率下降。即使在现代 GPUs 上,空洞卷积的计算成本也很高。distill.pub 上的这篇文章详细介绍了反卷积。
SegNet
2015 | SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation | Arxiv |
SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。我们将我们所提出的架构与广泛采用的 FCN 以及众所周知的 DeepLab-LargeFOV,DeconvNet 架构进行比较。比较的结果揭示了在实现良好的分割性能时所涉及的内存与精度之间的权衡。
关键特点:
- SegNet 在解码器中使用反池化对特征图进行上采样,并在分割中保持高频细节的完整性。
- 编码器不使用全连接层(和 FCN 一样进行卷积),因此是拥有较少参数的轻量级网络。
如上图所示,编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息。
U-Net
MICCAI 2015 | U-Net: Convolutional Networks for Biomedical Image Segmentation | Arxiv |
U-Net 架构包括一个捕获上下文信息的收缩路径和一个支持精确本地化的对称扩展路径。我们证明了这样一个网络可以使用非常少的图像进行端到端的训练,并且在ISBI神经元结构分割挑战赛中取得了比以前最好的方法(一个滑动窗口的卷积网络)更加优异的性能。我们使用相同的网络,在透射光显微镜图像(相位对比度和 DIC)上进行训练,以很大的优势获得了2015年 ISBI 细胞追踪挑战赛。此外,网络推断速度很快。一个512x512的图像的分割在最新的 GPU 上花费了不到一秒。
关键特点:
- U-Net 简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。该网络非常类似于 Ladder Network 类型的架构。
- 通过跳跃
拼接
连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征。 - 上采样采用转置卷积。
U-Net 在 EM 数据集上取得了最优异的结果,该数据集只有30个密集标注的医学图像和其他医学图像数据集,U-Net 后来扩展到3D版的 3D-U-Net。虽然 U-Net 最初的发表在于其在生物医学领域的分割、网络的实用性以及从非常少的数据中学习的能力,但现在已经成功应用其他几个领域,例如 卫星图像分割,同时也成为许多 kaggle竞赛 中关于医学图像分割的获胜的解决方案的一部分。
DeepLab v1
ICLR 2015 | Semantic Image Segmentation with deep convolutional nets and fully connected CRFs | Arxiv |
近来,深度卷积网络在高级视觉任务(图像分类和目标检测)中展示了优异的性能。本文结合 DCNN 和概率图模型来解决像素级分类任务(即语义分割)。我们展示了 DCNN 最后一层的响应不足以精确定位目标边界,这是 DCNN 的不变性导致的。我们通过在最后一层网络后结合全连接条件随机场来解决糟糕的定位问题。我们的方法在 PASCAL VOC 2012 上达到了 71.6% 的 mIoU。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190325194437242.gif)
关键特点:
- 提出 空洞卷积(atrous convolution)(又称扩张卷积(dilated convolution))。
- 在最后两个最大池化操作中不降低特征图的分辨率,并在倒数第二个最大池化之后的卷积中使用空洞卷积。
- 使用 CRF(条件随机场) 作为后处理,恢复边界细节,达到准确定位效果。
- 附加输入图像和前四个最大池化层的每个输出到一个两层卷积,然后拼接到主网络的最后一层,达到 多尺度预测 效果。
DeepLab v2
TPAMI 2017 | DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs | Arxiv |
首先,我们强调上采样过滤器的卷积,或“空洞卷积”,在密集预测任务中是一个强大的工具。空洞卷积允许我们显式地控制在深度卷积神经网络中计算的特征响应的分辨率。它还允许我们有效地扩大过滤器的视野,在不增加参数数量或计算量的情况下引入更大的上下文。其次,提出了一种空洞空间金字塔池化(ASPP)的多尺度鲁棒分割方法。ASPP 使用多个采样率的过滤器和有效的视野探测传入的卷积特征层,从而在多个尺度上捕获目标和图像上下文。第三,结合 DCNNs 方法和概率图形模型,改进了目标边界的定位。DCNNs 中常用的最大池化和下采样的组合实现了不变性,但对定位精度有一定的影响。我们通过将 DCNN 最后一层的响应与一个全连接条件随机场(CRF)相结合来克服这个问题。DeepLab v2 在 PASCAL VOC 2012 上得到了 79.7% 的 mIoU。
论文中提出了语义分割中的三个挑战:
- 由于池化和卷积而减少的特征分辨率。
- 多尺度目标的存在。
- 由于 DCNN 不变性而减少的定位准确率。
对于第一个挑战可以减少特征图下采样的次数,但是会增加计算量。
对于第二个挑战可以使用图像金字塔、空间金字塔等多尺度方法获取多尺度上下文信息。
对于第三个挑战可以使用跳跃连接或者引入条件随机场。
DeepLab v2 使用 VGG 和 ResNet 作为主干网络分别进行了实验。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190326164616615.png)
关键特点:
- 提出了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling),在不同的分支采用不同的空洞率以获得多尺度图像表征。
DeepLab v3
2017 | Rethinking Atrous Convolution for Semantic Image Segmentation | Arxiv |
在本工作中,我们再次讨论空洞卷积,一个显式调整过滤器视野,同时控制特征相应分辨率的强大工具。为了解决多尺度目标的分割问题,我们串行/并行设计了能够捕捉多尺度上下文的模块,模块中采用不同的空洞率。此外,我们增强了先前提出的空洞空间金字塔池化模块,增加了图像级特征来编码全局上下文,使得模块可以在多尺度下探测卷积特征。提出的 “DeepLab v3” 系统在没有 CRF 作为后处理的情况下显著提升了性能。
DeepLab v3 使用 ResNet 作为主干网络。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402190228185.png)
关键特点:
- 在残差块中使用多网格方法(MultiGrid),从而引入不同的空洞率。
- 在空洞空间金字塔池化模块中加入图像级(Image-level)特征,并且使用 BatchNormalization 技巧。
Fully Convolutional DenseNet
2016 | The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation | Arxiv |
在本文中,我们扩展了 DenseNets,以解决语义分割的问题。我们在城市场景基准数据集(如 CamVid 和 Gatech )上获得了最优异的结果,没有使用进一步的后处理模块和预训练模型。此外,由于模型的优异结构,我们的方法比当前发布的在这些数据集上取得最佳的网络的参数要少得多。
全卷积 DenseNet 使用 DenseNet 作为它的基础编码器,并且也以类似于U-Net的方式,在每一层级上将编码器和解码器进行拼接。
E-Net 和 Link-Net
2016 | ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation | Arxiv |
2017 | LinkNet: Feature Forwarding: Exploiting Encoder Representations for Efficient Semantic Segmentation | Blog |
在本文中,我们提出了一种新颖的深度神经网络架构,称为 ENet(efficient neural network),专门为需要低延迟操作的任务创建。ENet 比当前网络模型快18倍,少用75倍的 FLOPs,参数数量少79倍,并且提供相似甚至更好的准确率。我们在 CamVid、Cityscapes 和 SUN 数据集上进行了测试,展示了与现有的最优方法进行比较的结果,以及网络准确率和处理时间之间的权衡。
LinkNet 可以在 TX1 和 Titan X 上,分别以 2fps 和 19fps 的速率处理分辨率为 1280x720 的图像。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190326165005165.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019032616503450.png)
LinkNet 架构类似于一个梯形网络架构,编码器的特征图(横向)和解码器的上采样特征图(纵向)相加。还需要注意的是,由于它的通道约减方案,解码器模块包含了相当少的参数。大小为[H, W, n_channels]
的特征图先通过1*1
卷积核得到大小为[H, W, n_channels / 4]
的特征图,然后使用反卷积将其变为[2*H, 2*W, n_channels / 4]
,最后使用1*1
卷积使其大小变为[2*H, 2*W, n_channels / 2]
,因此解码器有着更少的参数。这些网络在实现相当接近于最优准确率的同时,可以实时地在嵌入式 GPU 上进行分割。
Mask R-CNN
2017 | Mask R-CNN | Arxiv |
该方法被称为 Mask R-CNN,以Faster R-CNN 为基础,在现有的边界框识别分支基础上添加一个并行的预测目标掩码的分支。Mask R-CNN 很容易训练,仅仅在 Faster R-CNN 上增加了一点小开销,运行速度为 5fps。此外,Mask R-CNN 很容易泛化至其他任务,例如,可以使用相同的框架进行姿态估计。我们在 COCO 所有的挑战赛中都获得了最优结果,包括实例分割,边界框目标检测,和人关键点检测。在没有使用任何技巧的情况下,Mask R-CNN 在每项任务上都优于所有现有的单模型网络,包括 COCO 2016 挑战赛的获胜者。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402191000286.png)
(下)原始 Faster-RCNN 架构和辅助分割分支
Mask R-CNN 架构相当简单,它是流行的 Faster R-CNN 架构的扩展,在其基础上进行必要的修改,以执行语义分割。
关键特点:
- 在Faster R-CNN 上添加辅助分支以执行语义分割
- 对每个实例进行的 RoIPool 操作已经被修改为 RoIAlign ,它避免了特征提取的空间量化,因为在最高分辨率中保持空间特征不变对于语义分割很重要。
- Mask R-CNN 与 Feature Pyramid Networks(类似于PSPNet,它对特征使用了金字塔池化)相结合,在 MS COCO 数据集上取得了最优结果。
在2017-06-01的时候,在网络上还没有 Mask R-CNN 的工作实现,而且也没有在 Pascal VOC 上进行基准测试,但是它的分割掩码显示了它与真实标注非常接近。
PSPNet
CVPR 2017 | PSPNet: Pyramid Scene Parsing Network | Arxiv |
在本文中,我们利用基于不同区域的上下文信息集合,通过我们的金字塔池化模块,使用提出的金字塔场景解析网络(PSPNet)来发挥全局上下文信息的能力。我们的全局先验表征在场景解析任务中产生了良好的质量结果,而 PSPNet 为像素级的预测提供了一个更好的框架,该方法在不同的数据集上达到了最优性能。它首次在2016 ImageNet 场景解析挑战赛,PASCAL VOC 2012 基准和 Cityscapes 基准中出现。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402191116835.png)
(下)使用 netscope 实现的可视化的空间金字塔池化
关键特点:
- PSPNet 通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的
1/4
),直到它到达空间池化模块。 - 在 ResNet 的中间层中引入辅助损失,以优化整体学习。
- 在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文。
RefineNet
CVPR 2017 | RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation | Arxiv |
在这里,我们提出了 RefineNet,一个通用的多路径优化网络,它明确利用了整个下采样过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早期卷积中的细粒度特征来直接细化捕捉高级语义特征的更深的网络层。RefineNet 的各个组件使用遵循恒等映射思想的残差连接,这允许网络进行有效的端到端训练。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402191340916.png)
(下)建立 RefineNet 的块 - 残差卷积单元,多分辨率融合和链式残差池化
RefineNet 解决了传统卷积网络中空间分辨率减少的问题,与 PSPNet(使用计算成本高的空洞卷积)使用的方法非常不同。提出的架构迭代地池化特征,利用特殊的 RefineNet 模块增加不同的分辨率,并最终生成高分辨率的分割图。
关键特点:
- 使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一个阶段。
- 引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征。
- 所有的特征融合都是使用
sum
(ResNet 方式)来进行端到端训练。 - 使用普通ResNet的残差层,没有计算成本高的空洞卷积。
G-FRNet
CVPR 2017 | G-FRNet: Gated Feedback Refinement Network for Dense Image Labeling | Arxiv |
本文提出了 Gated Feedback Refinement Network (G-FRNet),这是一种用于密集标记任务的端到端深度学习框架,解决了现有方法的局限性。最初,GFRNet 进行粗略的预测,然后通过在细化阶段有效地集成局部和全局上下文信息,逐步细化细节。我们引入了控制信息前向传递的门控单元,以过滤歧义。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402191456774.png)
(下)门控细化单元
上述大多数架构都依赖于从编码器到解码器的简单特征,使用拼接
、反池化
或简单的加和
。然而,在编码器中,从高分辨率(较难判别)层到对应的解码器中相应的上采样特征图的信息,可能或不能用于分割。在每个阶段,通过使用门控细化反馈单元,控制从编码器传送到解码器的信息流,这样可以帮助解码器解决歧义,并形成更相关的门控空间上下文。
另一方面,本文的实验表明,在语义分割任务中,ResNet是一个远优于VGG16的编码器。这是我在以前的论文中找不到的。
半监督语义分割
DecoupledNet
NIPS 2015 | Decoupled Deep Neural Network for Semi-supervised Semantic Segmentation | Arxiv |
与现有的将语义分割作为基于区域分类的单一任务的方法相反,我们的算法将分类和分割分离,并为每个任务学习一个单独的网络。在这个架构中,通过分类网络识别与图像相关的标签,然后在分割网络中对每个识别的标签执行二进制分割。它通过利用从桥接层获得的特定类的激活图来有效地减少用于分割的搜索空间。
这也许是第一个使用全卷积网络进行语义分割的半监督方法。
关键特点:
- 分离分类和分割任务,从而使预训练的分类网络能够即插即用(plug and play)。
- 分类和分割网络之间的桥接层生成突出类的特征图(k类),然后输入分割网络,生成一个二进制分割图(k类)
- 但是,这个方法在一张图像中分割k类需要传递k次。
基于GAN的方法
2017 | Semi and Weakly Supervised Semantic Segmentation Using Generative Adversarial Network | Arxiv |
特别地,我们基于生成对抗网络(GANs)提出了一种半监督框架,它包含一个生成器网络以提供额外的用于多类别分类器的训练样本,作为在 GAN 框架中的判别器,从K个可能的类中为样本分配一个标签y或者将其标记为一个假样本(额外的类)。为了确保 GANs 生成的图像质量更高,随之改进像素分类,我们通过添加弱标注数据来扩展上述框架,即我们向生成器提供类级别的信息。
数据集
数据集 | 训练数量 | 测试数量 | 类别数量 |
---|---|---|---|
CamVid | 468(包含 101 张验证图像) | 233 | 32(SegNet 论文中使用 11 类) |
PascalVOC 2012 | 9963 | 1447 | 20 |
NYUDv2 | 795 | 645 | 40 |
Cityscapes | 2975 | 500 | 19 |
Sun-RGBD | 10355 | 2860 | 37 |
MS COCO | 80000 | 40000 | 80 |
ADE20K | 20210 | 2000 | 150 |
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190402191926539.jpg)
最后挂两个复制粘贴还标翻译标原创的
https://blog.csdn.net/SHAOYEZUIZUISHAUI/article/details/82666558
https://blog.csdn.net/mieleizhi0522/article/details/82469160
</div>