实时语义分割ICNET

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完整三个分支的输出

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注