【云驻共创】AI论文精读会第一期:高效语义分割模型Fast-SCNN分享
文章目录
一、研究背景
二、算法介绍
- 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,可以满足日常需求。
图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
- 点赞
- 收藏
- 关注作者
评论(0)