SegNet论文阅读

作 者: 心有宝宝人自圆

声 明: 欢迎转载本文中的图片或文字,请说明出处

写在前面

自从FCN提出以来,越来越多的语义分割任务开始采用采用全卷积网络结构,随着FCN结构使用的增加,研究人员发先了其结构天生的缺陷极大的限制了分割的准确度:CNNs在high-level (large scale) tasks中取得了十分优异的成绩,这得益于局部空间不变性(主要是池化层增大了感受野,也丢弃了部分细节信息)使得网络能够学习到层次化的抽象信息,但这却恰恰不利于low-level (small scale) tasks

许多研究对FCN的网络架构进行优化:其中一类的目的是减少细节信息的丢失,因此优化大都是针对Encoder进行的;还有另外一类研究目的是减少将Encoder输出结果映射(上采样)到原始输入空间的损失,减少FCN中简单的双线性插值造成的信息损失,因此设计了可end-to-end训练的Decoder。FCN中的双线性插值可以使用可训练的卷积层进行替代,但为了弥补下采样带来的损失,会将Decoder中某层上采样的结果与Encoder在同层的结果相加,这又样带来了额外的存储空间消耗。

SegNet的目标就是设计一种快速、存储空间较小的适应用于实时应用的深度网络模型。

SegNet的创新点在于:使用记录maxpool层最大响应特征位置的tensor(pooling indices)来进行上采样,避免了FCN中学习上采样带来的消耗,而后再使用可训练的卷积层使稀疏的feature map密集,这将避面上面描述保存feature map产生的额外空间消耗。

1. Introduction


DCNNs在high-level vision tasks(如图像分类、目标检测等)取得优异得表现,这些工作都有共同的主题:end-to-end训练的方法比人工的特征工程方法更优。这得益于CNNs内在的局部空间不变性,然而对应low-level vision tasks(语义分割)来说,我们需要准确的位置信息而非空间信息抽象后的层次化信息。

DCNNs应用于low-level vision tasks主要难点是:

  • 信号的下采样使细节信息丢失
  • 网络对多尺度目标的泛化能力较差
  • 空间的局部不变性导致位置信息不再准确

其中最主要的是下采样问题,它是池化层和stride的联合影响造成,是准确性和速度、空间消耗的权衡(即过大的卷积核运算极度耗时、参数过大)。其目的是为了使较小的卷积核能够去学习空间中有用的信息(因此需要增大感受野),但这种下采样必然造成信息的损失。网络对于小目标的性能较差、局部不变性同样是由于池化层丢失了部分边界信息带来的问题,也就是说最大的问题集中在了池化层的处理。即使DeepLabv2使用了带洞的卷积来显式地控制感受野的大小,但网络训练的难度决定了网络模型中仍必须有下池化层的存在,所以需要将低分辨率的特征图映射(上采样)到高分辨率的输入空间,同时映射必须能准确地进行边界定位的手段。

作者同样关注了在推理期间的内存和计算时间方面的效率。SegNet由Encoder和Decoder组成,其中Encoder与Vgg-16一致,但完全去除了全连接层(也没有将其变化为全卷积层,而是直接将应传入fc6的feature map直接传入Decoder),这样既减少了训练时间和存储空间(最多的参数就在全连接层中,约占整个网络90%的参数)也减少了信息的丢失(更多的特征)。SegNet最核心的部分就是Decoder的设计,Encoder中的每一层与Decoder中一一对应,其每层的设计与DeconvNet(Zeiler,2013)类似。为了保证边界信息不丢失,Encoder需要在下采样之前保存各层feature map,但这会受到内存的限制,因此更为高效的做法是使用max-pooling indices存储各层下采样过程中各池化窗口最大特征值的位置,保存最重要的特征信息。作者的试验结果表明与使用完整的feature map相比,max-pooling indices仅造成了较小的准确率下降。总之,使用max-pooling indices:

  • 保留了部分重要的边界信息,改善了网络模型对于边界的描述
  • 减少了FCN中因上采样而需要训练的参数
  • 能在极小修改的条件下与Encoder-Decoder网络模型相结合

2. ARCHITECTURE


SegNet的结构如Fig. 2所示,其中Encoder由Vgg-16的前13层组成(但个卷积层后都加了一个BN层),去除全连接层可以保留更高分辨率的特征图,并且能够显著地减小网络的参数(from 134M to 14.7M,同时这也是网络难以训练的重要原因)。Decoder通过同层Encoder记录的max-pooling indices进行上采样,再由可训练的卷积层对于稀疏的解码特征图经行密集化处理。

2.1 Decoder Variants

