论文阅读《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID》

news2024/11/24 19:51:19

论文地址:https://arxiv.org/pdf/2206.02066.pdf
源码地址:https://github.com/XuJiacong/PIDNet


概述

  针对双分支模型在语义分割任务上直接融合高分辨率的细节信息与低频的上下文信息过程中细节特征会被上下文信息掩盖的问题,提出了一种新的网络架构PIDNet,该模型受启发于PID控制器并包含:空间细节分支、上下文分支与边界注意力分支。通过使用边界注意力来引导空间细节与上下文信息融合。实验结果表明该模型的精度超过了具有相似推理速度的所有模型,在Cityscapes和CamVid数据集上取得了最佳的推理速度和精确度的平衡。文章的主要贡献为:

  • 将PID控制器与CNN相结合,提出一个三分支的网络结构 。
  • 提出Bag fusion模块来权衡空间细节与上下文信息,提高了PIDNet的性能。
  • PIDNet与现有的方法相比,在推理速度与准确度之间取得了最佳的表现:在Cityscapes测试数据集上取得了78.6%的mIOU与93.2 FPS,且PIDNet-L 取得了80.6% 的mIOU的优异表现。

方法

PIDNet: A Novel Three-branch Network

在这里插入图片描述
  PID控制器包含三个部分:比例控制器P,积分控制器I,微分控制器D,如图3所示,PI控制器表达式为:
c o u t [ n ] = k p e [ n ] + k i ∑ i = 0 n e [ i ] (1) c_{out}[n] = k_pe[n]+ k_i\sum_{i=0}^ne[i]\tag{1} cout[n]=kpe[n]+kii=0ne[i](1)
其中 P 控制器关注当前的误差信号, I 控制器关注误差信号的历史累积。由于积分控制器的惯性效应,当误差信号出现相负的变化时,会给系统引入超调量。为此引入D控制器来作为阻尼器用于减少超调量,PI控制器关注于输入信号的低频信息,而对信号的高频信息不敏感,而D控制器关注于输入信号的微分,对信号的高频信息较为敏感,可以减少模型的超调量,双分支网络与之类似,如图3所示,上下文分支通过级联跨步卷积或者池化层来不断从局部到全局聚合语义信息,用于获取像素之间的长距离依赖关系,而空间细节分支保持高分辨率的特征图,用于保存每个像素的语义与位置信息。因此空间细节和上下文分支等价于空间域中的比例和积分控制器。
  为了解决上述问题,本文提出一种辅助的微分分支ADB用于对细节和上下文分支进行补充,在空域上模拟PID控制器,并突出高频语义信息,其中考虑到每个物体内部的语义是一致的,只有边界上的微分非0,所以ADB分支的目标是边界检测。因此,本文简历一种新的三分支实时语义分割框架 PIDNet,模型包含三个分支,如图4所示:

  • 比例分支:用于解析保存高分辨率特征图中的细节信息
  • 积分分支:用于聚合局部与全局之间的长程依赖关系信息——上下文信息。
  • 微分分支:用于提高高频特征以预测边界区域。
      整个模型和DDRNet保持也一直,采用级联残差块作为骨干网络以便以硬件部署。考虑到任务的复杂性,将PID分支的网络深度分别设计为中等、深、浅,以便于搞笑运行。此外,通过模型架构缩放来得到PIDNet-S,PIDNet-M,PIDNet-L。
    在这里插入图片描述

Pag: Learning High-level Semantics Selectively

  pixel attention guided fusion(Pag) 为像素级注意力引导模块,用于将比例分支与微分分支的特征融合,受益于lateral connection技术,不同分支之间的特征图可以进行传递,提高了特征的表达能力。在PIDNet中,积分分支旨在提取精确且丰富的语义信息,对于比例分支和微分分支的的细节解析与边界检测至关重要。因此,将 I 分支作为其余两个分支的补充,为两个分支引入更丰富的信息。此外,与直接将P分支直接提供特征图的方式不一样,作者为P分支引入了Pag来选择性学习任务有关的语义特征,如图5所示:
在这里插入图片描述
  Pag 是基于注意力机制的特征选择模块,将P分支与I分支提供的特征图中对应像素的特征向量分别定义为 v p ⃗ \vec{v_p} vp v i ⃗ \vec{v_i} vi ,则sigmoid函数的输出为:
σ = sigmoid ⁡ ( f p ( v p ⃗ ) ⋅ f i ( v i ⃗ ) ) (2) \sigma = \operatorname{sigmoid}(f_p(\vec{v_p})\cdot f_i (\vec{v_i}))\tag{2} σ=sigmoid(fp(vp )fi(vi ))(2)
其中, σ \sigma σ 表示这两个像素属于同一个对象的可能性,如果 σ \sigma σ 越高,表示 v i ⃗ \vec{v_i} vi 的置信度更好,因为在 I 分支在语义上是准确的,反之亦然。因此,Pag模块的输出为:
O u t p a g ⁡ = σ v i ⃗ + ( 1 − σ ) v p ⃗ (3) \operatorname{Out_{pag}}=\sigma \vec{v_i} + (1-\sigma) \vec{v_p}\tag{3} Outpag=σvi +(1σ)vp (3)

