热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【语义分割】CVPR2021_RethinkingBiSeNetForRealtimeSemanticSegmentation

文章目录一、背景二、动机三、方法3.1DesignofEncodingNetwork3.2Decoder四、实验4.1消融实验4.2和SOTA方法对比Paper:https:arx




文章目录


    • 一、背景
    • 二、动机
    • 三、方法
      • 3.1 Design of Encoding Network
      • 3.2 Decoder

    • 四、实验
      • 4.1 消融实验
      • 4.2 和 SOTA 方法对比


Paper: https://arxiv.org/abs/2104.13188

Code: https://github.com/MichaelFan01/STDC-Seg
在这里插入图片描述
在这里插入图片描述


一、背景

现有的语义分割方法,如 Deeplabv3、psp、Segnet等,虽然都取得了较好的效果,但都需要很大的计算开销。

在轻量化语义分割方面,有两个主要方向:


  • lightweight backbone

    DFANet,DFNet等

  • multi-branch architecture

    ICNet、BiSeNetv1、BiSeNetv2


二、动机

BiSeNet V1 虽然使用multi-path的结构,将低层的detail和高层的semantic进行了组合,但获得低层信息的分支非常耗时,辅助path经常缺乏低层信息的指导。


三、方法

本文作者提出了一个手工网络来提升推理速度、提升网络可解释性。

STDC module(Fig3(b)):首先提出了一个 STDC 模块,来使用很少的参数获取多尺度和感受野信息

STDC networks:将 STDC module 嵌入U-net里边来得到
在这里插入图片描述

在这里插入图片描述


3.1 Design of Encoding Network

3.1.1 STDC module

特点:


  • 只有第一个block的卷积核大小为1x1,其余都为3x3

  • 浅层通道多,深层通道少

    原因:


    • 分类任务中,深层的通道比浅层多,深层的高级语义信息对分类任务更加重要;
    • 分割任务中,需要同时关注深层和浅层信息。浅层(小感受野)需要足够多的通道来提取更多精细的信息,高层(大感受野)通道如果和浅层一样多的话,会造成冗余,所以高层通道越来越少。
  • 只有 Block2 进行了下采样

  • 为了丰富特征,作者使用了跳连(skip-path)将 x1 到 xn 的特征进行了concat,concat之前会使用 3x3 的average pooling 将特征图下采样到相同大小。

STDC module 的两个优势:


  • 作者以几何级数的方式来降低滤波器的大小,显著降低了计算复杂度
  • 最后使用concat的方式融合了所有block的输出,保留了多尺度感受野和多尺度信息。

3.1.2 Network Architecture:

network 结构图如图 3(a) 所示,由 6 个 stage 组成,stage1~stage5 都进行了下采样,stage6进行全连接。每个stage里边的第一个STDC会进行二倍下采样,其他STDC将会保持分辨率不变。
在这里插入图片描述
STDC network 如表2所示:
在这里插入图片描述


3.2 Decoder

3.2.1 Segmentation Architecture

在这里插入图片描述
如图4(a)所示,作者使用stage 3、4、5来生成下采样比率分别为 1/8、1/16、1/32的特征图。然后使用全局平均池化来得到语义信息。之后,使用U-shape结构来对全局特征进行上采样,并且和stage4、stage5的进行结合(在encoder阶段)。

context info 和 spatial info 的结合使用:

在最后的语义分割预测阶段,作者使用了 Feature Fusion Module (bisenetv1),来融合来自encoder 的 stage3 (1/8大小) 和 decoder 的stage3的特征,作者认为来自这两个 stage 的特征其实是代表了不同尺度的特征。encoding 的特征有更多的细节信息,decoding的特征有更多的语义信息(由于其来自于 global average pooling)。

Seg Head 的构成:一个 3x3 conv+bn+relu,再跟一个 1x1 卷积,输出维度为类别数量

Loss:cross entropy loss

4、Detail Guidance of Low-level Features

