PP-YOLOE 论文学习

news2024/11/17 20:32:32

1. 解决了什么问题?

单阶段目标检测器能很好地平衡速度和精度,YOLO 系列是其中的代表。YOLOX 采用了 anchor-free 范式,加入了动态标签分配以提升检测表现,在 Tesla V100 上取得了 50.1 mAP,速度是 68.9 FPS。本文提出的 PP-YOLOE 为了适配各种硬件平台,没有使用可变形卷积、Matrix NMS 等操作。如下图,PP-YOLOE 在速度和精度方面领先于 YOLOX 和 YOLOv5。
在这里插入图片描述

2. 提出了什么方法?

2.1 PP-YOLOv2

基线模型使用的是 PP-YOLOv2,

  • 主干网络是 ResNet50-vd(使用可变形卷积);
  • neck 是带 SPP 层和 DropBlock 的 PAN;
  • head 是一个轻量级的 IoU-aware head;
  • 在主干网络中使用 ReLU,而在 neck 里面替换为 mish 激活函数;
  • 对于每个 ground-truth 目标,只分配一个 anchor box;
  • 除了分类损失、回归损失及 objectness 损失,也使用了 IoU loss 和 IoU-aware loss 来提升表现。

2.2 PP-YOLOE 改进

Anchor-free

Anchor 机制会引入不少的超参数,宽高比、个数等人为设计使其对其它数据集的泛化性不好。作者参照 FCOS,在每个像素点只放置一个 anchor point,为将 ground-truths 分配到相应的特征图上,设置三个检测 heads 的上界和下界。然后计算出边框的中心点,选择最接近该中心点的像素作为正样本。参照 YOLO 系列,预测一个 4D 向量 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)完成回归。如下表,该改进能提高计算速度,但会牺牲 0.3 AP。下表中,作者在 COCO-val 上做的消融实验,使用 640 × 640 640\times 640 640×640的输入分辨率,精度是 FP32,在 Tesla-V100 上做的测试,没加后处理。
在这里插入图片描述

Backbone and Neck

SOTA 网络普遍采用了残差连接、密集连接等技术。残差连接缓解了梯度消失问题,可以看作为模型集成方法。密集连接通过多样的感受野来聚合中间特征,在目标检测任务上效果不错。CSPNet 使用 cross stage 密集连接,降低了计算量,却没有牺牲精度。该方法在 YOLOX、YOLOv5、VoVNet、TreeNet 等目标检测和实例分割任务上都有不错的表现。本文将残差连接和密集连接结合,提出了 RepResBlock,应用在主干网络和 neck 里面。

训练时,RepResBlock 结构如下图(b) 所示,推理时如下图© 所示。推理时,将 RepResBlock 重参数化为一个 RepVGG 风格的、ResNet-34 的残差模块,如下图(d) 所示。使用该 RepResBlock 构建主干网络和 neck。与 ResNet 相似,CSPRepResNet 包括一个主干和三个卷积层,后面是由 RepResBlock 组成的四个 stages。在每个 stage,cross stage partial connections 避免了 3 × 3 3\times 3 3×3卷积造成的大量的参数及计算开支。在主干网络中,作者使用了 ESE (Effective Squeeze and Extraction) 来施加通道注意力。作者使用了 RepResBlock 和 CSPRepResStage 来构建 neck,但是移除了 RepResBlock 和 ESE 层的短路连接。
在这里插入图片描述

作者使用了一个宽度乘数 α \alpha α和深度乘数 β \beta β来缩放主干网络和 neck。因此,我们可以得到一系列不同参数量和计算量的检测网络。主干网络的宽度设定范围是 [ 64 , 128 , 256 , 512 , 1024 ] \left[64,128,256,512,1024\right] [64,128,256,512,1024],深度设定范围是 [ 3 , 6 , 6 , 3 ] \left[3,6,6,3\right] [3,6,6,3]。Neck 的宽度设定范围为 [ 192 , 384 , 768 ] \left[192,384,768\right] [192,384,768],深度设定为 3。下表展示了不同模型的 α , β \alpha,\beta α,β取值。这些改进能带来 0.7 % 0.7\% 0.7% AP 的提升。
在这里插入图片描述

Task Alignment Learning

为了进一步提升准确率,作者使用了标签分配策略。YOLOX 使用 SimOTA 标签分配的策略。TOOD 使用 TAL 进一步解决了分类和定位错位的问题,包括一个动态标签分配和一个任务对齐损失。动态标签分配的意思就是随着检测结果和损失而变化。根据预测结果,它为每个 ground-truth 动态分配若干个 positive anchors。通过对齐这俩任务,TAL 取得了最高的分类得分和最准确的边框。

