实时语义分割ICNET

ICNet for Real-Time Semantic Segmentation on High-Resolution Images

作者开源代码

特点

实时语义分割ICNET_第1张图片

上图可以很好的说明ICNET的特点,它是第一个出现在上图右上角的方法,同时兼顾分割效果和处理速度。准确率超过70%,对于1024x2048的高分辨率输入,速度达到30FPS,虽然硬件条件也不低。

框架

论文分析了语义分割各个模块的对速度影响,得到提升速度的三个方法

  • 下采样输入图
  • 下采样特征图
  • 模型压缩

但是单独使用其中任何方法加速都会降低分割效果,本文提出如下框架,成功融合上述三个方法,兼顾分割效果和分割速度

实时语义分割ICNET_第2张图片

自上而下依次是低分辨率,中分辨率和高分辨率。

  • 低分辨率
    输入图是原图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

实时语义分割ICNET_第3张图片

CFF模块的输入有三个

  1. 低分辨率特征图
    Upsample 2x+空洞卷积,速度优于反卷积操作

  2. 高分辨率特征图
    1x1卷积调整通道数

  3. 对应高分辨率特征图的groundtruth(仅训练阶段需要)
    文中称为Cascade Label Guidance,对低通道特特征图上采样之后,和groundtruth比较,计算loss

CFF模块的输出是和高分辨特征图尺寸一样的新特征图

Cascade Label Guidance

框架中包括2个CFF模块,对应两个loss,高分辨率解码端1/4尺寸处也会输出一个loss。这三个loss描述的量是一样的,只是对应的尺寸不同,三者的加权平均就是训练阶段使用的目标loss
实时语义分割ICNET_第4张图片

实验

硬件环境

* Maxwell TitanX GPU cards   
* CUDA 7.5 CUDNNv5

三种单独的加速方法

本文作者同样是PSPNet的作者,以下实验主要是基于PSPNet进行的。

下采样输入图

实时语义分割ICNET_第5张图片
随着输入图缩小,一些细小目标从分割结果中消失

下采样特征图

实时语义分割ICNET_第6张图片
虽然分割效果比下采样输入图要好,但是速度提升不大
(译注:没太明白这种加速方法,如果是指输入原图,输出1/32尺寸的分割图,节省了更高尺寸的反卷积的计算量,感觉这种方法性价比还不错)

模型压缩

实时语义分割ICNET_第7张图片
计算每层kernel filter的L1范数,保留范数比较大的kernel filter,表格中第一行表示保留的比例

对比ICNET三个分支

实时语义分割ICNET_第8张图片
sub4是只是用ICNET低分辨率分支,sub24是融合中低分辨率的输出,sub124就是ICNET完整三个分支的输出

CFF的效果

实时语义分割ICNET_第9张图片
第四行是ICNET的用法, 前三行和第四行比较,说明反卷积操作性价比低于 upsampling+dilated convolution。
最后一行和第四行比较,说明Cascade Label Guidance可以提升一个0.9%

和其他方法的对比

实时语义分割ICNET_第10张图片

分支之间的视觉上对比

sub4是只是用ICNET低分辨率分支,sub24是融合中低分辨率的输出,sub124就是ICNET完整三个分支的输出
实时语义分割ICNET_第11张图片
实时语义分割ICNET_第12张图片

你可能感兴趣的:(深度学习,文献阅读,语义分割)