作 者: 心有宝宝人自圆
声 明: 欢迎转载本文中的图片或文字,请说明出处
写在前面
自从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需要如下的步骤:
计算整个训练集中各个类别出现的频率:
选出集合中的中位数
为每个类别的loss分配权重
这意味着训练集中数量较大的类的权值小于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最高,表明存储空间和准确率之间存在着权衡。
作者总结了如下要点:
- 更高的性能不压缩feature map,记录Encoder各层feature maps
- 更小的存储空间压缩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.
转载请说明出处。