【云驻共创】高效语义分割模型Fast-SCNN实操代码解析分享
编码器 - 解码器框架是用于离线语义图像分割的最新技术。自从自治系统兴起以来,实时计算越来越受欢迎。在本文中,华为云MVP专家厉天一和大家分享高效语义分割模型Fast SCNN,所谓的Fast-SCNN,即是快速分割卷积神经网络,这是一种高分辨率图像数据(1024x2048px)的实时语义分割模型,适用于低内存嵌入式设备的高效计算。
本分享围绕论文概览、模型的算法剖析和代码复现三部分展开。
首先本次厉天一和大当家分享的实践以这篇论文为例,这篇论文的题目如前面分享题目的介绍的一样,非常的简洁,他强调的是快速分割的网络,强调的重点在于快,它的出处来自于mvc2019就是英国的机械视学会,作者分别来自于东芝的研究所和剑桥大学。
研究背景及语义分割介绍
语义分割将原始图像分割为多个具有一定语义的区域块,可以将其简单的理解为识别物体类别。快速语义分割在实时应用中特别重要,因为输入需要快速解析,以便于与环境进行快速响应性交互,是进行其他任务的先决条件。
此外,在实际的落地部署应用中往往采用的是嵌入式设备上的实时语义分割(无需访问强大的GPU)使得更多的应用得以实现,比如可穿戴设备上的增强现实。比如说在真正的应用中比较常见的有龋齿诊断,当下比较火热的自动驾驶都会使用到这一相关技术。
语义分割存在三个关键点
· 尽可能地全面学习主体类别复杂关系
· 保留图像的空间信息和边界细节
· 在速度和精度的平衡上进行特定的设计
语义分割通常是深度卷积网络和encoder-decoder框架实现,以及multi-branch结构,下文将对这两个算法做出介绍。
算法模型剖析
1、encoder-decoder
SOTA语义分割方法多采用两个可分离的模块——encoder和decoder。encoder编码模块利用卷积和池化操作提取深度卷积网络特征。通常是一个简单深度卷积网络的变形,如VGG或ResNet。decoder用低分辨率特征上恢复空间信息,然后预测物体的标签。
正如上图中所展示,它采用的是vGG作为编码模块,双线性上采样和连接较低层,最终会有空间细节的信息。encoder-decoder对于计算量要求较大,在轻量级硬件下通常难以达到实时性。
2、Two-branch
“低分辨率+深网络”和“高分辨率+浅网络”,即在低分辨率位置使用一个较深的branch捕捉环境信息,在高分辨率位置使用一个较浅的branch学习细节信息。而后将两者融合,形成最终的语义分割结果,该方法有效的降低了计算量,可以在GPU上达到实时性。
在现有的两分支快速分割方法的基础上,我们引入了“学习下采样”模块,该模块同时为多个分辨率分支计算低级特征。我们的网络将高分辨率的空间细节与以较低分辨率提取的深度特征相结合,在Cityscapes上以123.5帧/秒的速度生成准确率为68.0%的平均交叉点,通过快速高效的提取特征信息,最终作者也通过做了实验证明的大规模预训练是非必要的。
3、Fast-SCNN
本文的主角Fast-SCNN是融合了经典的encoder-decoder和two-branch方法,达到了实时输出的效果。Fast-SCNN由4部分构成,Learning to Down-sample(学习下采样),Global Feature Extractor(全局特征提取), Feature Fusion(特征融合), Classifier(分类器)。
l Learning to Down-sample,一个普通的卷积层Conv2D,两个depthwise separable卷积层(DSConv)。
l Global Feature Extractor,用于抓取图像分割的全局特征。与普通multi-branch方法不同,该模块对于低分辨率图像进行处理。
l Feature Fusion,融合特征,并且是以相对简单方式融合两个分支的特征,确保效率。
l Classifier,两个depthwise separable卷积层(DSConv),一个pointwise卷积层(Conv2D),包含一个softmax操作。
此外,在梯度下降计算中,用argmax将softmax替代,以提高计算效率。
Fast-SCNN的创新点主要在以下两个方面:、
1. “学习下采样”(Learning to Down-sample)的提出和encoder-decoder中的 skip connection类似,确保了低层次特征能被有效地共享和使用,一共三层。
2. Fast-SCNN还借鉴了非常经典的MobileNet的depthwise separable convolution和 residual bottleneck block进行参数的降低,来降低计算成本和内存消耗。
实验结果展示
本轮的Fast-SCNN是在这个非常经典的数据上进行验证,首先来介绍一下这个结果,左侧这三个是输入图像,关于这个数据的介绍,大家可以到网上更加详细的了解,是一个非常经典的数据,中间的这三个分别对应的是左侧这个三侧的真实的标签的,右侧的这三列分别代表模型针对的输出,可以看出分割的效果还是比较好的。
接下来来看一看具体的代码,在做这篇文章复现的一个思路就是先实现,然后再调节达到要求,这个也适用于平时做自己的课题。如果大家对这个参考的代码兴趣的话,你可以扫描右侧下方的二维码来查看参考的代码仓库。
下面介绍一下开发过程中使用到的ModelArts文件,是基于ModelArts进行的论文浮现,在模型构建方面,大家可能在本地有使用的环境来构建和调试。主要是要调整代码,同时能够对完整的结构有一个了解,通过这个非常方便的在线式交互调整工具,实现不需要自行创建开发环境去配置环境,而直接使用已经配置好的环境,大大的减轻了配置环境的烦恼,让更加集中于代码调试方面。同时经过调试之后,采用的训练作业来进行训练,训练作业可以根据训练的完成之后自动进行停止。
之后需要去做模型的验证,就是模型精度的验证,但是达到了所要求的精度要求,在这上面将训练的模型进行部署。当然通过建设开发平台,也可以很好的体现训练部署的衔接,实现快速的在线推理服务。同时,大家可以同时调动多一点进行处理,会大大加快的速度,最终也是利用批量处理的服务来进行模型的推理和验证。
代码详细解析
在前文中已经详细介绍过,具体为一个普通的卷积层conv,两个depthwise separable卷积层dsconv1, dsconv2. 实现特征提取,降低了参数量,提升了速度。
抓取图像分割的全局特征,分为两个部分,绿色和粉色(见下图)。绿色部分,使用 MobileNet-v2 中提出的 bottleneck residual block 构建全局特征提取器,主要目的是为了降低参数量,更快的提取特征。粉色部分,pyramid pooling 模块,主要用于提取不同尺度的上下文特征,粉色的部分主要目的是为了能够对不同分辨的不同情况下的特征做一个整合或者说融合
对两个分支特征进行降采样操作,再进行卷积,最后将两个卷积输出相加,合二为一。作者用意希望能够在低分辨上去输入全局的信息,在高分辨上进行细节的信息,这样才能够在最终的效果。
2 个深度可分离卷积dsconv1, dscvon2和1个卷积核尺寸为 1x1 的卷积conv,最后通过 softmax得到最终的结果。
经验分享总结
1.华为云ModelArts拥有强大的硬件支持支持,特别是显存的支持,能够很好的帮助实现开发,不用去担心,因为硬件显存不足的问题而影响训练的结果,
2、在训练完成之后一定要进行测试验证,甚至可能说要去做部署工作,这方面提供了非常好的模型管理,不同版本的管理在线、测试模型非常方便。
3、有了算法,大家还需要有数据集,为了方便大家的使用,这个仅11GB的数据集已分享至算法源代码,并且在文档中做了详细的说明。
这个算法完整的过程都可以在线上完成,包括数据及训练、部署、测试等等,不需要大家去在本地再进行什么样的操作,需要注意的是,在默认的参数设置下,使用华为的免费体验规格,即可以完成算法的训练及后续的测试,但是因为数据集的存储也是存储在云端的,所以大家要注意,数级的存储可能要一定的花费(1元左右),这个主要在对象存储服务。
如果大家感兴趣的话可以扫描上图中的二维码,立即进行体验。
如果感兴趣,可以点击>>>AI开发平台ModelArts,前往体验。
本文整理自【内容共创系列】华为云签约作者征集令,认证签约作者赢取专属权益!
查看活动详情:https://bbs.huaweicloud.com/blogs/281988
- 点赞
- 收藏
- 关注作者
评论(0)