YOLOv9改进策略:IoU优化 | Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU

本文主要是介绍YOLOv9改进策略:IoU优化 | Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数

💡💡💡MS COCO和PASCAL VOC数据集实现涨点



YOLOv9魔术师专栏

☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️

包含注意力机制魔改、卷积魔改、检测头创新、损失&IOU优化、block优化&多层特征融合、 轻量级网络设计、24年最新顶会改进思路、原创自研paper级创新等

☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️

✨✨✨ 新开专栏暂定免费限时开放,后续每月调价一次✨✨✨

🚀🚀🚀 本项目持续更新 | 更新完结保底≥80+ ,冲刺100+ 🚀🚀🚀

🍉🍉🍉 联系WX: AI_CV_0624 欢迎交流!🍉🍉🍉

⭐⭐⭐现更新的所有改进点抢先使用私信我,目前售价68,改进点20+个⭐⭐⭐

⭐⭐⭐专栏涨价趋势 99 ->199->259->299,越早订阅越划算⭐⭐⭐

YOLOv9魔改:注意力机制、检测头、blcok魔改、自研原创等

 YOLOv9魔术师

💡💡💡全网独家首发创新(原创),适合paper !!!

💡💡💡 2024年计算机视觉顶会创新点适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,轻松带你上手魔改网络 !!!

💡💡💡重点:通过本专栏的阅读,后续你也可以设计魔改网络,在网络不同位置(Backbone、head、detect、loss等)进行魔改,实现创新!!!

 1.YOLOv9原理介绍

论文: 2402.13616.pdf (arxiv.org)

代码:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information摘要: 如今的深度学习方法重点关注如何设计最合适的目标函数,从而使得模型的预测结果能够最接近真实情况。同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。然而,现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。因此,YOLOv9 深入研究了数据通过深度网络传输时数据丢失的重要问题,即信息瓶颈和可逆函数。作者提出了可编程梯度信息(programmable gradient information,PGI)的概念,来应对深度网络实现多个目标所需要的各种变化。PGI 可以为目标任务计算目标函数提供完整的输入信息,从而获得可靠的梯度信息来更新网络权值。此外,研究者基于梯度路径规划设计了一种新的轻量级网络架构,即通用高效层聚合网络(Generalized Efficient Layer Aggregation Network,GELAN)。该架构证实了 PGI 可以在轻量级模型上取得优异的结果。研究者在基于 MS COCO 数据集的目标检测任务上验证所提出的 GELAN 和 PGI。结果表明,与其他 SOTA 方法相比,GELAN 仅使用传统卷积算子即可实现更好的参数利用率。对于 PGI 而言,它的适用性很强,可用于从轻型到大型的各种模型。我们可以用它来获取完整的信息,从而使从头开始训练的模型能够比使用大型数据集预训练的 SOTA 模型获得更好的结果。对比结果如图1所示。

 YOLOv9框架图

1.1 YOLOv9框架介绍

YOLOv9各个模型介绍

2.Powerful-IoU介绍

链接:https://www.sciencedirect.com/science/article/abs/pii/S0893608023006640 

摘要:边界框回归(Bounding box regression, BBR)是目标检测中的核心任务之一,而BBR的损失函数对其性能影响很大。然而,我们观察到现有的基于iou的损失函数受到不合理的惩罚因素的影响,导致锚框在回归过程中膨胀,显著减缓了收敛速度。为了解决这个问题,我们深入分析了锚框增大的原因。为此,我们提出了一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的强效iou (PIoU)损失函数。PIoU损耗引导锚框沿着有效路径回归,从而比现有的基于iou的损耗更快地收敛。此外,我们还研究了聚焦机制,并引入了一个非单调注意层,将其与PIoU结合,得到了一个新的损失函数PIoU v2。PIoU v2损耗增强了对中等质量锚框的聚焦能力。通过将PIoU v2整合到流行的目标检测器(如YOLOv8和DINO)中,我们在MS COCO和PASCAL VOC数据集上实现了平均精度(AP)的提高和性能的改进,从而验证了我们提出的改进策略的有效性。

图1所示。基于不同iou的损失函数指导下的锚框回归过程。彩色框是在回归过程中由不同损失函数引导的锚框。很明显,以PIoU损失为导向的锚盒是最快回归到接近目标盒的。此外,除PIoU损失外,所有损失函数引导的锚盒都存在面积扩大问题,而PIoU损失引导的锚盒则不存在面积扩大问题。

图2所示。基于IoU的损失。(a)和(b)中的损失函数都使用诸如锚框和目标框的最小外部边界框(灰色虚线框)的对角线长度或面积等维度信息作为损失因子的分母。相反,(c)中的PIoU损耗仅使用目标盒的边缘长度作为损耗因子的分母。

图3所示。一个扩展锚框的例子。在左图中,锚框的中心位置为(4,4),宽度为4,高度为2。在右图中,锚框的中心位置也是(4,4),但宽度为6,高度为3。可以观察到,尽管锚盒尺寸增大,但𝑅𝐺𝐼𝑜𝑈、𝑅𝐷和𝛥减小。然而,𝑅P𝐼𝑜𝑈并没有表现出这样的行为。 

2.1 PIoU v2损失

在本节中,我们将探讨聚焦机制在我们提出的损失函数中的应用。为了解决第2.2节中提到的Focal EIoU (Zhang, Ren et al., 2022)和WIoU (Tong et al., 2023)的局限性,我们设计了一个由单个超参数控制的非单调注意函数与PIoU相结合。PIoU v2损耗在PIoU损耗上增加注意层后得到,增强了对中高质量锚盒的聚焦能力,提升了目标检测器的性能。注意函数和PIoU v2损失定义为: 

2.2 实验结果

2.Powerful-IoU加入到YOLOv9

2.1Powerful-IoU实现路径为utils/metrics.py

本部分后续开源

2.2 utils/loss_tal_dual.py

训练方法为 train_dual,因此本博客以此展开

1)首先进行注册

from utils.metrics import piou

1)修改class BboxLoss(nn.Module):


iou = bbox_iou(pred_bboxes_pos, target_bboxes_pos, xywh=False, CIoU=True)

修改为

iou = piou(pred_bboxes_pos, target_bboxes_pos, xywh=False, PIoU2=True)

⭐⭐⭐现更新的所有改进点抢先使用私信我,目前售价68,改进点20+个⭐⭐⭐

⭐⭐⭐专栏涨价趋势 99 ->199->259->299,越早订阅越划算⭐⭐⭐

这篇关于YOLOv9改进策略:IoU优化 | Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846966

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后