PAPPM: Fast Aggregation of Contexts

在这里插入图片描述
  为了更好地构建全局场景的先验信息,本文提出PAPPM模块用于提取多尺度的特征信息。虽然PPM(pyramid poling module)模块可以很好嵌入上下文信息,但该模块无法并行化,导致模型的计算效率受到限制。为此,本文在PPM模块的基础上进行改进,提出可以并行计算的PPM模块,称之为PAPPM(parallel aggregation PPM)模块,并将其应用于PIDNet-M和PIDNet-S中,提高模型的运行速度。对于PIDNet-L,仍然使用原始的PPM模块,但通道数进行缩减以提高运行速度。

Bag: Balancing the Details and Contexts

在这里插入图片描述
  考虑到ADB所提取的边界特征,文中使用边界注意力机制来引导空间细节信息与上下文信息的融合,实现更好地语义分割效果。尽管上下文分支具有语义精度,但它在边界区域与小物体上的几何细节信息与空间信息丢失。因此,PIDNet使用细节分支来提供空间细节信息,并监督模型在边界区域更加信息细节分支,同时利用上下文特征来填充对象的内部区域,如图7所示:P、I、D分支输出中对应像素为 v p ⃗ 、 v i ⃗ \vec{v_p}、\vec{v_i} vp vi v d ⃗ \vec{v_d} vd
σ = Sigmoid ⁡ ( v d → ) (4) \sigma=\operatorname{Sigmoid}\left(\overrightarrow{v_{d}}\right)\tag{4} σ=Sigmoid(vd )(4)
 Out  bag  = f out  ( ( 1 − σ ) ⊗ v i → + σ ⊗ v p → ) (5) \text { Out }_{\text {bag }}=f_{\text {out }}\left((1-\sigma) \otimes \overrightarrow{v_{i}}+\sigma \otimes \overrightarrow{v_{p}}\right) \tag{5}  Out bag =fout ((1σ)vi +σvp )(5)
 Out  light  = f p ( ( 1 − σ ) ⊗ v i → + v p → ) + f i ( σ ⊗ v p → + v i → ) (6) \text { Out }_{\text {light }}=f_{p}\left((1-\sigma) \otimes \overrightarrow{v_{i}}+\overrightarrow{v_{p}}\right)+f_{i}\left(\sigma \otimes \overrightarrow{v_{p}}+\overrightarrow{v_{i}}\right)\tag{6}  Out light =fp((1σ)vi +vp )+fi(σvp +vi )(6)
其中 f f f 表示卷积、BN 与ReLU的组合,当 σ > 0.5 \sigma >0.5 σ>0.5 时,模型更加依赖于细节特征,否则更加关注于上下文信息。


损失函数

  损失函数由4个部分组成,在第一个Pag模块的输出添加了语义头生成额外的语义损失 l 0 l_0 l0 用于更好地对整个模型调优。采用加权的二元交叉熵损失 l 1 l_1 l1 来代替 dice loss, 用于处理边界 检测的不平衡问题,使得模型更倾向于使用粗糙的边界来突出边界区域,并增强小对象的特征。 l 2 l_2 l2 l 3 l_3 l3 表示交叉熵损失,本文使用输出的边界头来协调语义分割和边界检测任务,并增强Bag模块的功能,在 l 3 l_3 l3 中使用带有边界感知的CE损失:
L o s s = λ 0 l 0 + λ 1 l 1 + λ 2 l 2 + λ 3 l 3 Loss=\lambda_0l_0 + \lambda_1l_1 + \lambda_2l_2 + \lambda_3l_3 Loss=λ0l0+λ1l1+λ2l2+λ3l3


实验结果

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

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

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

相关文章

【五一创作】Springboot+多环境+多数据源(MySQL+Phoenix)配置及查询(多知识点)

文章目录 1. 背景2. 技术点3 子模块依赖SpringBoot设置4. 多环境配置4.1 application.yml4.2 application-pro.yml 5. 多数据源配置5.1 yml配置5.2 自定义数据源在Java中配置5.2.1 PhoenixDataSourceConfig5.2.2 MysqlDataSourceConfig 6. 完整的Pom6. 测试6.1 Mapper配置6.2 方…

字符、块、网络设备

设备模型(的意义) 降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发&#…

Java项目上线之云服务器环境篇(四)——Redis的安装与配置

Java项目上线之云服务器环境篇(四)——Redis的安装与配置 在我们的项目里可能会用到Redis缓存,需要对Redis进行简单的配置。 1、我们的redis最好放在一个事先安装好的文件夹里,这样更方便于管理。 例如: redis我是放在…

前端开发:JS的事件循环执行机制详解

前言 在前端开发中,涉及到JS原生的使用原理是非常重要的知识点,尤其是在实际工作过程中会遇到各种复杂的业务需求场景,以及具体开发中可能会遇到一些涉及基于JS原理的使用,这都要求开发者能够很好的了解和掌握JS原生的常用原理。J…

