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

news2024/9/23 1:37:30

分享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分支用于提取高级语义信息,该分支有如下特点:

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

Semantic分支的网络结构如图4所示,包含如下3部分:

(1)Stem Block

结构如下图所示:

图5

图5

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

(2)Gather-and-Expansion Layer(GE)

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

步长为1时,Gather-and-Expansion Layer的结构如图6(b)所示:

  • 使用 3 × 3 3 \times 3 3×3卷积进行升维;
  • 在高维度使用 3 × 3 3 \times 3 3×3的depthwise卷积进行特征提取;
  • 使用 1 × 1 1 \times 1 1×1卷积进行降维。

当步长为2时,Gather-and-Expansion Layer的结构如图6©所示:

  • 使用2个 3 × 3 3 \times 3 3×3的depthwise卷积进一步增加感受野;
  • 在shortcut中使用1个 3 × 3 3 \times 3 3×3的depthwise卷积。

图6

图6

(3)Context Embedding Block(CE)

结构如下图所示:

图7

图7

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

2.4 特征融合模块

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

作者提出了Bilateral Guided Layer用于融合2个分支的特征,结构如下图所示:

图8

图8

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

综上,BiSeNetv2的总体结构如下图所示,紫色框内是2个分支,红色框内是融合结构,Down表示下采样操作,Up表示上采样操作, φ \varphi φ表示Sigmoid函数, ⊗ \otimes 表示元素乘法。

图9

图9

3.辅助训练分支

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

辅助Segmentation Head的结构如下图所示:

图10

图10

在上图中,使用 C i C_i Ci控制卷积的通道数, S S S表示上采样倍数, N N N表示最终输出的feature map的通道数。

4.实验

4.1 训练

