论文原文 ¶
https://arxiv.org/pdf/1704.08545.pdf 香港中文大学,腾讯优图,商汤科技联合发表的一篇用于语义分割的论文。
摘要 ¶
ICNet 是一个基于 PSPNet 的实时语义分割网络,设计目的是减少 PSPNet 推断时期的耗时,论文对 PSPNet 做了深入分析,在 PSPNet 的基础上引入级联特征融合模块,实现快速且高质量的分割模型。论文报告了在 Cityscape 上的表现。
摘要 ¶
主要通过下面的图来表现:
可以看到之前的许多分割的经典方法速度不快,而速度快的 ENet 的精度又不高,PSPNet 在速度和精度找到了一个平衡点。论文的主要贡献在于:
- 综合低分辨率的处理速度和高分辨率图像的推断质量,提出图像级联框架逐步细化分割预测
- ICNet 可以在 1024× 2048 分辨率下保持 30fps 运行
相关工作 ¶
高质量的语义分割模型 ¶
先驱工作 FCN 将全连接层换成卷积层;DeepLab 等使用空洞卷积 (dilated convolution);Encoder-Decoder 结构融合高层的语义和底层的细节;也有使用 CRG,MRF 模拟空间关系;PSPNet 采用空间上的金字塔池化结构。这些方法对于提升性能有效,但不能用于实时系统。
快速的语义分割模型 ¶
SegNet 放弃层信息来提速;ENet 是一个轻量级网络,这些方法虽然快,但是性能差。
视频分割模型 ¶
视频中包含大量冗余信息,可利用减少计算量。
PSPNet 给出了一个快读的语义分割的层次结构,利用级联图像作为输入加速推理,构建一个实时分割系统。
时间分析 ¶
蓝色的分辨率为 1024 × 2048,绿色的分辨率为 512 × 512。上图显示了多个信息:
- 不同分辨率下的速度差异很大,呈平方趋势增加
- 网络的宽度越大速度越慢
- 核数量越多速度越慢
加速策略 ¶
输入降采样 ¶
根据上面的分析,半分辨率的推断时间为全分辨率的 ¼。测试不同分辨率下输入下的预测情况。一个简单的测试方法使用 ½,¼ 的输入,将输出上采样回原来的大小。实验如下:
对比在不同缩放比例下得到的结果可以发现,在缩放比例为 0.25 的情况下,虽然推断时间大大减短,但是预测结果非常粗糙,丢失了很多小但是重要的细节。缩放 0.5 相对来说好了很多,但丢失了很多细节,并且最麻烦的是推理速度达不到实时要求了。
特征降采样 ¶
输入能降采样,自然特征也可以降采样。这里以 1:8,1:16,1:32 的比例测试 PSPNet50,结果如下:
较小的特征图可以以牺牲准确度换取更快的推断,但考虑到使用 1:32(132ms)依然达不到实时要求。
模型压缩 ¶
减少网络的复杂度,有一个直接的方法就是修正每层的核数量,论文测试了一些有效的模型压缩策略。即使只保留四分之一的核,推断时间还是很长。并且准确率大大降低了。
ICNet 的结构 ¶
ICNet 在总结了上面的加速策略后,提出了一个综合性的方法:使用低分辨率加速捕捉语义,使用高分辨率获取细节,使用级联网络结合,在限制的时间内获得有效的结果。模型结构如下:
图片分为 1,½,¼ 这 3 个尺度分三路送到模型中。3 个分支介绍如下:
- 对于第一个 ¼ 分支,可以看到经过 3 次卷积 (下采样) 后分辨率为原图的 1/32,经过卷积后使用几个空洞卷积层扩展感受野但不缩小尺寸,最终以原图的 1/32 大小输出 feture map。这一个分支虽然层数较多,但分辨率小,速度快,且与第二个分子共享一部分权重。
- 以原图的 ½ 分辨率作为输入,经过卷积后以 ⅛ 缩放,得到原图 1/16 大小的 feature map,再将低分辨率分支的输出 feature map 通过 CFF 单元融合得到最终输出。这一和分子有 17 个卷积层,与第一个分支共享一部分权重,与分支 1 一共耗时 6ms。
- 第 3 个分支以原图作为输入,经过卷积后以 ⅛ 缩放,得到原图大小 ⅛ 的特征图,再将中分辨率处理后的输出通过 CFF 单元融合,第 3 层有 3 个卷积层,虽然分辨率高,但层少,耗时 9ms。 对于每个分支的输出特征,首先会上采样二倍做输出,在训练的时候,会以 ground truth 的 1/16,⅛,¼ 来指导各个分支的训练,这样的辅助训练使得梯度优化更加平滑,便于训练收敛,随着每个分支学习能力的增强,预测没有被任何一个分支主导。利用这样渐变的特征融合和级联引导结构可以产生合理的预测结果。ICNet 使用低分辨率完成语义分割,使用高分辨率帮助细化结果,在结构上,产生的 feature 大大减少,同时仍然保持必要的细节。
CFF 单元 ¶
F1 代表低分辨率输入,F2 代表高分辨率输入。将低分辨率的图片上采样后使用空洞卷积 (dilated conv),扩大上采样结果的感受野范围。注意将辅助的标签引导设置为 0.4(根据 PSPNet 的实验结果),即如果下分支的lossL3 的占比λ3 为 1 的话,则中分支的lossL2 的占比λ2 为 0.4,上分支的lossL1 的占比λ1 为 0.16。
损失函数和模型压缩 ¶
损失函数 ¶
依据不同的分支定义如下:L=λ1L1+λ2L2+λ3L3,根据 CCF 的设置,下分支的lossL3 的占比λ3 为 1 的话,则中分支的lossL2 的占比λ2 为 0.4,上分支的lossL1 的占比λ1 为 0.16。
压缩模型 ¶
这里不是很懂,论文采用的一个简单而有效的办法:渐进式压缩。例如以压缩率 ½ 为例,我们可以先压缩到 ¾,对压缩后的模型进行微调,完成后,再压缩到 ½,再微调。保证压缩稳定进行。这里采用 Pruning filters for efficient convnets(可以查一下这篇论文) 的方法,对于每个滤波器计算核权重的 L1 和,降序排序,删除权重值较小的。
模型压缩的结果 ¶
mIoU 降低了,但推理时间 170ms 达不到实时要求。这表明只是模型压缩是达不到有良好分割结果的实时性能。对比 ICNet,有类似的分割结果,但速度提升了 5 倍多。
级联结构的有效性 ¶
sub4 代表只有低分辨率输入的结果,sub24 代表前两个分支,sub124 全部分支。注意到全部分支的速度很快,并且性能接近 PSPNet 了,且能保持 30fps。而且内存消耗也明显减少了。
结论 ¶
论文在 PSPNet 的基础上改进出一个 ICNet。 核心的思想是利用低分辨率的快速获取语义信息,高分辨率的细节信息。将两者相融合搞出一个折中的模型。
代码实现 ¶
https://github.com/BBuf/Keras-Semantic-Segmentation
本文总阅读量296次