引用量超1400的经典语义分割方法BiSeNet解读

news2024/11/14 21:35:56

今天给大家分享语义分割领域非常经典的一篇论文:BiSeNet,该论文发表在了ECCV2018上,引用量超过1400。

开源代码地址:https://github.com/ycszen/TorchSeg

1.动机

语义分割任务,即为图片的每个像素分配一个标签,是计算机视觉中的一个重要任务,被广泛应用于增强现实、自动驾驶、视频监控等领域,这些领域通常需要算法具有很强的实时性。
为了满足实时性需求,通常使用以下方法提高语义分割算法运行速度:
(1)使用比较小的图片作为网络输入;
(2)使用比较小的网络。
这些方法都会使得算法的性能明显下降。作者提出了Bilateral Segmentation Network(简称BiSeNet)来兼顾运行速度和网络性能。

2.BiSeNet基本结构

BiSeNet主要分为2部分:

  • Spatial Path(SP):保留丰富的空间特征。
  • Context Path(CP):增加感受野,提取全局特征。

BiSeNet的总体结构如下图所示:

图1

图1

2.1 Spatial Path

Spatial Path的目的是提取图片的空间特征,保留更多的细节信息。Spatial Path包含3层,每层的结构都是Conv(stride=2)+BN+ReLU。因此,Spatial Path的输出feature map的尺寸是网络输入图片尺寸的1/8。
相比于Context Path,Spatial Path能够输出尺寸比较大的feature map,因此能保留更丰富的空间细节信息。

2.2 Context Path

Context Path能够提供比较大的感受野,因此能提取全局信息。Context Path包含1个Xception39以及global average pooling(全局平均池化)。
根据图1可以看到,在Context Path中,还有2个ARM(全称为Attention Refinement Module)模块。ARM模块的具体结构如下图所示:

图2

图2

在ARM内部,有1个global pool操作用于提取全局特征,global pool以及后续的卷积、BN、sigmoid会生成1个attention vector(注意力向量),用于精炼输出特征。从图2中可以看出,ARM的结构比较小,因此使用ARM不会引入太大的计算负担。

2.3 使用FFM融合Spatial Path和Context Path的输出

在融合Spatial Path和Context Path的输出特征时,直接将2个特征相加不是一个很好的方法,因为两者的特征层次不一致:Sptaial Path的输出有很多空间细节信息,特征层次较低;Context Path的输出主要是全局特征,特征层次较高。
为了融合这2个feature map,作者设计了Feature Fusion Module(简称FFM),FFM的结构如下图所示:

图3

图3

从上图中可以看出,FFM先对Spatial Path和Context Path的输出特征进行concat操作,然后使用Conv+BN+ReLU对特征进行平滑。作者借鉴SENet的思路,紧接着使用了global pool以及后面的一系列操作,计算vector,用于特征选择和融合。

2.4 BiSeNet的优势

BiSeNet有较小的计算量 尽管Spatial Path中的feature map尺寸较大,但是它只有3个卷积层,因此计算量较小;而Context Path使用的是轻量级的Xception结构,且feature map尺寸较小,也不会引入较大的计算量。
BiSeNet有较好的性能 Spatial Path提取空间信息,Context Path提取全局信息,两个结构特性互补,因此BiSeNet有较好的性能。

3.损失函数

在训练BiSeNet时,作者使用了2个辅助损失函数去监督Context Path的输出,使用主损失函数监督整个BiSeNet的输出。
这3个损失函数都是交叉熵损失,公式如下:

l o s s = 1 N ∑ i L i = 1 N ∑ i − log ⁡ ( e p i ∑ j e p j ) l o s s=\frac{1}{N} \sum_i L_i=\frac{1}{N} \sum_i-\log \left(\frac{e^{p_i}}{\sum_j e^{p_j}}\right) loss=N1iLi=N1ilog(jepjepi)

使用参数 α \alpha α平衡主损失和辅助损失,总损失函数如下:

L ( X ; W ) = l p ( X ; W ) + α ∑ i = 2 K l i ( X i ; W ) L(X ; W)=l_p(X ; W)+\alpha \sum_{i=2}^K l_i\left(X_i ; W\right) L(X;W)=lp(X;W)+αi=2Kli(Xi;W)

上式中, l p l_p lp是主损失, X X X表示BiSeNet的输出结果; l i l_i li是辅助损失, X i X_i Xi是Xception结构的中间特征,这里取 K = 3 K=3 K=3 L L L是总损失。

4.实验结果

4.1 训练

如图1所示,BiSeNet的最终输出的尺寸是输入图片的1/8。

超参数设置 使用SGD优化器,batch size设置为16,momentum为0.9,weight decay为 1 e − 4 1e^{-4} 1e4,初始学习率为 2.5 e − 2 2.5e^{-2} 2.5e2。使用poly学习率衰减策略,每次迭代的学习率是初始学习率乘以 ( 1 −  iter   max_iter  ) power  \left(1-\frac{\text { iter }}{\text { max\_iter }}\right)^{\text {power }} (1 max_iter  iter )power ,power的值为0.9。

数据增强 在训练时使用了随机翻转、随机缩放和随机裁剪,裁剪的结果是固定尺寸图片,将其输入网络用于训练。

4.2 结果

在Cityscapes数据集上的一些可视化的结果如下图所示,图中的(b)、(c)、(d)分别表示在Context Path中使用ResNet18、Xception39和ResNet101这3种结构。

图4

图4

BiSeNet与其他网络的速度、精度比较分别如下面2个图所示:

图5

图5

图6

图6

关于实验设置细节、消融实验的详细内容,请参考原文。

