语义分割分割常用网络
语义分割
图像的语义分割是将输入图像中的每个像素分配一个语义类别,以得到像素化的密集分类。
- 一般的语义分割架构可以被认为是一个编码器-解码器网络。编码器通常是一个预训练的分类网络,像 VGG、ResNet,然后是一个解码器网络。这些架构不同的地方主要在于解码器网络。解码器的任务是将编码器学习到的可判别特征(较低分辨率)从语义上投影到像素空间(较高分辨率),以获得密集分类。
- 不同于分类任务中网络的最终结果(对图像分类的概率)是唯一重要的事,语义分割不仅需要在像素级有判别能力,还需要有能将编码器在不同阶段学到的可判别特征投影到像素空间的机制。不同的架构采用不同的机制(跳跃连接、金字塔池化等)作为解码机制的一部分。
Fully Convolution Networks (FCNs) 全卷积网络
2015 Fully Convolutional Networks for Semantic Segmentation
在传统的分类 CNN 中,池化操作用来增加视野,同时减少特征图的分辨率。这对于分类任务来说非常有用,因为分类的最终目标是找到某个特定类的存在,而对象的空间位置无关紧要。因此,在每个卷积块之后引入池化操作,以使后续块能够从已池化的特征中提取更多抽象、突出类的特征。
但是池化和带步长的卷积对语义分割是不利的,因为这些操作造成了空间信息的丢失。语义分割的大多数架构在解码器中使用了不同的机制,目的都在于恢复在编码器中降低分辨率时丢失的信息。如下图所示,FCN-8s 融合了不同粗糙度(conv3、conv4和fc7)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。
第一个卷积层捕捉低层次的几何信息,因为这完全依赖数据集,可以注意到梯度调整了第一层的权重以使模型适应数据集。VGG 中更深层的卷积层有非常小的梯度流,因为这里捕获的高层次的语义概念足够用于分割。
将当前分类网络(AlexNet, VGG net 和 GoogLeNet)修改为全卷积网络,通过对分割任务进行微调,将它们学习的表征转移到网络中。然后定义一种新的架构,它将深的、粗糙的网络层的语义信息和浅的、精细的网络层的表层信息结合起来,来生成精确和详细的分割。
特点
- 特征是由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同。
- 低分辨率语义特征图的上采样使用经双线性插值滤波器初始化的反卷积操作完成。
- 从 VGG16、Alexnet 等分类器网络进行知识迁移来实现语义细分。
将全连接层转换成卷积层,使得分类网络可以输出一个类的热图。
如上图所示,像 VGG16 分类网络的全连接层(fc6,fc7)被转换为全卷积层。它生成了一个低分辨率的类的热图,然后使用经双线性插值初始化的反卷积,并在上采样的每一个阶段通过融合(简单地相加) VGG16 中的低层(conv4和conv3)的更加粗糙但是分辨率更高的特征图进一步细化特征。
语义分割架构的另一个重要方面是,对特征图使用反卷积,将低分辨率分割图上采样至输入图像分辨率,或者花费大量计算成本,使用空洞卷积在编码器上部分避免分辨率下降。即使在现代 GPUs 上,空洞卷积的计算成本也很高
SegNet
2015 SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。
特点
- SegNet 在解码器中使用反池化对特征图进行上采样,并在分割中保持高频细节的完整性。
- 编码器不使用全连接层(和 FCN 一样进行卷积),因此是拥有较少参数的轻量级网络。
如下图所示,编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息。
U-Net
2015 U-Net: Convolutional Networks for Biomedical Image Segmentation
U-Net 架构包括一个捕获上下文信息的收缩路径和一个拼接的对称扩展路径。
特点
- U-Net 简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。
- 通过跳跃拼接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征。
- 上采样采用转置卷积。
- 推断速度快。
PSPNet
2017 PSPNet: Pyramid Scene Parsing Network
利用基于不同区域的信息集合,通过金字塔池化模块,使用金字塔场景解析网络(PSPNet)来发挥解析上下文信息的能力。
特点
- PSPNet 通过引入空洞卷积来修改基础的ResNet架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的1/4),直到到达空间池化模块。
- 在 ResNet 的中间层中引入辅助损失,以优化整体学习。
- 在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局信息。
DeepLab v1
2015 Semantic Image Segmentation with deep convolutional nets and fully connected CRFs
DCNN 最后一层的响应不足以精确定位目标边界,Deeplab通过在最后一层网络后结合全连接条件随机场(CRF)来解决该定位问题。 FCN + denseCRF.
特点:
- 提出空洞卷积(atrous convolution)(又称扩张卷积(dilated convolution))
- 在最后两个最大池化操作中不降低特征图的分辨率,并在倒数第二个最大池化之后的卷积中使用空洞卷积。
- 使用 CRF(条件随机场) 作为后处理,恢复边界细节,达到准确定位效果。
- 附加输入图像和前四个最大池化层的每个输出到一个两层卷积,然后拼接到主网络的最后一层,达到多尺度预测效果。
DeepLab v2
论文中提出了语义分割中的三个挑战:
- 由于池化和卷积而减少的特征分辨率。
- 多尺度目标的存在。
- 由于 DCNN 不变性而减少的定位准确率。
对应解决方法:
- 减少特征图下采样的次数,但是会增加计算量。
- 使用图像金字塔、空间金字塔等多尺度方法获取多尺度上下文信息。
- 使用跳跃连接或者引入条件随机场。
特点
- 提出了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling),在不同的分支采用不同的空洞率以获得多尺度图像表征。
- ASPP的作用:由于同一类的物体在图像中可能有不同的比例,ASPP 有助于考虑不同的物体比例,这可以提高准确性。
deeplabv1的升级版,加入了ASPP,其他的和v1类似。
DeepLab v3
2017 Rethinking Atrous Convolution for Semantic Image Segmentation
DeepLab v3 使用 ResNet 作为主干网络。
特点:
- 为了解决多尺度目标的分割问题,在残差块中使用了多尺度网格方法(MultiGrid),从而引入不同的空洞率。
- 在空洞空间金字塔池化模块中加入图像级(Image-level)特征,并且使用了BatchNormalization 技巧。