ICNet for Real-Time Semantic Segmentation on High-Resolution Images
作者开源代码
特点
上图可以很好的说明ICNET的特点,它是第一个出现在上图右上角的方法,同时兼顾分割效果和处理速度。准确率超过70%,对于1024×2048的高分辨率输入,速度达到30FPS,虽然硬件条件也不低。
框架
论文分析了语义分割各个模块的对速度影响,得到提升速度的三个方法
下采样输入图下采样特征图模型压缩
但是单独使用其中任何方法加速都会降低分割效果,本文提出如下框架,成功融合上述三个方法,兼顾分割效果和分割速度
自上而下依次是低分辨率,中分辨率和高分辨率。
低分辨率
输入图是原图1/4,输出的特征图尺寸是原图的1/32。采用的网络结构最为复杂,但因为输入图尺寸不大,速度也不会慢
中分辨率
输入图是原图的1/2,输出特征图尺寸是原图的1/16。因为低分辨率分支已经提取了大部分信息,这一个分支采用比较简单的卷积网络
高分辨率
输入图是原图,输出特征图尺寸是原图的1/8。同样因为只需要关注精细特征,依然采用轻量级的卷积网络,以节省计算量。
CFF模块(cascade feature fusion)负责融合两个相邻分支输出的特征图,从低分辨率到高分辨率逐次融合。
Becuase weights and computation (in 17 layers) can be shared between low- and medium-branches, only 6ms is spent to construct the fusion map
原文中一句话,似乎分支间的一些层可以共享权重,进一步节省计算量,但是文中没看到更多细节,以后搞明白再补充。
Cascade Feature Fusion
CFF模块的输入有三个
低分辨率特征图
Upsample 2x+空洞卷积,速度优于反卷积操作
高分辨率特征图
1×1卷积调整通道数
对应高分辨率特征图的groundtruth(仅训练阶段需要)
文中称为Cascade Label Guidance,对低通道特特征图上采样之后,和groundtruth比较,计算loss
CFF模块的输出是和高分辨特征图尺寸一样的新特征图
Cascade Label Guidance
框架中包括2个CFF模块,对应两个loss,高分辨率解码端1/4尺寸处也会输出一个loss。这三个loss描述的量是一样的,只是对应的尺寸不同,三者的加权平均就是训练阶段使用的目标loss
实验 硬件环境 * Maxwell TitanX GPU cards * CUDA 7.5 CUDNNv5 三种单独的加速方法
本文作者同样是PSPNet的作者,以下实验主要是基于PSPNet进行的。
下采样输入图
随着输入图缩小,一些细小目标从分割结果中消失
下采样特征图
虽然分割效果比下采样输入图要好,但是速度提升不大
(译注:没太明白这种加速方法,如果是指输入原图,输出1/32尺寸的分割图,节省了更高尺寸的反卷积的计算量,感觉这种方法性价比还不错)
模型压缩
计算每层kernel filter的L1范数,保留范数比较大的kernel filter,表格中第一行表示保留的比例
对比ICNET三个分支
sub4是只是用ICNET低分辨率分支,sub24是融合中低分辨率的输出,sub124就是ICNET完整三个分支的输出
CFF的效果
第四行是ICNET的用法, 前三行和第四行比较,说明反卷积操作性价比低于 upsampling+dilated convolution。
最后一行和第四行比较,说明Cascade Label Guidance可以提升一个0.9%
和其他方法的对比
分支之间的视觉上对比
sub4是只是用ICNET低分辨率分支,sub24是融合中低分辨率的输出,sub124就是ICNET完整三个分支的输出