Decoders Matter for Semantic Segmentation:Data-Dependent Decoding Enables Flexible Feature Aggregation
动机
语义分割领域最常用的编解码方案中, 上采样是一个重要的环节, 用来恢复分辨率. 常用的是, 双线性插值和卷积的配合. 相较于具有一定的棋盘效应的转置卷积, 双线性插值简单快捷, 而且配合后续卷积, 也可以实现和转置卷积类似的效果, 而其他的方法, 如外围补零, 则是会引入过多的冗余无用信息(个人理解, 这个操作在UNet中使用了).
还有一种方案是扩张卷积为主的方案, 早期的deeplab设计中使用的. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs.
常见的上采样方式: https://github.com/lartpang/Machine-Deep-Learning/issues/25#issuecomment-448911117
以当前最优秀的语义分割网络deeplabv3+的结构为例(结合扩张卷积与编解码结构的方案). 可以看见, 为了恢复经过下采样之后特征图, 使用了很多的双线性插值.
为了进一步提升当前研究的效果水平, 人们的研究一般是两个方向, 一个是创新, 一个是改进, 当然后者居多. 当前的进步更多是使用了第二个思路, 但是"改进"的思路却也是最让后来的研究者人找到方向的, 也是一般研究者更愿意做的事情. 这篇文章, 就做的是改进的工作.
他们把目光放在了这个最常见的上采样过程上. 文章重点考虑了双线性插值所带来的问题: 过简单的双线性上采样的一个缺点是, 其在准确恢复像素预测方面的能力有限. 双线性上采样不考虑每个像素的预测之间的相关性,因为它是数据独立的.
因此,卷积解码器被需要来产生相对较高分辨率的特征图, 以便获得良好的最终预测. 但是这个需要也会导致两个问题:
- 编码的整体步长必须通过使用多个扩张卷积来进行非常大的降低. 代价是更高的计算复杂性和内存占用,阻碍了大量数据的训练过程和实时应用的部署. 例如deeplabv3+就很慢. (扩张卷积的主要缺点是计算复杂度和更大的内存需求, 因为这些卷积核的大小以及结果的特征映射变得更大.)
- 解码器需要融合来自更低层级的特征. 由于双线性上采样能力的不足, 导致最终预测的精细程度, 主要由更低层级的特征的分辨率占据主导地位. 结果, 为了产生高分辨率预测, 解码器必须将高分辨率特征置于低级层次上, 这样的约束限制缩小了特征聚合的设计空间, 因此可能导致次优的特征组合在解码器中被聚合.
实验表明,在不考虑特征映射分辨率约束的情况下,可以设计出更好的特征聚合策略。
虽然当前很多工作已经花费了很多精力来设计更好的解码器, 但到目前为止, 它们几乎都不能绕过对融合特征的分辨率的限制以及很难更好地进行特征聚合.
贡献
为了处理这些问题, 文章提出了一个可学习的"上采样"模块: DUpsamling. 来替换被广泛使用的双线性插值上采样方法, 恢复特征图的分辨率. 来利用分割标签空间的冗余, 以及准确的恢复像素级预测. 减少了对卷积解码器的精确响应的需要. 因此, 编码器不再需要过度减少其整体步幅, 从而大大减少整个分割框架的计算时间和内存占用.
同时, 由于 DUpsampling 的有效性, 它允许解码器在合并之前将融合的特征降采样到特征映射的最低分辨率. 这种下行采样不仅减少了解码器的计算量, 更重要的是它将融合特征的分辨率和最终预测的分辨率解耦. 这种解耦使解码器能够利用任意特征聚合, 从而可以利用更好的特征聚合, 从而尽可能提高分割性能.
最后, DUpsampling可以通过标准的 1x1 卷积无缝地合并到网络中, 因此不需要ad-hoc编码. (也就是不需要专门为了使用它而设计网络)
Ad-Hoc,wiki的定义是: 是拉丁文常用短语中的一个短语. 意思是“特设的、特定目的的、即席的、临时的、将就的、专案的”. 通常用来形容一些特殊的、不能用于其它方面的的,为一个特定的问题、任务而专门设定的解决方案。
https://zhuanlan.zhihu.com/p/24268597
总体而言, 贡献为提出了一种新的解码器方案:
- 提出了一种简单而有效的数据依赖上采样 (DUpsampling) 方法, 从卷积解码器的粗略输出中恢复像素级分割预测, 替换以前方法中广泛使用的效果较差的双线性.
- 利用提出的 DUpsampling, 可以避免**过度减少编码器的整体步幅, **显著减少了语义分割方法的计算时间和内存占用 3 倍左右.
- DUpsampling 还允许解码器将融合的特征在融合它们之前, 降采样到特征图的最低分辨率.下采样不仅减少了解码器的计算量, 大大扩大了特征聚合的设计空间, 使得解码器能够利用更好的特征聚合.
重建误差
一个重要的观察是, 图片的语义分割标签Y并不是独立同分布的(i.i.d, 也就是互相有依赖), 其中包含着结构信息, 以至于Y可以被压缩而不会造成太大的损失. 因此, 这里不像之前的文章上采样编码器卷积输出F到标签真值F大小, 文章中选择压缩标签真值Y(HxWxC, 已经经过one-hot编码处理, 一个像素只有一个通道对应的类别位置标记为1)到Ywide, 其size和F(Hwide x Wwide x Cwide)一致. 为了更好的进行这个转换, 保证转换中损失更少的信息, 这里设定一个重建误差. 压缩的方法是:
- 对于原始的F(HxWxC)使用大小为rxr的滑窗处理(这有些类似于pooling操作, 可能还会需要padding操作), 提取数据, 获得一个个的(rxrxC)大小的数据块.
- 之后各自reshape为大小为1xN(N=rxrxC)的张量
- 再进行纬度的压缩, 从1xN变为1xCwide, 可以认为是一个1x1的卷积操作. 所有的H/r x W/r 个数据块对应的张量组合得到最终的压缩数据Ywide.
感觉可以直接使用kernel_size=stride的卷积操作来实现. 不知道有没有差异.
关于这个重建误差(重建误差也就是要保证变换之后在进行一次反变换后, 与原始信息的差异程度)的计算, 文中给出计算方法:
对于压缩后的数据(1xCwide的那个张量)的反变换(正变换矩阵与反变换矩阵(又称为重建矩阵))后的结果(1xN大小张量)与原始数据(1xN大小的那个张量)使用平方误差累和进行误差计算. 优化目标函数:
这个优化问题, 可以利用迭代的标准SGD算法优化. 同时, 这里提到, 使用正交约束, 可以简单的使用PCA来得到这个目标的闭式解.(确实这里很像PCA降维)
损失函数
在网络训练的时候, 要计算损失, 这里考虑了两种计算方法, 后者更为直接:
- 使用压缩后的Ywide作为真值来监督生成的F, 使用L2损失计算.
- 使用未压缩的Y来作为真值来监督恢复分辨率的(softmax(DUpsample(F)))的特征图.
数据依赖上采样
对于前面的方法2, 使用了 DUpsample(数据依赖上采样)替换了原始的双线性上采样.
这里提出的方法相同于在空间维度上应用1x1卷积(可以使用空间上的1x1卷积实现), 卷积核存储在W里, 也就是前面优化目标函数中的反变换矩阵.
所以这里实际上就没有用到前面那些, 直接就是使用了提出的这个DUpsample操作, 计算最后的损失即可, 前面的公式都没用.没有体会到作者的意思, 这里的上采样滤波器是前面计算好的.
所以说, 主要用到的公式是这里的第二个损失和前面的目标函数.
除了上面提出的线性上采样, 文章还使用非线性自编码器进行了上采样实验. 对自编码器的训练也是为了最大限度地减少重建损失, 并且比线性情况下更通用. 经验上观察到最终的**语义预测精度几乎与使用更简单的线性重建手段是相同的. 因此文章主要关注与线性重建方法.
这里提出的上采样操作有点类似于超分辨率重建任务中的亚像素卷积的操作. 最简单的线性形式的 DUpsample 可以被视为一个使用了预计算上采样滤波器的改进 Depth-to-Space 或 Sub-pixel.
- Depth-to-Space和Sub-pixel通常为了避免产生太多的可训练参数导致优化困难, 会使用适度的上采样比例(例如4)来提升输入分辨率.
- 相反, 文中方法中的上采样滤波器是预先计算的. 如果需要, 上采样的比例可以非常大(例如16 或 32).
亚像素卷积层, 图片来自: https://blog.csdn.net/antkillerfarm/article/details/79956241
自适应温度Softmax
虽然可以通过1x1卷积操作实现DUpsampling, 但直接将其合并到框架中会遇到优化困难, 文章认为, 因为W是利用one-hot编码后的Y来计算的, 原始softmax和提出的DUpsample的计算, 很难产生较为锐利的激活.结果导致交叉熵损失在训练中被卡住, 使得训练过程收敛很慢.
为了解决这个问题, 这里使用了Hinton著名论文 Distilling the knowledge in a neural network 里提到的"温度"的概念. 对softmax添加了一个"温度"T的参数, 来锐利/软化softmax的激活.这个参数T可以再反向传播中自动学习, 无需调整.
灵活的集成策略
对比以往的结构使用的集成策略:
这里的F是最终的双线性上采样/DUpsample之前的卷积输出(此时通过这些上采样可以得到最终像素级预测)
先对生成的特征图进行上采样, 再结合较低层级的高分辨率特征信息. 这样的设计主要有两个问题:
- f(CNN计算)在上采样之后计算, 由于f的计算量依赖于输入的空间大小, 这样的安排会导致解码器计算上的抵效, 此外,计算开销阻碍了解码器利用低层级的特征.
- 融合的低级特征的分辨率与F的分辨率相等, 由于无法使用双线性产生最终像素预测, 因此通常约为最终预测的1/4分辨率. 为了获得高分辨率预测, 解码器只能选择具有高分辨率低级特征的特征聚合。
相反, 在提出的框架中, 恢复全分辨率预测的责任在很大程度上已经转移到DUpsampling.因此, 可以安全地下采样要使用的任何级别的低层特征到最后一个特征图Flast的分辨率(特征图的最低分辨率), 然后融合这些特性以产生最终的预测. 表示为:
文章中使用双线性下采样.
这种重排不仅使特征始终以最低分辨率高效计算,而且还使底层特征 Fi 和最终分割预测的分辨率分离, 允许任何级别的功能进行融合.
在实验中展示了灵活的特征融合使机制能够利用更好的特征融合, 以尽可能提高分割性能.
只有在与上述 DUpsampling 合作时, 下采样低级特征的方案才能工作. 否则, 性能是由解码器的incapable上采样方法的上界所限定的. 这就是为什么以前的方法需要上采样 低分辨率的高级特征图 到融合的低层特征映射的空间大小.
之前的上采样后解码主要是因为上采样方法会限制住最终的性能, 所以更不能使用下采样低级特征的方案, 会使得性能更加被限制.
效果
In order to understand how the fusion works, we visualize the segmentation results with and without low-level features in Fig. 4. Intuitively, the one fusing low-level features yields more consistent segmentation, which suggests the downsampled low-level features are still able to refine the segmentation prediction substantially.
总结
提出了一种灵活、轻便的语义图像分割方案. 这种新型解码器采用提出的数据依赖上采样产生像素预测.
- 这消除了从底层 CNNs 计算效率低下的高分辨率特征图的需要, 并将融合的低级特征和最终预测的分辨率分离.
- 这种解耦扩展了解码器特征聚集的设计空间, 使得几乎任意的特征聚集被利用来尽可能提高分割性能.
- 同时, 本文提出的解码器避免了将低分辨率高级特征图向上采样回高分辨率低层特征映射的空间大小, 大大降低了解码器的计算量.
实验表明, 与以往语义分割方法中广泛使用的普通解码器相比, 提出的解码器具有有效性和高效性。最后, 与提出的解码器的框架达到了最先进的性能, 同时需要比以前的最先进的方法更少的计算.