对于任务对齐损失,TOOD 使用了归一化的 t t t,即 t ^ \hat{t} t^代替损失中的目标值。归一化:对于每个实例, t ^ \hat{t} t^的最大值等于各 anchor 的 IoU 的最大值。分类损失使用了 BCE:
L c l s − p o s = ∑ i = 1 N p o s B C E ( p i , t ^ i ) L_{cls-pos}=\sum_{i=1}^{N_{pos}}BCE(p_i,\hat{t}_i) Lclspos=i=1NposBCE(pi,t^i)

作者研究了不同标签分配策略的表现,使用的模型就是上述优化后的模型,主干网络是 CSPRepResNet。在 COCO train2017 上训练了 36 个 epochs,在 COCO val 上验证。如下表,TAL 的表现最好。
在这里插入图片描述

Efficient Task-aligned Head

在目标检测中,分类和定位任务之间会有冲突。YOLOX 将 head 进行了解耦,以提升准确率。但是解耦后的 head 可能造成分类和定位任务相互独立,缺乏具体任务的学习。于是作者参照 TOOD 改进了 head,提出了 ET-head。如下图,作者使用 ESE 替换了 TOOD 的层注意力,将分类分支的对齐简化为短路连接,将回归分支的对齐替换为 DFL 层。通过这些变化,ET-head 在 V100 上提速了 0.9ms。
在这里插入图片描述

对于分类和定位任务,作者分别选用了 Varifocal Loss 和 DFL。Varifocal Loss 与 QFL 不同,它使用目标得分加权正样本的损失,这样 IoU 高的正样本对损失的贡献就更大,在训练时模型就更能关注于高质量样本。Varifocal Loss 和 QFL 都使用了 IACS 作为目标来训练,IACS 是分类得分和定位质量预测的联合表征,从而在训练和推理时都能保持一致。

对于 DFL,为了解决边框表征不灵活的问题,GFLv1 提出了使用 general distribution 预测边框。本文使用的损失函数如下:
L o s s = α ⋅ l o s s V F L + β ⋅ l o s s G I o U + γ ⋅ l o s s D F L ∑ i N p o s t ^ Loss=\frac{\alpha\cdot loss_{VFL}+\beta\cdot loss_{GIoU}+\gamma\cdot loss_{DFL}}{\sum_i^{N_{pos}}\hat{t}} Loss=iNpost^αlossVFL+βlossGIoU+γlossDFL

其中 t ^ \hat{t} t^是归一化的目标得分,如下表所示,ET-head 能提升约 0.5 % 0.5\% 0.5%AP。

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

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

相关文章

了解uuid

目录 一.认识 UUID 二.UUID 会耗尽吗 三.UUID 会重复吗 四.UUID 的版本 五.UUID的应用 六.java 如何生成UUID 一.认识 UUID uuid是经过特定的算法得到的. UUID 是 16 字节 128 位长的数字,通常以 36 字节的字符串表示,示例如下: 3F2…

大模型,开源干不掉闭源

开源大模型对闭源大模型的冲击,变得非常猛烈。 今年3月,Meta发布了Llama(羊驼),很快成为AI社区内最强大的开源大模型,也是许多模型的基座模型。有人戏称,当前的大模型集群,就是一堆各…

c++一级 输入三个数,按照从小到大的顺序输出

这个题是2022年9月份c一级的真题&#xff0c;它说难不难&#xff0c;说不难也难&#xff0c;评判标准主要看学生学到哪种程度以及 使用的是哪种方法。 首先来看用最基础的判断怎么做&#xff1a; #include<iostream> using namespace std; int main(){int a,b,c;cin>…

macOS Ventura 13.5 (22G74) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.5 (22G74) 正式版发布&#xff0c;ISO、IPSW、PKG 下载 本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也…

Cesium态势标绘专题-正三角形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Cesium态势标绘专题-弓形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

opencv-17 脸部打码及解码

使用掩模和按位运算方式实现的对脸部打码、解码实例 代码如下&#xff1a; import cv2 import numpy as np #读取原始载体图像 lenacv2.imread("lena.png",0) #读取原始载体图像的 shape 值 r,clena.shape masknp.zeros((r,c),dtypenp.uint8) mask[220:400,250:350…

UE虚幻引擎教程_生成云平台指定路径下的exe文件

