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

举报
Victue 发表于 2021/05/13 11:25:17 2021/05/13
【摘要】 语义分割为将原始图像分割为多个具有一定语义的区域块。本文详细介绍了高效语义分割模型Fast-SCNN的Learning to Down-sample、Global Feature Extractor等相关内容及技术,并对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.png

    1 原始图像

    图片2.png

    2 Fast-SCNN输出图

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

    语义分割存在三个关键点

    • 尽可能地全面学习主体类别复杂关系
    • 保留图像的空间信息和边界细节
    • 在速度和精度的平衡上进行特定的设计

    二、算法介绍

    2.1 encoder-decoder

    SOTA语义分割方法多采用两个可分离的模块——encoderdecoder

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

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

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

    图片3.png

    3 典型的encoder-decoder

    2.2 Two-branch

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

    图片4.png

    4 某种Two-branch网络结构

      3.3 Fast-SCNN

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

      图片5.png

      5 Fast-SCNN

      图片6.png

      6 Fast-SCNN具体结构

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

      1. Learning to Down-sample,一个普通的卷积层Conv2D,两个depthwise separable卷积层(DSConv)
      2. Global Feature Extractor,用于抓取图像分割的全局特征。与普通multi-branch方法不同,该模块对于低分辨率图像进行处理。
      3. Feature Fusion,融合特征,并且是以相对简单方式融合两个分支的特征,确保效率。
      4. Classifier,两个depthwise separable卷积层(DSConv),一个pointwise卷积层(Conv2D),包含一个softmax操作。

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

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

      1. 学习下采样”(Learning to Down-sample)encoder-decoder中的 skip connection类似,确保了低层次特征能被有效地共享和使用,共三层。
      2. Fast-SCNN还借鉴了MobileNetdepthwise separable convolutionresidual bottleneck block,来降低计算成本和内存消耗。

      图片7.png

      7 Proposed Fast-SCNN

      三、实验结果

      3.1 测试数据集Cityscapes

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

      3.2 性能对比

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

      图片11.png

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

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

      图片12.png

      9 不同的Fast-SCNN对比

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

      图片13.png

      10 不同分辨率结果对比

      3.3 Fast-SCNN分割结果可视化

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

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

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

      图片14.png

      11 Fast-SCNN分割结果可视化

      四、复现实验

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

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

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

      4.1 Learning to Down-sample

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

      图片15.png

      图片16.png

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


      4.2 Global Feature Extractor

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

      图片17.png

      图片18.png

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

      4.3 Feature Fusion

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

      图片19.png

      图片20.png

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

      4.4 Classifer

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

      图片21.png

      图片22.png

      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

      -307dbad0ab2912e9.jpg

      【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
      • 点赞
      • 收藏
      • 关注作者

      评论(0

      0/1000
      抱歉,系统识别当前为高风险访问,暂不支持该操作

      全部回复

      上滑加载中

      设置昵称

      在此一键设置昵称,即可参与社区互动!

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。