深度学习系列(五):语义分割

基础概念

语义分割、实例分割、全景分割

  • 语义分割:只区分类别,不区分个体。简单来说语义分割可以把一幅图像中的人全抠出来,但是对于这些人中的每一个单独的个体并不能够区分出来。
  • 实例分割:只关注前景(可以计数的物体)的分割,并且对物体加以区分。
  • 全景分割:区分前景和背景,前景进行示例分割,背景(比如道路、天空)进行语义分割。
三者之间的区别

主要性能指标

  • Dice coefficient:集合相似度度量系数
  • mIou:平均交并比

上采样和下采样

  • 上采样:又名放大图像、图像插值。主要目的是放大原图像,从而可以显示在更高分辨率的设备上。 常用方法有双线性插值,反卷积,反池化等。
  • 下采样:又名降采样,缩小图像。主要目的一是使图像符合显示区域的大小,二是生成对应图像的缩略图(其实就是池化)。

论文浏览

主要看的实时语义分割,快就是好

ENet

16年的文献,在当时做的还是很好,论文上说速度比之前的算法快了18倍,算力和参数量需求都减少了70多倍,效果和之前的算法差不多。

总结:在普通语义分割模型的的基础上使用了分解卷积、空洞卷积、轻量化decoder、减小下采样次数等操作提升速度,但是减少下采样对大物体识别分割造成影响,降低精度。

一些Trick:

  • 减少下采样和上采样过程的分割精度丢失: 解决下采样中边缘信息丢失问题的主流方法有2种,一是FCN中的添加编码层的feature map,二是Segnet中通过保留编码网络中最大池化过程中最大值的索引,并借此在解码网络中生成稀疏的上采样feature map。ENet采用了SegNet中的方式来降低下采样和上采样过程的分割精度丢失。

  • 非对称的Encoder-Decoder结构,降低参数量: ENet网络结构是非对称的,包含一个较大的编码层和一个小的解码网络。原因是编码层应该像原始分类网络的结构相似。用于处理较小的数据,同时进行信息的处理与滤波,解码网络对编码网络的输出进行上采样用于对细节的微调。

  • 激活函数使用PReLU,而非ReLU: 作者实验发现去掉网络初始层中的大部分ReLU层会提升分割的效果,原因是此网络的深度不够深。然后,该文将所有ReLU替换为PReLUs,针对每张feature map增加了一个额外的参数。得到了精度的提升。

  • 分解卷积核: Inception Net 的套路,一个二维的卷积可以被分解为两个维度为1的卷积核。论文使用5x1,1x5的非对称卷积,减弱了函数学习的过拟合同时增加了感受野。卷积核的分解带来的另一个好处是可以减少大量的参数。同时加上更多的非线性处理,使计算功能更加丰富。

  • 使用空洞卷积: 论文将bottleneck中的卷积层替换为空洞卷积并进行串联,增大了感受野,提高了分割的IOU。

  • 正则化: 由于分割数据集有限,因此网络的训练很容易达到过拟合。该文使用空间Dropout进行处理。

  • 信息保留的维度变化: 前半部分进行下采样是有必要的,但剧烈的维度衰减不利于信息的流动。为解决这个问题,该文在池化层后接一个卷积层增加了维度,进而增加了计算资源。为此,该文将池化操作与卷积操作进行并行操作,然后进行拼接。同时,在原始的ResNet的结构中,进行下采样时,第一个1x1的映射,在所有维度上进行的是步长为2的卷积,丢弃了75%左右的输入信息。将卷积核增加至2x2利于信息的保留。