BiSeNet 的spatial path 的特征如图5(b)所示,对比 backbone 的低层特征(如 stage3),spatial path包含了更多细节信息,如边缘、角点。

在这里插入图片描述
因为本文是 single-stream 的,所以作者提出了一个 Detail Guidance Module 来引导低层学习空间信息。

方法:将细节预测建模为一个二值分割任务


  • 使用 Laplacian operator 从 segmentation gt 生成 detail gt(Fig4©)
  • 在 stage3 中插入 Detail Head,来生成 detail feature map(Fig4(a))
  • 将detail gt 作为真值,指导低层来学习空间细节信息,学习后的可视化效果图如 Fig5(d),可以看出其已经学到了很多类似于Fig5(b) 的细节
  • 最后,将学习到了detail features 和来自于 decoder 的 deep block 的context 特征进行融合。

Detail gt generation: 如 Fig4© 所示,作者使用 Detail Aggregation module 生成细节真值图:


  • 首先使用不同stride的2D卷积(named laplacian kernel,Fig4(e)),产生不同尺度的soft thin detail 特征图
  • 然后将这三个特征图上采样到原始尺寸,并使用一个 1x1 卷积来进行动态融合
  • 最后,使用阈值0.1来将预测结果转化为二值gt图

在这里插入图片描述
Detail loss:

已知细节图像中,detail pixel 远远少于 non-detail pixel,所以 detail 的预测是一个类别不均衡问题,由于weighted cross-entropy loss 是比较粗糙的,所以我们使用binary cross-entropy & dice loss联合学习。

Dice loss 度量预测和真值的重合率,且该 loss 对前景/背景的个数不敏感,可以缓解类别不均衡问题
在这里插入图片描述

在这里插入图片描述
Detail Head:如 Fig4(b) 所示,Detail Head 产生 detail map,detail map 可以指导浅层对空间信息编码


  • 组成:一个 3x3 conv-BN-Relu,后接一个1x1cov
  • 使用:只在 train 阶段使用,test 阶段不使用,所以测试阶段不会带来另外的耗时

四、实验


4.1 消融实验

1、Effectiveness of STDC module

作者通过实验验证了在 STDC 中使用4个 block 是最优的,多的话 FPS 会急剧下降。

在这里插入图片描述

2、Effectiveness of backbone

在这里插入图片描述

3、Effectiveness of Detail Guidance

stage 3 的 heatmap feature map 如 Fig6 所示,可以明显的看出有 Detail guidance 的(c)列,比(b)列包含了更多的空间细节信息,定量的分析如 Table 4 所示。
在这里插入图片描述
在这里插入图片描述


4.2 和 SOTA 方法对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • 前言本篇为大家总结社区多人合作常见的场景和对应的git操作命令。本篇非新手教程,阅读本篇前需具备Git基础知识。Git入门教程请参考https://www ... [详细]
  • [由零开始]2020年最新 如何在Idea中编译构建Springframework5.1.x 的源码
    构建Spring-framework-5.1.x的源码第一步:首先前往世界上最大的同性交友网站gayHab上去下载spring源码:下载地址ÿ ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Git GitHub多人协作
    在学校做一个小项目需要多人协作,就用到了gitHub,百度了一下多数写得乱七八糟或者支离破碎,于是总结了一下自己的步骤如下,第一次使用GitHUb,哪里不对望大神指出一.前期准备: ... [详细]
  • git向远程仓库提交遇到的各种坑
    **码云***gitinit初始化本地仓库gitinit*gitremoteaddorigingitgithub.com:xueqinngchennLocal-agent.git将 ... [详细]
  • 在推送代码时切换git分支的想法
    1、在idea右下角点击git:xxx2、RemoteBranches就是远端分支,也就是要上传的分支,我这里有master,test。比如要切换到te ... [详细]
  • |Questions|Answers|-------------|----------------------------------------- ... [详细]
  • 1、获取远程供应商的repo镜像repoinit--mirror-ussh:$username$host_name:29418manifests-bxx_branch--repo ... [详细]
author-avatar
落叶听声
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有