新开源!实时语义分割算法Light-Weight RefineNet
点击我爱计算机视觉标星,更快获取CVML新技术
前几日52CV君分享了论文《Real-Time Joint Semantic Segmentation and Depth Estimation Using Asymmetric Annotations》(详见:17毫秒每帧!实时语义分割与深度估计),引起了广泛关注,被转载到多个网站。
文中原作者修改了一篇BMVC2018的论文《Light-Weight RefineNet for Real-Time Semantic Segmentation》中提出的算法,使用知识蒸馏的方法,使轻量级模型17毫秒完成语义分割与深度估计任务。
可惜那篇文章并没有开源代码。其使用的Light-Weight RefineNet模型非常值得参考。
恰巧昨日原作者开源了Light-Weight RefineNet,今天我们就来看看其庐山真面目。
作者信息:
该文的目的很简单,在CVPR2017的RefineNet语义分割算法基础上减少模型参数和计算量。
RefineNet的网络架构:
RefineNet使用经典的编码器-解码器架构,CLF为3*3卷积,卷积核个数为语义类的个数,编码器的骨干网可以是任意图像分类特征提取网络,重点是解码器部分含有RCU、CRP、FUSION三种重要结构。
RCU即residual convolutional unit(残差卷积单元),为经典残差网络ResNet中的residual block去掉batch normalisation部分,由ReLU和卷积层构成。
CRP为链式残差池化(chained residual pooling),由一系列的池化层与卷积层构成,以残差的形式排列。
RCU与CRP中使用3*3卷积和5*5池化。
FUSION部分则是对两路数据分别执行3*3卷积并上采样后求和SUM。
Light-Weight RefineNet改进方法
改进图示:
1)替换3*3卷积为1*1卷积
虽然理论3*3卷积理论上有更大的感受野有利于语义分割任务,但实际实验证明,对于RefineNet架构的网络其并不是必要的。
2)省略RCU模块
作者尝试去除RefineNet网络中部分及至所有RCU模块,发现并没有任何的精度下降,并进一步发现原来RCU blocks已经完全饱和。
表格中RefineNet-101为原始RefineNet网络,RefineNet-101-LW-WITH-RCU为使用了1)中的改进替换卷积,RefineNet-101-LW为使用了1)与2)中的改进替换卷积并省略RCU。
从上图表格中可知,1)的改进直接减少了2倍的参数量降低了3倍的浮点计算量,2)的改进则进一步使参数更少浮点计算量更小。
3)使用轻量级骨干网
作者发现即使使用轻量级NASNet-Mobile 、MobileNet-v2骨干网,网络依旧能够达到非常稳健的性能表现,性能不会大幅下降。
实验结果
软硬件平台:8GB RAM, Intel i5-7600 处理器, 一块GT1080Ti GPU,CUDA 9.0 ,CuDNN 7.0。
作者首先在NYUDv2 和 PASCAL Person-Part数据集上进行了实验,结果如下:
可以看到虽性能略有下降,但参数量和计算时间大幅降低。
同时作者也在PASCAL VOC数据库上进行了实验,并加入NASNet-Mobile 、MobileNet-v2骨干网,发现对比于使用相同骨干网路的目前几乎是最先进的语义分割架构DeepLab-v3,RefineNet-LW的性能表现更具优势。
语义分割结果对比图示:
总结
这篇文章的改进非常简单,几乎所有想法都来自于实验摸索出来的。原来通过实验发现现有模型中的计算冗余也很有价值啊!
代码地址:
https://github.com/DrSleep/light-weight-refinenet
论文地址:
http://bmvc2018.org/contents/papers/0494.pdf
代码论文下载:
在“我爱计算机视觉”公众号对话界面回复“17ms”,即可收到代码及Light-Weight RefineNet论文的百度云下载地址。
长按关注我爱计算机视觉
【点赞与转发】就是一种鼓励