基础概念
语义分割、实例分割、全景分割
- 语义分割:只区分类别,不区分个体。简单来说语义分割可以把一幅图像中的人全抠出来,但是对于这些人中的每一个单独的个体并不能够区分出来。
- 实例分割:只关注前景(可以计数的物体)的分割,并且对物体加以区分。
- 全景分割:区分前景和背景,前景进行示例分割,背景(比如道路、天空)进行语义分割。
主要性能指标
- 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利于信息的保留。