市面上大量优秀的游戏都是基于UE制作的&#xff0c;UE虚幻引擎制作的作品可以在windows、mac、linux以及ps4、x-boxone、ios、android甚至是html5等平台上运行。本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE。 一、云平台会运行打包文件夹下指定路径的EXE文件 但有时候…

spring6——概述

文章目录 概述Spring 是什么&#xff1f;Spring 的狭义与广义Spring Framework特点Spring模块组成 概述 Spring 是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 J…

数据可视化(2)

1.柱状图 #柱状图 #bar(x,height,width,*,aligncenter,**kwargs) #height柱子的高度&#xff0c;即y轴上的数据 #width数组的宽度&#xff0c;默认值0.8 #*表示后面的参数为匿名关键字&#xff0c;必须传入参数 #kwargs关键字参数x[1,2,3,4,5] height[random.randint(10,100)f…

智融SW3518S降压协议IC一款适合车充控制芯片

描述 SW3518S 是一款高集成度的多快充协议双口充电芯片&#xff0c; 支持 AC 口任意口快充输出&#xff0c; 支持双口独立限流。 其集成了 5A 高效率同步降压变换器&#xff0c; 支持 PPS/PD/QC/AFC/FCP/SCP/PE/SFCP/VOOC等多种快充协议&#xff0c; 最大输出 PD 100W&#xff…

在 vue3 中使用 ScrollReveal

文章目录 什么是 ScrollReveal安装使用介绍 什么是 ScrollReveal ScrollReveal 官网链接&#xff1a;https://scrollrevealjs.org/ ScrollReveal 是一个 JavaScript 库&#xff0c;用于在元素进入/离开视口时轻松实现动画效果。 先看个入门示例&#xff1a; ScrollReveal …

mac brew安装 node 踩坑日记- n切换node不生效

最近用了一个旧电脑开发&#xff0c;发现里面node管理混乱&#xff0c;有nvm、n和homebrew&#xff0c;导致切换node 切换不了&#xff0c;开发也有莫名其妙的错误。所以我打算重新装一下node&#xff0c;使用n做为管理工具。 1. 删除nvm cd ~ rm -rf .nvm2. 删除n sudo rm -…

HarmonyOS/OpenHarmony元服务开发-创建一个ArkTS卡片

在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 1.创建卡片。 2.根据实际业务场景&#xff0c;选择一个卡片模板。 3.在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单击“Finish”&…

【RS】基于规则的面向对象分类

ENVI使用最多的工具就是分类&#xff0c;这也是很多卫星影像的用途。在ENVI中有很多分类工具&#xff0c;如最基础的监督分类&#xff08;最大似然法、最小距离、支持向量机、随机森林&#xff09;、非监督分类&#xff08;K-means、IsoData&#xff09;&#xff0c;还有面向对…

sqlserver 复制数据库数据

sqlserver 建立索引 alter table [dbo].[SYS_MQTT_MESSAGE_LOG_1] add constraint pk0230725 primary key (smml_id) 主键 建聚集索引 其他的字段要和排序字段一起建索引

家政服务小程序制作攻略揭秘

想要打造一个家政服务小程序&#xff0c;但是又不懂编程和设计&#xff1f;不用担心&#xff01;下面将为你详细介绍如何利用第三方平台&#xff0c;从零开始打造一个家政服务小程序。 首先&#xff0c;你需要找到一个适合的第三方平台&#xff0c;例如乔拓云网。在乔拓云网的【…

2023年Q2京东小家电市场数据分析(京东数据运营)

伴随人们对生活品质追求的提高&#xff0c;以及拥有新兴消费理念的年轻人逐渐成为消费主力&#xff0c;功能新潮、外观精致的小家电经常在电商平台销售榜单里“榜上有名”。本期我们便一起来分析Q2京东小家电市场中&#xff0c;一些较为热门的精致生活小电的行业大盘变动情况。…

stm32 IIC通信

文章目录 IIC 通信一、硬件电路二、IIC时序基本单元三、IIC时序1.指定地址写2.当前地址读3.指定地址读 IIC 通信 IIC总线是一种通用数据总线&#xff0c;有两根通信线&#xff08;SCL(串行时钟总线),SDA&#xff08;串行数据总线&#xff09;&#xff09;。 特点&#xff1a;同…

学生管理系统-04VueX

一、本章目标 vuex的简介【重点】 掌握vuex的基本使用 掌握辅助函数来操作vuex 掌握vuex的模块化【难点】 掌握vuex的持久化 完成Tabs选项卡的二次封装 vuex的使用 封装组件 组件内路由守卫 二、vuex的简介 1、回顾组件之间的通讯 父组件向子组件通讯&#xff1a;通…