语义分割一文概览主要语义分割网络,FCNUNetSegNetDeepLab
Posted 超级无敌陈大佬的跟班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语义分割一文概览主要语义分割网络,FCNUNetSegNetDeepLab相关的知识,希望对你有一定的参考价值。
目录
1. Semantic Segmentation(语义分割):
2. Instance Segmentation(实例分割):
一、Fully Convolution Networks (FCNs) 全卷积网络
原文链接:https://blog.csdn.net/qq_20084101/article/details/80432960#t13
原作者写的很用心,看起来很舒服很丝滑。这里就不重复造轮子了。
前言知识
一、语义分割与实例分割的区别
1. Semantic Segmentation(语义分割):
是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。
语义分割方式存在一些问题,比如如果一个像素被标记为红色,那就代表这个像素所在的位置是一个人,但是如果有两个都是红色的像素,这种方式无法判断它们是属于同一个人还是不同的人。也就是说语义分割只能判断类别,无法区分个体。(PS:例如两个人站在一起,语义分割可以得到这个位置是人这个类别,但是它无法判断是一个人或者两个人)
2. Instance Segmentation(实例分割):
实例分割方式有点类似于物体检测,不过物体检测一般输出的是 bounding box,实例分割输出的是一个mask。
实例分割和上面的语义分割也不同,它不需要对每个像素进行标记,它只需要找到感兴趣物体的边缘轮廓就行,比如下图中的人就是感兴趣的物体。该图的分割方法采用了一种称为Mask R-CNN的方法。我们可以看到每个人都是不同的颜色的轮廓,因此我们可以区分出单个个体。
二、语义分割一般网络架构
一般的语义分割架构可以被认为是一个编码器-解码器网络。
- 1)编码器:通常是一个预训练的分类网络,像 VGG、ResNet,然后是一个解码器网络。这些架构不同的地方主要在于解码器网络。
- 2)解码器:解码器的任务是将编码器学习到的可判别特征(较低分辨率)从语义上投影到像素空间(较高分辨率),以获得密集分类。
语义分割不仅需要在像素级有判别能力,还需要有能将编码器在不同阶段学到的可判别特征投影到像素空间(即映射回原图大小)的机制。不同的架构采用不同的机制(跳跃连接、金字塔池化等)作为解码机制的一部分。
三、三种上采样方式
3.1 双线性插值上采样
待补充
3.2 反卷积上采样
3.3 反池化上采样
上面三种方法各有优缺,双线性插值方法实现简单,无需训练;反卷积上采样需要训练,但能更好的还原特征图;
各种分割网络讲解:
一、Fully Convolution Networks (FCNs) 全卷积网络
CVPR 2015 | Fully Convolutional Networks for Semantic Segmentation |
FCN网络语义分割流程图:
随着网络深度增加分辨率下降,学习到深层的语义特征,最后映射回原图进行像素级预测。
FCN网络关键特点:
- 1)融合不同阶段(深层浅层)的特征:特征是由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同,融合采用像素值相加的方式。
- 2)使用反卷积上采样:低分辨率语义特征图的上采样使用反卷积操作完成(初始化值采用双线性插值得到)。
- 3)基网络迁移学习:从VGG16、Alexnet 等分类器网络进行知识迁移来实现语义细分。
FCN-8s 网络架构:
从上图中可以看出,网络编码阶段特征图尺寸逐渐变小,空间信息会有一定的丢失。解码阶段通过上采样扩大特征图分辨率,同时,通过融合conv4和conv3层的特征(采用像素值相加),来恢复下采样过程中丢失的部分空间信息。
池化和带步长的卷积对语义分割是不利的,因为这些操作造成了空间信息的丢失。
反卷积(转置卷积)的形式:
- 输入尺寸2*2,卷积核3*3,对输入特征图进行padding,然后再执行卷积操作。得到输出的尺寸为5*5;
- padding方式:在输入特征图元素之间插入0元素,不是传统卷积只在两边填充。操作步骤:首先在2*2的输入特征图元素间插入0元素得到5*5尺寸的特征图,这个时候就能在卷积后输出5*5尺寸了。然后跟传统卷积流程一样,两边填充一个像素。最终将2*2特征图padding到下面的7*7。
二、SegNet
2015 | SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation | Arxiv |
SegNet网络结构:
关键特点:
- 1)使用反池化进行上采样:SegNet 在解码器中使用反池化对特征图进行上采样,并在分割中保持高频细节的完整性(即下采样时记录了采样值位置信息,上采样时再填充到该位置)。
- 编码器不使用全连接层(和FCN一样进行卷积),因此是拥有较少参数的轻量级网络。
反池化原理:
如下图所示,下采样时记录了最大值的位置,上采样时再填充到对应位置。
如上图所示,编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息。
三、U-Net
MICCAI 2015 | U-Net: Convolutional Networks for Biomedical Image Segmentation | Arxiv |
U-Net网络架构:
关键特点:
- 1)encode和decode阶段特征图拼接:U-Net 简单地将编码器(encode)的特征图拼接至每个阶段解码器(decode)的上采样特征图,从而形成一个梯形结构。
- 通过跳跃
拼接
连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征。 - 上采样采用转置卷积。
- 在医学图像、遥感图像领域效果比较好。
四、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。
关键特点:
- 1)使用空洞卷积增加感受野:提出 空洞卷积(atrous convolution)又称扩张卷积(dilated convolution)了,在不进行下采样的情况下,扩大卷积的感受野。
- 2)在最后两个最大池化操作中不降低特征图的分辨率,并在倒数第二个最大池化之后的卷积中使用空洞卷积。
- 3)CRF条件随机场:使用 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关键特点:
- 提出了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP),在不同的分支采用不同空洞率的卷积可以获取不同感受野大小下的特征,以获得多尺度图像表征。
- backbone由 vgg16 改为 resnet 。
六、DeepLab v3
2017 | Rethinking Atrous Convolution for Semantic Image Segmentation | Arxiv |
在本工作中,我们再次讨论空洞卷积,一个显式调整过滤器视野,同时控制特征相应分辨率的强大工具。为了解决多尺度目标的分割问题,我们串行/并行设计了能够捕捉多尺度上下文的模块,模块中采用不同的空洞率。此外,我们增强了先前提出的空洞空间金字塔池化模块,增加了图像级特征来编码全局上下文,使得模块可以在多尺度下探测卷积特征。提出的 “DeepLab v3” 系统在没有 CRF 作为后处理的情况下显著提升了性能。
DeepLab v3结构:
DeepLab v3 使用 ResNet 作为主干网络。
DeepLab v3关键特点:
- 在残差块中使用多网格方法(MultiGrid),从而引入不同的空洞率。
- 在空洞空间金字塔池化模块中加入图像级(Image-level)特征,并且使用 BatchNormalization 技巧。
v3中没有使用crf
☆提取不同尺度特征的方式:
- 1)图像金字塔
- 2)Encode—Decode结构
- 3)空洞卷积(采用不同比例)
- 4)空间金字塔(SPP)
七、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 挑战赛的获胜者。
Mask R-CNN 架构相当简单,它是流行的 Faster R-CNN 架构的扩展,在其基础上进行必要的修改,以执行语义分割。
关键特点:
- 在Faster R-CNN 上添加辅助分支以执行语义分割
- 对每个实例进行的 RoIPool 操作已经被修改为 RoIAlign ,它避免了特征提取的空间量化,因为在最高分辨率中保持空间特征不变对于语义分割很重要。
- Mask R-CNN 与 Feature Pyramid Networks(类似于PSPNet,它对特征使用了金字塔池化)相结合,在 MS COCO 数据集上取得了最优结果。
八、PSPNet
CVPR 2017 | PSPNet: Pyramid Scene Parsing Network | Arxiv |
在本文中,我们利用基于不同区域的上下文信息集合,通过我们的金字塔池化模块,使用提出的金字塔场景解析网络(PSPNet)来发挥全局上下文信息的能力。我们的全局先验表征在场景解析任务中产生了良好的质量结果,而 PSPNet 为像素级的预测提供了一个更好的框架,该方法在不同的数据集上达到了最优性能。它首次在2016 ImageNet 场景解析挑战赛,PASCAL VOC 2012 基准和 Cityscapes 基准中出现。
PSPNet网络结构
PSPNet关键特点:
- PSPNet 通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的
1/4
),直到它到达空间池化模块。 - 辅助损失:在 ResNet 的中间层中引入辅助损失,以优化整体学习。
- 空间金字塔池化:在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文。
图14:图片展示了全局空间上下文对语义分割的重要性。它显示了层之间感受野和大小的关系。在这个例子中,更大、更加可判别的感受野( 蓝)相比于前一层( 橙)可能在细化表征中更加重要,这有助于解决歧义。
九、RefineNet
CVPR 2017 | RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation | Arxiv |
在这里,我们提出了 RefineNet,一个通用的多路径优化网络,它明确利用了整个下采样过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早期卷积中的细粒度特征来直接细化捕捉高级语义特征的更深的网络层。RefineNet 的各个组件使用遵循恒等映射思想的残差连接,这允许网络进行有效的端到端训练。
RefineNet网络结构
图15:(上)RefineNet 架构(下)建立 RefineNet 的块 - 残差卷积单元,多分辨率融合和链式残差池化
RefineNet 解决了传统卷积网络中空间分辨率减少的问题,与 PSPNet(使用计算成本高的空洞卷积)使用的方法非常不同。提出的架构迭代地池化特征,利用特殊的 RefineNet 模块增加不同的分辨率,并最终生成高分辨率的分割图。
RefineNet关键特点:
- 使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一个阶段。
- 链式残差池化:引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征。
- 所有的特征融合都是使用
sum
(ResNet 方式)来进行端到端训练。 - 使用普通ResNet的残差层,没有计算成本高的空洞卷积。
分割数据集
数据集 | 训练数量 | 测试数量 | 类别数量 |
---|---|---|---|
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 |
分割结果图展示:
以上是关于语义分割一文概览主要语义分割网络,FCNUNetSegNetDeepLab的主要内容,如果未能解决你的问题,请参考以下文章