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

BiSeNetv2:语义分割经典方法BiSeNet的升级版本

分享IJCV2021上发表的一篇文章BiSeNetv2,这是BiSeNet的升级版本。开源代码地址:https:github.comopen-mmlab


分享IJCV2021上发表的一篇文章BiSeNetv2,这是BiSeNet的升级版本。开源代码地址:https://github.com/open-mmlab/mmsegmentation/tree/master/configs/bisenetv2


1.动机

语义分割是指为每个像素分配一个标签,它广泛用于场景理解、自动驾驶、人机交互、视频监控等领域中。近年来,随着卷积神经网络的发展,研究者们提出了一系列基于全卷积网络的语义分割算法,它们都达到了很好的性能。

全卷积网络的高性能往往来自于比较好的backbone,在语义分割任务中,有2种常用的backbone:

(1)使用了空洞卷积模块的backbone,在backbone中移除了部分下采样操作,使用空洞卷积增加感受野,同时保持feature map的尺寸以保留丰富的空间信息,如下图所示:

图1



图1

(2)使用了Encoder-Decoder的backbone,在decoder模块中,使用skip connections的方式恢复空间信息,如下图所示:

图2



图2

这2类backbone在设计时,没有充分考虑推理时间和计算资源的优化:

(1)空洞卷积的引入、下采样操作的移除,都会引入比较大的计算复杂度和显存消耗;

(2)encoder和decoder中的skip connections会增加显存消耗。

面对实时语义分割的需求,基于上面2种类型的backbone,一般采用以下方法降低模型对硬件资源的消耗:


  • 减小输入图片分辨率
  • 使用更少的通道

尽管这些方法能够有效地提高模型推理速度,但是牺牲了低层次特征,降低了网络的表达能力,导致模型性能下降。因此,设计一个兼顾性能和推理速度的语义分割算法是很重要的。

在语义分割任务中,空间细节信息和高级语义信息都是很重要的,如果不考虑推理速度,可以用一个深的、feature map尺寸大的网络去提取特征;而为了平衡精度和推理速度,作者提出了two-pathway的网络架构Bilateral Segmentation Network(BiSeNet V2)。在该结构中,一个分支提取空间细节信息,另一个分支提取高级语义信息。


2.BiSeNetv2

2.1 总体结构

BiSeNetv2的大体结构如下图所示:

图3



图3

网络主要包含3部分


  • Detail分支 特点是网络层数较少,feature map尺寸大,用于提取空间细节信息。
  • Semantic分支 特点是比较深,feature map尺寸小,感受野大,用于提取高级语义信息。
  • 特征融合模块 用于融合Detail分支和Semantic分支的特征。

2.2 Detail分支

Detail分支负责提取低级空间细节信息,该分支有如下特点:


  • 网络通道数要足够多;
  • feature map的尺寸要稍大一些;
  • 网络层数比较浅;
  • 由于feature map尺寸大、通道数多,最好不要在网络结构中使用残差连接,避免增加显存占用、降低推理速度。

Detail分支的网络结构如下图所示,该分支共3个stage,每个卷积操作后面都有BN和激活函数。每个stage中第1个卷积层的步长都是2,其余卷积层的步长是1。因此Detail分支的输出feature map尺寸是原图的1/8。该分支的网络结构设计遵循VGG的设计准则,同时避免使用残差链接。

图4



图4

2.3 Semantic分支

Semantic分支用于提取高级语义信息,该分支有如下特点:


  • 不需要很大的通道数&#xff0c;这里令Semantic分支的通道数是Detail分支的$\lambda(\lambda<1)$倍&#xff1b;
  • 有很多下采样操作&#xff0c;以增加感受野&#xff1b;
  • 包含全局平均池化操作&#xff0c;以提取全局上下文特征。

Semantic分支的网络结构如图4所示&#xff0c;包含如下3部分&#xff1a;

&#xff08;1&#xff09;Stem Block

结构如下图所示&#xff1a;

图5



图5

Stem Block在2个分支中使用了2种不同的下采样操作&#xff0c;2个分支的输出通过concat操作进行融合。

&#xff08;2&#xff09;Gather-and-Expansion Layer&#xff08;GE&#xff09;

Gather-and-Expansion Layer在设计时借鉴了MobileNetv2中的inverted bottleneck结构&#xff0c;inverted bottleneck结构如图6(a)所示&#xff0c;虚线表示当该模块的步长为2时&#xff0c;残差连接不存在&#xff1b;当该模块的步长为1时&#xff0c;残差连接存在。

步长为1时&#xff0c;Gather-and-Expansion Layer的结构如图6(b)所示&#xff1a;


  • 使用




    3


    ×


    3



    3 \times 3


    3×3
    卷积进行升维&#xff1b;
  • 在高维度使用




    3


    ×


    3



    3 \times 3


    3×3
    的depthwise卷积进行特征提取&#xff1b;
  • 使用




    1


    ×


    1



    1 \times 1


    1×1
    卷积进行降维。