jvm之类加载器

写在前面 当我们通过javac命令将java源代码编译为Java字节码后,必须通过类加载器将其加载到jvm中才能运行,所以类加载器是jvm中非常重要的一个组成部分,本文我们就一起来看下吧! 1:类的生命周期 类的生命周期如下图…

leetcode刷题之回文链表and最长回文子串

234.回文链表 方法一:找中间结点,断开链表,后一段链表进行反转 思路:①找中间结点:使用快慢指针fast,slow,fast每次走两个,slow每次走一个; 如果链表的个数是奇数个,那么最后slow指向中间节点 如果链表的个数是偶数个,那么最后slow指向中间两个节点的后一个 ②使用prev指针保…

文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题

八、可以扩展我们的记号到有两个参数n和m的情形,其中的n和m可以按不同速率独立地趋于无穷。对于给定的函数g(n, m),用O(g(n, m))来表示以下函数集: O(g(n, m)) { f(n, m): 存在正常量c、和,使得对所有n>n0或m>m0&#xff…

unity 性能优化之合批和剔除

批次对渲染的性能影响是比较大的,批次过多会导致cpu提交的次数过多,导致每帧渲染时间过长,所以我们需要对其优化,减少Bathches数量和SetPassCall次数。 批次合并的方法有多种,下面一一列出: 手动合批 将相…

CRM系统多少钱一套?盘点主流各大CRM系统价格

阅读本文你将了解:1.CRM定价规则;2.各大CRM系统报价(CRM系统多少钱一套);3.CRM系统费用构成。 一、CRM定价规则 很多企业都寻求使用CRM系统来管理客户关系,从而优化管理流程,提升业绩。 对于企业而言&…

1985-2021年全国31省一二三产业就业人数/各省分产业就业人数数据(无缺失)

1985-2021年全国31省一二三产业就业人数/各省分产业就业人数数据(无缺失) 1、时间:1985-2021年 2、范围:包括全国31省 3、来源:各省NJ、社会统计NJ、人口和就业NJ 4、指标包括:省第一产业就业人数、省第…

Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C#)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具…

2023年,web前端工程师20道Vue面试题及解析

本文章列出了20道关于Vue.js的面试题,包括基础和进阶问题,并提供了问题的答案及解析,以帮助读者更好地准备面试。从指令、生命周期函数到组件间通信和路由等各方面都作了涉及。 1. 什么是Vue.js?它有哪些特点? 答案&…

Git服务器集成(一)

本篇文章旨在分享本人在学习Git时的随笔记🤩 文章目录 Git 远程服务器1、下载 Git 软件(linux版本)2、安装 Git 软件2.1 解压 Git2.2 安装依赖2.3 删除旧版 Git2.4 编译、安装 Git2.5 配置环境变量2.6 建立链接文件2.7 测试安装 3、创建 Git …

使用Selenium控制Chrome浏览器 --工作自动化

使用Selenium控制Chrome浏览器 --工作自动化 背景: 最近朋友在用秒账做帐时,由于销售单量很大,重复录入工作一天一录就近五个小时,寻求帮助,问能不能把这重复劳动减少些,看后分析,使用web自动…

为网站的中文和英文使用不同的字体

CSS为网站的中文和英文使用不同的字体 前言 最近我在搭建个人网站,在这个过程中遇到很多的问题,不过chatGPT3.5帮助了很多,这是我使用的咒语: 我正在搭建一个个人网站,使用python Flask框架,CSS采用Boots…

linux网络设置与维护命令

文章目录 一、linux网络设置与维护命令总结 一、linux网络设置与维护命令 Linux ifconfig命令:配置或显示网络接口信息 Linux netstat命令:显示网络状态 Linux ip命令:执行网络管理任务 Linux ping命令:测试主机间网络连通性 Linux wall命令:发送广播 Linux finger命令:查找并…

ShardingJDBC的实核心流程和商户商家订单的分片实现

一、ShardingJDBC的核心流程 ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下: 4.1、SQL解析 分为词法解析和语法解析。 先通过词法解析器将SQL拆分为一…

基于ESP32 蓝牙游戏手柄设计

使用 ESP32 并通过 BLE 通信的 DIY 手持游戏手柄 这个项目中使用的东西 硬件组件 esp32 1 ws2812b 6 操纵杆 2 角度按钮 2 按钮 8 18560电池和电池座 2 3路拨动开关 1 TP4056带保…

【从0到1了解Libarchive】带你了解Libarchive Libarchive的用途意义以及成功入门Libarchive

目录 0 如果你还不知道Libarchive是什么请一定要先看一下 1 简介 1.1 为什么实现Libarchive 1.2 到底都有谁在用呢? 1.3 Libarchive都有哪些功能 1.4 我们可以通过这些获取更多信息 1.5 如何贡献 2 Libarchive归档与压缩 3 Libarchive编译 4 Libarchive简…

ApplicationContext 和 BeanFactory 的区别

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 ApplicationContext 和 BeanFactory 的区别 ApplicationContext 和 BeanFactory 的区别 那么这 2 种获取 Spring 上下文对象…