如果你对计算机视觉领域的目标检测、跟踪、分割、轻量化神经网络、Transformer、3D视觉感兴趣,欢迎关注公众号一起学习交流~
在这里插入图片描述
欢迎关注我的个人主页,这里沉淀了计算机视觉多个领域的知识:https://www.yuque.com/cv_51

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

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

相关文章

嵌入式 程序调试之gdb+gdbserver+vscode可视化调试

嵌入式 程序调试之gdbgdbservervscode可视化调试 一、简述 记--使用过visual studio的都知道,它的单步调试真的好用,可以直接在源码下断点,实时查看内存变量、寄存器等相关信息。嵌入式linux开发多用的是gdb, 都是命令行执行的,毕…

python特殊数据类型应用(1)字典类型

目录python中特殊数据类型应用(1)字典类型字典类型定义字典类型注意事项字典类型的访问python中特殊数据类型应用(1)字典类型 python作为最流行的几种开发语言之一,在数据类型上和传统的c、c和java等有很大的不同&…

Typora使用方法

自用,有错误请谅解 tpora破解版使用学习使用: 链接:https://pan.baidu.com/s/1Wj46k3iVIzr-7kwQstp9nQ 提取码:2sa8 来源教程网址:Typora一款 Markdown 编辑器和阅读器 记得更改图片位置,以后就是相对路径…

babel及其使用

什么是Babel? Babel 是一个工具链,由大量的工具包组成,接下来我们逐步了解。主要用于将 ECMAScript 2015 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。 核心库 babel/core B…

‘this’不能用于常量表达式错误(C++)【问题解决】

目录 一、报错问题 1、代码 test.h test.cpp 2、问题描述 二、网上解决思路 三、解决方案 【元旦快乐🌹,新年快乐🎉】 最近在编译程序时出现了“ ‘this’不能用于常量表达式错误(C )”的报错问题,查阅多位博主写的文章后&…

mysql 性能优化

mysql 调优可以从这个四个方面来看 1.性能监控 1.1 show profile for query n 查看具体的sql语句各阶段执行时间 show profiles; show profile for query n; 1.2 performance schema 监控mysql 整个服务器中发生的各种事件。 performance schema 表中的数据不会持久化的磁…

一文搞定垃圾回收的三色标记法

我们之前介绍了各种常见垃圾回收器的基本原理,本小节我们讨论一个更深入的问题——垃圾回收器的底层是如何做的。 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。…

计算机视觉(CV)领域Transformer最新论文及资源整理分享

Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。Transformer模型最早是用于机器翻译任务,当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行。并…

梯度,GD梯度下降,SGD随机梯度下降

前言 羊了,但是依旧生龙活虎。补补之前落下的SGD算法,这个在深度学习中应用广泛。 梯度(Gradient) 方向导数 在梯度之前,非常重要一个概念:方向导数,这里uuu是nnn维向量,代表一个…

EMNLP 22:Bi-Directional Iterative Prompt-Tuning for Event Argument Extraction

总结 文中的前向和后向的思想可以借鉴下。 但总的来看,似乎是通过前向和后向来做的ensemble操作,虽然是在一个模型下,但同时前向和后向概率保证,可能能够使得预测更准确。 任务形式:event argument extraction (EAE)…

Java 读取resources下的文件+读取resource文件/路径

Java 读取resources下的文件 文档来源 三种实现方式 pom.xml <!-- commons-io io的工具包 --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>…

SSM之Spring(二)

目录 2.3 基于注解管理bean 2.3.1 标记与扫描 2.3.2 基于注解的自动装配 三&#xff1a;AOP 3.1 场景模拟 3.1.1 声明接口 3.1.2 创建实现类 3.1.3 创建带日志功能的实现类 3.1.4 提出问题 3.2 代理模式 3.2.1 概念 3.2.2 静态代理 3.2.3 动态代理 3.2.4 测试 3.3 AO…

ElasticSearch笔记

ELASTICSEARCH笔记 1、安装elastic search dokcer中安装elastic search &#xff08;1&#xff09;下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2&#xff08;2&#xff09;配置 mkdir -p /mydata/elasticsearch/config 创建目…

Hex程序烧写到单片机

一、创建一个Keil代码工程 1、在电脑F盘&#xff08;哪个盘可以随意选择&#xff09;上创建项目工程文件夹Template 2、在Template文件中&#xff0c;创建一个main.c文件 3、进入keil主页面&#xff0c;工具栏project---->New uVision project---->选则第一步的工程文…

【数据结构】时间与空间复杂度

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、算法效率1.1 如何衡量一个算…

【华为上机真题 2022】太阳能板的最大面积

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

ArcGIS基础实验操作100例--实验27细分栅格

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验27 细分栅格 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff1a;使用…

oneblog博客系统 让你的博客实现图片显示的功能

背景 \ 闲来无事&#xff0c;希望捣腾捣腾计算机&#xff0c;玩一玩网络&#xff0c;自己搭一个博客系统。那么在家搭建一个自己的服务器&#xff0c;并且让别人通过你的博客系统与你交流。多么神奇的事情。 在搭建博客系统的过程中&#xff0c;你需要在后台写好文章。但是在上…

网赚不要当苦力,流量变现才是王道

事实上&#xff0c;大多数互联网从业者脑子里只想到一件事。无脑搬砖一个月挣一万多元。不可否认&#xff0c;有这样的副业&#xff0c;但也需要前提条件。你需要在早期阶段努力工作&#xff0c;然后才能分批赚钱。这是两个概念&#xff0c;一开始就听话。 我从来不建议你做那…

leetcode 155. 最小栈-java题解

题目所属分类 辅助栈 或者一个栈 原题链接 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部…