热门标签 | 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







推荐阅读
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 图像分割技术在人工智能领域中扮演着关键角色,其中语义分割、实例分割和全景分割是三种主要的方法。本文对这三种分割技术进行了详细的对比分析,探讨了它们在不同应用场景中的优缺点和适用范围,为研究人员和从业者提供了有价值的参考。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 本文通过思维导图的形式,深入解析了大型网站技术架构的核心原理与实际案例。首先,探讨了大型网站架构的演化过程,从单体应用到分布式系统的转变,以及各阶段的关键技术和挑战。接着,详细分析了常见的大型网站架构模式,包括负载均衡、缓存机制、数据库设计等,并结合具体案例进行说明。这些内容不仅有助于理解大型网站的技术实现,还能为实际项目提供宝贵的参考。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
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社区 版权所有