当步长为2时&#xff0c;Gather-and-Expansion Layer的结构如图6©所示&#xff1a;


  • 使用2个




    3


    ×


    3



    3 \times 3


    3×3
    的depthwise卷积进一步增加感受野&#xff1b;
  • 在shortcut中使用1个




    3


    ×


    3



    3 \times 3


    3×3
    的depthwise卷积。

图6



图6

&#xff08;3&#xff09;Context Embedding Block&#xff08;CE&#xff09;

结构如下图所示&#xff1a;

图7



图7

该模块使用全局平均池化和残差连接提取全局上下文特征。


2.4 特征融合模块

特征融合模块用于融合Detail分支和Semantic分支提取到的特征。由于Semantic分支中包含较多的下采样操作&#xff0c;该分支的输出feature map尺寸较小&#xff0c;因此要对Semantic分支输出的feature map进行上采样操作&#xff0c;使其与Detail分支输出的feature map尺寸一致。通过元素相加或者concat的方式融合2个分支的特征是不合适的&#xff0c;因为这忽略了2个分支输出特征的差异性。

作者提出了Bilateral Guided Layer用于融合2个分支的特征&#xff0c;结构如下图所示&#xff1a;

图8



图8

上图中的








\otimes


表示元素乘法操作。该结构能够使得2个分支互相通信、互为引导。

综上&#xff0c;BiSeNetv2的总体结构如下图所示&#xff0c;紫色框内是2个分支&#xff0c;红色框内是融合结构&#xff0c;Down表示下采样操作&#xff0c;Up表示上采样操作&#xff0c;




φ



\varphi


φ
表示Sigmoid函数&#xff0c;








\otimes


表示元素乘法。

图9



图9

3.辅助训练分支

为了进一步提高模型精度&#xff0c;训练时&#xff0c;在Semantic分支的不同位置增加了若干个辅助Segmentation Head&#xff0c;如图9橙色框内所示&#xff0c;这些结构仅用于训练&#xff0c;在推理时会删掉它们。

辅助Segmentation Head的结构如下图所示&#xff1a;

图10



图10

在上图中&#xff0c;使用





C


i




C_i


Ci
控制卷积的通道数&#xff0c;




S



S


S
表示上采样倍数&#xff0c;




N



N


N
表示最终输出的feature map的通道数。


4.实验

4.1 训练

超参数 在训练时&#xff0c;使用kaiming normal方式进行权重初始化&#xff0c;使用SGD优化器&#xff0c;batch size&#61;16&#xff0c;momentum&#61;0.9&#xff0c;初始学习率为




5



e






2





5 e^{-2}


5e2
&#xff0c;学习率变化策略为初始学习率乘以






(


1







i


t


e


r




 iter 



s


max








)



power 




\left(1-\frac{i t e r}{\text { iter } s_{\max }}\right)^{\text {power }}


(1 iter smaxiter)power 
&#xff0c;其中




power 


&#61;


0.9



{\text {power }}&#61;0.9


power &#61;0.9
。对于Cityscapes和CamVid数据集&#xff0c;weight_decay&#61;0.0005&#xff0c;对于COCO-Stuff数据集&#xff0c;weight_decay&#61;0.0001。对于Cityscapes和CamVid、COCO-Stuff这3个数据集&#xff0c;训练的迭代次数分别为150K、10K、20K。

数据增强 使用了随机水平翻转、随机缩放、随机裁剪进行数据增强。随机缩放的尺度为




{


0.75


,


1


,


1.25


,


1.5


,


1.75


,


2.0


}



\{0.75,1,1.25,1.5,1.75,2.0\}


{0.75,1,1.25,1.5,1.75,2.0}


4.2 结果

BiSeNetv2在Cityscapes数据集上的性能如下&#xff0c;输入到BiSeNetv2模型中的图像尺寸为




1024


×


512



1024 \times 512


1024×512
。上表中的




γ



\gamma


γ
表示输入模型的图像尺寸对于




2048


×


1024



2048 \times 1024


2048×1024
的下采样率。

图11



图11

BiSeNetv2在CamVid数据集上的性能如下&#xff0c;输入模型的图像尺寸为




960


×


720



960 \times 720


960×720
。下表中的




 * 



\text { * }


 * 
表示该模型先在Cityscapes数据集上进行预训练。

图12



图12

BiSeNetv2在COCO-Stuff数据集上的性能如下&#xff0c;输入图像分辨率为为




640


×


640



640 \times 640


640×640

图13



图13

如果你对计算机视觉领域的目标检测、跟踪、分割、轻量化神经网络、Transformer、3D视觉感知、人体姿态估计兴趣&#xff0c;欢迎关注公众号一起学习交流~

在这里插入图片描述

欢迎关注我的个人主页&#xff0c;这里沉淀了计算机视觉多个领域的知识&#xff1a;https://www.yuque.com/cv_51







推荐阅读
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
author-avatar
我是曰照人_692
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有