【云驻共创】AI论文精读会第一期:高效语义分割模型Fast-SCNN分享

网友投稿 579 2022-05-30

文章目录

一、研究背景

二、算法介绍

2.1 encoder-decoder

2.2 Two-branch

2.3 Fast-SCNN

三、实验结果

3.1 测试数据集Cityscapes

3.2 性能对比

3.3 Fast-SCNN分割结果可视化

四、复现实验

4.1 Learning to Down-sample

4.2 Global Feature Extractor

4.3 Feature Fusion

4.4 Classifier

一、研究背景

语义分割将原始图像分割为多个具有一定语义的区域块,可以将其简单的理解为识别物体类别。快速语义分割在实时应用中特别重要,因为输入需要快速解析,以便于与环境进行快速响应性交互,是进行其他任务的先决条件。此外,嵌入式设备上的实时语义分割(无需访问强大的GPU)使得更多的应用得以实现,比如可穿戴设备上的增强现实。

图1 原始图像

图2 Fast-SCNN输出图

语义分割通常是深度卷积网络和encoder-decoder框架实现,以及multi-branch结构,下文将对这两个算法做出介绍。

语义分割存在三个关键点

尽可能地全面学习主体类别复杂关系

保留图像的空间信息和边界细节

在速度和精度的平衡上进行特定的设计

二、算法介绍

2.1 encoder-decoder

SOTA语义分割方法多采用两个可分离的模块——encoder和decoder。

encoder利用卷积和池化操作提取深度卷积网络特征。通常是一个简单深度卷积网络的变形,如VGG或ResNet。

decoder用低分辨率特征上恢复空间信息,然后预测物体的标签。

encoder-decoder对于计算量要求较大,在轻量级硬件下通常难以达到实时性。

图3 典型的encoder-decoder

2.2 Two-branch

“低分辨率+深网络”和“高分辨率+浅网络”,即在低分辨率位置使用一个较深的branch捕捉环境信息,在高分辨率位置使用一个较浅的branch学习细节信息。而后将两者融合,形成最终的语义分割结果,该方法有效的降低了计算量,可以在GPU上达到实时性。

图4 某种Two-branch网络结构

3.3 Fast-SCNN

Fast-SCNN融合了经典的encoder-decoder和two-branch方法,达到了实时输出的效果。总体结构如下:

图5 Fast-SCNN

图6 Fast-SCNN具体结构

Fast-SCNN由4部分构成,Learning to Down-sample(学习下采样),Global Feature Extractor(全局特征提取), Feature Fusion(特征融合), Classifier(分类器)。

Learning to Down-sample,一个普通的卷积层Conv2D,两个depthwise separable卷积层(DSConv)。

Global Feature Extractor,用于抓取图像分割的全局特征。与普通multi-branch方法不同,该模块对于低分辨率图像进行处理。

Feature Fusion,融合特征,并且是以相对简单方式融合两个分支的特征,确保效率。

Classifier,两个depthwise separable卷积层(DSConv),一个pointwise卷积层(Conv2D),包含一个softmax操作。

此外,在梯度下降计算中,用argmax将softmax替代,以提高计算效率。

Fast-SCNN的创新点主要在以下两个方面:

“学习下采样”(Learning to Down-sample)和encoder-decoder中的 skip connection类似,确保了低层次特征能被有效地共享和使用,共三层。

Fast-SCNN还借鉴了MobileNet的depthwise separable convolution和 residual bottleneck block,来降低计算成本和内存消耗。

图7 Proposed Fast-SCNN

三、实验结果

3.1 测试数据集Cityscapes

Cityscapes是关于城市街道场景的语义理解图片数据集。它主要包含来自50个不同城市的街道场景,,共有19个类别,拥有5000张在城市环境中驾驶场景的高质量像素级注释图像。其中2975张图像用于训练集,500张图像用于验证集, 1525张图像用于测试集。此外,它还有20000张粗糙标注的图像(coarse labels)。该数据集已上传至ModelArts AI Gallery

3.2 性能对比

在Fast-SCNN上训练1000个epochs,需要注意的是,与其他算法进行对比,Fast-SCNN参数很少,只有111万,然而在Class以及Category上的分数却表现良好。这意味着Fast-SCNN效率更高,可以进行实时性计算,在速度和精度上做了很好的平衡。

图8  Fast-SCNN与其他语义分割算法对比,Class以及 category mIoU,参数(百万)

对Fast-SCNN进行不同的配置,再次对比结果,可以发现,Class mIoU结果相差不是特别大。

图9 不同的Fast-SCNN对比

对于不同的输入图片分辨率,Fast-SCNN在高分辨下,FPS可以达到123.5。在低分辨率下,Class mIoU达到51.9,可以满足日常需求。

【云驻共创】AI论文精读会第一期:高效语义分割模型Fast-SCNN分享

图10 不同分辨率结果对比

3.3 Fast-SCNN分割结果可视化

第一列:输入RGB图像;第二列:Fast-SCNN的输出;

最后一列:不进行skip connection的输出。

可以发现,在呈现结果中, Fast-SCNN优势体现在skip connection,特别是在边界和细节之处。

图11 Fast-SCNN分割结果可视化

四、复现实验

原则是先实现,再调优参数以达到论文要求。

秉承“站在巨人肩膀上”的思想,我们首先在GitHub上查找开源代码,在开源代码基础上进行调优。经过不断试错,最终选择一个基于PyTorch框架的开源代码。

经过了一些“小插曲”后,代码调通了,进行优化调整,增加训练轮数和数据增广,在单卡和八卡训练下达到精度要求。

4.1 Learning to Down-sample

在前文中已经详细介绍过,具体为一个普通的卷积层conv,两个depthwise separable卷积层dsconv1, dsconv2. 降低了参数量,提升了速度。

图12,13  Learning to Down-sample模块代码及结构图

4.2 Global Feature Extractor

抓取图像分割的全局特征,分为两个部分,绿色和粉色(见下图)。绿色部分,使用 MobileNet-v2 中提出的 bottleneck residual block 构建全局特征提取器,主要目的是为了降低参数量,更快的提取特征。粉色部分,pyramid pooling 模块,主要用于提取不同尺度的上下文特征。

图14,15 Global Feature Extractor模块代码及结构图

4.3 Feature Fusion

对两个分支特征进行降采样操作,再进行卷积,最后将两个卷积输出相加,合二为一。

图16,17  Feature Fusion模块代码及结构图

4.4 Classifer

2 个深度可分离卷积dsconv1, dscvon2和1个卷积核尺寸为 1x1 的卷积conv,最后通过 softmax得到最终的结果。

图18,19  Classifier模块代码及结构图

最终完成代码上传到了ModelArts AI Gallery,使用的基于PyTorch框架的开源github代码。

为更好的帮助学习,ModelArts AI Gallery中代码函数命名基本与论文中保持一致,欢迎下载学习研究。原始论文下载链接:Fast-SCNN: Fast Semantic Segmentation Network 。如果有更好的参数、调优方式或者疑问等可以在评论区留言交流。

注:本文整理自华为云社区内容共创活动第三期之【线上直播】AI论文精读会第一期:高效语义分割模型Fast-SCNN分享,点此回看直播

查看活动详情:https://bbs.huaweicloud.com/forum/thread-121168-1-1.html

AI 图像处理 机器学习 深度学习 神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:会写代码是你创业路上的包袱吗?
下一篇:9本R语言书,从入门到进阶都在这了
相关文章