超参数 在训练时,使用kaiming normal方式进行权重初始化,使用SGD优化器,batch size=16,momentum=0.9,初始学习率为 5 e − 2 5 e^{-2} 5e2,学习率变化策略为初始学习率乘以 ( 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 ,其中 power  = 0.9 {\text {power }}=0.9 power =0.9。对于Cityscapes和CamVid数据集,weight_decay=0.0005,对于COCO-Stuff数据集,weight_decay=0.0001。对于Cityscapes和CamVid、COCO-Stuff这3个数据集,训练的迭代次数分别为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数据集上的性能如下,输入到BiSeNetv2模型中的图像尺寸为 1024 × 512 1024 \times 512 1024×512。上表中的 γ \gamma γ表示输入模型的图像尺寸对于 2048 × 1024 2048 \times 1024 2048×1024的下采样率。

图11

图11

BiSeNetv2在CamVid数据集上的性能如下,输入模型的图像尺寸为 960 × 720 960 \times 720 960×720。下表中的  *  \text { * }  * 表示该模型先在Cityscapes数据集上进行预训练。

图12

图12

BiSeNetv2在COCO-Stuff数据集上的性能如下,输入图像分辨率为为 640 × 640 640 \times 640 640×640

图13

图13

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp中app真机模拟以及小程序编译后css样式异常失效问题原因及解决方案

前言 最近写使用uniapp写app&#xff0c;开发的时候写样式都是使用浏览器h5进行调试一切正常&#xff0c;但是最后进行手机真机调试的时候css样式出现了异常&#xff0c;本文归纳常见的问题 比如在h5页面显示正常&#xff1a; 但是在真机调试app的实现则显示&#xff1a; H5正…

【PyTorch深度学习实践】02_梯度下降

文章目录梯度下降1.梯度下降算法实现代码2.随机梯度下降实现代码3.小批量随机梯度下降梯度下降 1.梯度下降算法 之前可以使用穷举的方法逐个测试找使损失函数最小的点&#xff0c;但当数据过多时&#xff0c;维度过高&#xff0c;会使穷举变得非常困难&#xff0c;因此需要优…

K8s 数据管理

目录前言一、Volume1.1 emptyDir1.1.1 基本概念1.1.2 应用案例1.2 hostPath1.2.1 基本概念1.2.2 应用案例1.3 外部 Storage Provider二、Persistent Volume2.1 基本概念2.1.1 PersistentVolume2.1.2 PersistentVolumeClaim2.2 NFS PersistentVolume前言 与 Docker 类似&#x…

QML教程(一)基础语法

目录 一、导入 二、对象声明 三、对象属性 1.声明对象属性 2.信号属性 3.方法属性 4.附加属性略 5.枚举属性 6.对象属性赋值 四、自定义对象 一、导入 模块导入 语法&#xff1a; import <ModuleIdentifier> [<Version.Number>] [as <Qualifier>…

面向对象设计原则概述

面向对象设计原则概述 软件的可维护性和可复用性 软件工程和建模大师Peter coad认为&#xff0c;一个好的系统设计与应该具备如下三个性质 可扩展性 灵活性 可插入性 软件的可维护性和可复用性 软件的复用和重用拥有众多优点&#xff0c;如可以提高软件的开发效率&#xf…

Educational Codeforces Round 92 (Rated for Div. 2) B. Array Walk

翻译&#xff1a; 给定一个数组&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;由&#x1d45b;个正整数组成。 最初&#xff0c;您位于索引1&#xff0c;分数等于&#x1d44e;1。你可以执行两种动作: 向右移动…

CDN

CDN——Content Delivery Network&#xff0c;内容分发网络。 具体来说&#xff0c;CDN就是采用更多的缓存服务器&#xff08;CDN边缘节点&#xff09;&#xff0c;布放在用户访问相对集中的地区或网络中。当用户访问网站时&#xff0c;利用全局负载技术&#xff0c;将用户的访…

【CSP】邻域均值

邻域均值 邻域均值 题意比较好理解&#xff0c;就是算一些数字。如果采用暴力方法的话&#xff0c;就是用一个边长为 2∗r12*r12∗r1 的正方形框框住大矩阵&#xff0c;然后遍历这个框&#xff0c;求出其平均值&#xff0c;然后移动正方形框&#xff0c;直到大矩阵内所有像…

【免费开放源码】审批类小程序项目实战(预约审批端)

第一节&#xff1a;什么构成了微信小程序、创建一个自己的小程序 第二节&#xff1a;微信开发者工具使用教程 第三节&#xff1a;深入了解并掌握小程序核心组件 第四节&#xff1a;初始化云函数和数据库 第五节&#xff1a;云数据库的增删改查 第六节&#xff1a;项目大纲以及制…

6.5 特殊用途语言特性

文章目录默认实参使用默认实参调用函数默认实参声明默认实参初始值内联函数和constexpr函数内联函数constexpr 函数把内联函数和constexpr函数声明在头文件内调试帮助assert预处理宏NDEBUG预处理变量默认实参 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同…

电子游戏销售之缺失值检测与处理

电子游戏销售之缺失值检测与处理 文章目录电子游戏销售之缺失值检测与处理0、写在前面1、数据缺失值预处理1.1 表的形状1.2 原始数据每个特征缺失和非缺失的数目1.3 每个特征缺失的率1.4 处理后各特征缺失值的数目1.5 删除缺失值后的数据展示2、替换法处理缺失值2.1 替换法2.2 …

1.Springboot配置细节

一、参考资料 13-SpringBoot配置-项目外部配置加载顺序_哔哩哔哩_bilibili 二、配置 2.1 配置文件 注意变量后面是:&#xff0c;而不是等号 2.2 读取配置文件 2.2.1 Value 比如配置文件application.properities中定义了一个name&#xff0c;其值为abc。 代码里面只需按照如…

一、软件安装与配置

一、PyTorch环境软件安装与配置 1.安装anaconda参考 anaconda老版本下载方法&#xff08;如何查看anaconda与python版本对应关系&#xff09;及安装教程_breadth_的博客-CSDN博客_anaconda旧版本下载 2.在anconda下安装和激活pytorch环境 此步并没有下载pytorch 3.下载pyto…

云计算运营—03 KVM虚拟化技术方案介绍

KVM虚拟化技术方案介绍 1.背景介绍 KVM&#xff08;Kernel-based Virtual Machine&#xff09; 开源全虚拟化方案 支持体系结构 x86(32位,64位)、IA64、PowerPC、S390 依赖x86硬件支持&#xff1a;Intel VT-x/ AMD-V内核模块&#xff0c;使得linux内核成为hypervisor XEN架构 …

《B-树》

tips&#xff1a;B-树读成b树&#xff0c;并不是b减树 【一】基本搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索树无要求O(N)二叉平衡树&#xff08;AVL和红黑树&#xff09;无要求&#xff0c;最后随机O(log2N)哈希无要求O(1)位图无要求O…

linux系统中SPI驱动框架的基本原理与实现

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何使用linux系统中SPI驱动ICM-20608六轴传感器的操作。 目录 第一&#xff1a;linux系统下SPI驱动框架简介 第二&#xff1a;SPI设备驱动编写 第三&#xff1a;SPI设备和驱动匹配过程 第一&#xff1a;linux系统下SPI驱…

MySQL数据库高级面试题(1)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

CSDN年度征文 | 你好,2023

祝大家新年快乐~&#x1f9e7;&#x1f9e7;&#x1f9e7;⭐过去的2022⭐2022已成过去&#xff0c;2023慢步向我们走来。回首2022&#xff0c;这一年不是平凡的一年。这一年&#xff0c;有苦也有乐。冬奥会的成功举办、香港回归25周年、二十大胜利召开、航天任务圆满成功等等都…

设计 | 分享5个好用的PPT模板网站

第一PPT 这个老牌的模板网站了&#xff0c;全站都是免费下载&#xff0c;还是不错的 但是素材质量嘛&#xff0c;免费所以不太高。 第一PPT下载https://www.1ppt.com/ 模板狗 这个是最近发现的一个网站&#xff0c;其中内容比较精美。 而且不用开会员也能单独购买&#x…

【Android】APT

引言&#xff1a; 安卓中APT又叫Annotation Processing Tool&#xff0c;即注解处理器。Java中注解分为编译时注解和运行时注解&#xff0c;编译时注解无法通过反射的方式进行获取和处理&#xff0c;所以我们可以利用APT处理编译时注解。比如常见的三方库ButterKnife、ARouter…