许多用于语义分割的网络都拥有相似的架构,为了对比各种设计之间造成速度、存储、模型性能的差异,作者设计了以下几种变种(原始网络模型的简化版):

  • SegNet-Basic:4个编码器 + 4个解码器,所有kernel_size = 7,Decoder中使用max-pooling indices取代学习一个conv层来进行上采样

  • SegNet-Basic- EncoderAddition:与FCN的解码技术类似,将Decoder解码的结果与同层Encoder的feature map相加传入下一层,增加了内存消耗

  • SegNet-Basic-SingleChannelDecoder:Decoder采用单通道conv层,可以显著减少内存的消耗,但损失了部分信息

  • FCN-Basic:与SegNet-Basic相同的Encoder,使用FCN的解码技术(Fig. 3,将Decoder上采样结果与同层Encoder的feature map相加后传入下一层),此结构中Encoder最后一层的K通道feature map会被一个卷积层压缩成Number of Class通道feature map后传入Decoder

  • FCN-Basic-NoAddition:去除FCN-Basic Decoder中将上采样并将结果与同层Encoder的feature map相加的步骤,显著减少内存的消耗,但损失了部分信息

  • FCN-Basic-NoDimReduction:去除FCN-Basic压缩Encoder输出通道数的conv层,这样会带来更多内存消耗(需要保存Encoder最后的feature map,压缩后空间更小),但减少了信息损失

  • FCN-Basic-NoAddition-NoDimReduction:去除FCN-Basic-NoAddition和FCN-Basic-NoDimReduction对应的部分

2.2 Training

训练过程中比较新颖的地方是使用median frequency balancing,基于真实标记的分布为各类别的损失重新加权,以减弱类别不平衡对模型带来的影响。median frequency balancing需要如下的步骤:

  • 计算整个训练集中各个类别出现的频率:f_c=\frac{训练集中被标记为c的像素数}{训练集中所有图片的总像素数},c=1,...,K

  • 选出集合[f_1,...,f_K]中的中位数f_{median}

  • 为每个类别的loss分配权重w_c=\frac{f_{median}}{f_c},c=1,...,K

这意味着训练集中数量较大的类的权值小于1,数量最小的类的权值最大。默认情况是为每个类别都赋予1作为权重,这被称作natural frequency balancing。

2.3 Analysis

比较不同Decoder变体的性能,选择了如下几种指标:

  • global accuracy (G):数据集中正确分类的像素的百分比
  • class average accuracy (C):所有类别预测准确率的平均值
  • mean intersection over union (mIoU):比类平均准确率更严格,因为它惩罚FP预测;然而mIoU并不是损类别平衡cross-entropy损失函数的优化目标(其优化目标是准确率最大化)
  • boundary F1-measure (BF):涉及计算边界像素的F1指标。给定一个像素容错距离,计算预测值和ground truth类别边界之间的精确度和召回率。作者使用图像对角线的0.75%作为容错距离。与mIoU相比,BF的评判结果更符合人类对语义分割效果的判定


在各网络已训练至均收敛的条件下,各变体的评价结果如Table 1所示。结果表明:

  • (1) Decoder需要训练,使用双线性插值作为Decoder的效果最差。
  • (2) SegNet-Basic和FCN-Basic性能相近,但后者由于保存各层的feature map消耗更多内存。
  • (3) FCN-Basic-NoAddition的性能差于结构最相近的SegNet-Basic,表明Encoder中信息的重要性。
  • (4) 不对Encoder的输出进行压缩,能带来性能的提升,但在保存feature map时会增大内存消耗。
  • (5) 与FCN-Basic-NoAddition和FCN-Basic-NoAddition-NoDimReduction相比,SegNet-Basic-SingleChannelDecoder虽然丢失了部分信息,但仍保留了部分Encoder中的信息,因此性能优于前两者。
  • (6) 在不限制内存和推断时间的条件下,FCN-Basic-NoDimReduction和SegNet-EncoderAddition达到了最优的性能,FCN-Basic-NoDimReduction的BF1最高,表明存储空间和准确率之间存在着权衡。

作者总结了如下要点:

  • 更高的性能\Rightarrow不压缩feature map,记录Encoder各层feature maps
  • 更小的存储空间\Rightarrow压缩feature map,记录max-pooling indices
  • 感受野更大的解码器性能更好

3. BENCHMARKING


作者将完整的SegNet与FCN、DeepLab- LargFOV、DeconvNet进行比较,发现:

  • CRF后处理的改善效果在训练集足够大的条件下不明显。
  • 难以使用median frequency balancing训练较大的网络,但使用median frequency balancing能较明显地提高网络性能。
  • 网络在训练集收敛后,过拟合仍未发生,这表明过拟合在训练大型网络是不是严重的问题。

4. 总结


SegNet更关注内存消耗(尤其注重)与推断时间,尽管对于模型的性能没有较为明显的提升,但使我们了解到减少Encoder中信息损失的重要性和训练Decoder、结合Encoder信息的重要性。此外,其使用median frequency balancing和BF1指标都对于训练与评价都有很好的启发。

因为SegNet不存在特别难以构建的地方(或与之前我写过网络的类似),这里仅进行理解阅读不再进行代码复现。

Reference

[1] Badrinarayanan, Vijay , A. Kendall , and R. Cipolla . "SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation."IEEE Transactions on Pattern Analysis and Machine Intelligence (2017).

[2] Zeiler, Matthew D , and R. Fergus . "Visualizing and Understanding Convolutional Networks." European Conference on Computer Vision Springer International Publishing, 2013.

转载请说明出处。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容