【云驻共创】高效语义分割模型Fast-SCNN实操代码解析分享

网友投稿 964 2022-05-30

编码器 - 解码器框架是用于离线语义图像分割的最新技术。自从自治系统兴起以来,实时计算越来越受欢迎。在本文中,华为云MVP专家厉天一和大家分享高效语义分割模型Fast SCNN,所谓的Fast-SCNN,即是快速分割卷积神经网络,这是一种高分辨率图像数据(1024x2048px)的实时语义分割模型,适用于低内存嵌入式设备的高效计算。

本分享围绕论文概览、模型的算法剖析和代码复现三部分展开。

研究背景及语义分割介绍

语义分割将原始图像分割为多个具有一定语义的区域块,可以将其简单的理解为识别物体类别。快速语义分割在实时应用中特别重要,因为输入需要快速解析,以便于与环境进行快速响应性交互,是进行其他任务的先决条件。

此外,在实际的落地部署应用中往往采用的是嵌入式设备上的实时语义分割(无需访问强大的GPU)使得更多的应用得以实现,比如可穿戴设备上的增强现实。比如说在真正的应用中比较常见的有龋齿诊断,当下比较火热的自动驾驶都会使用到这一相关技术。

语义分割存在三个关键点

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

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

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

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

算法模型剖析

1、encoder-decoder

SOTA语义分割方法多采用两个可分离的模块——encoder和decoder。encoder编码模块利用卷积和池化操作提取深度卷积网络特征。通常是一个简单深度卷积网络的变形,如VGG或ResNet。decoder用低分辨率特征上恢复空间信息,然后预测物体的标签。

正如上图中所展示,它采用的是vGG作为编码模块,双线性上采样和连接较低层,最终会有空间细节的信息。encoder-decoder对于计算量要求较大,在轻量级硬件下通常难以达到实时性。

2、Two-branch

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

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、在训练完成之后一定要进行测试验证,甚至可能说要去做部署工作,这方面提供了非常好的模型管理,不同版本的管理在线、测试模型非常方便。

【云驻共创】高效语义分割模型Fast-SCNN实操代码解析分享

3、有了算法,大家还需要有数据集,为了方便大家的使用,这个仅11GB的数据集已分享至算法源代码,并且在文档中做了详细的说明。

这个算法完整的过程都可以在线上完成,包括数据及训练、部署、测试等等,不需要大家去在本地再进行什么样的操作,需要注意的是,在默认的参数设置下,使用华为的免费体验规格,即可以完成算法的训练及后续的测试,但是因为数据集的存储也是存储在云端的,所以大家要注意,数级的存储可能要一定的花费(1元左右),这个主要在对象存储服务。

如果大家感兴趣的话可以扫描上图中的二维码,立即进行体验。

如果感兴趣,可以点击>>>AI开发平台ModelArts,前往体验。

查看活动详情:https://bbs.huaweicloud.com/blogs/281988

机器学习 深度学习 神经网络

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

上一篇:云原生到底是什么?带你了解云原生的那些事儿
下一篇:"Deno在手,天下我有",极速获取今日热榜
相关文章