YOLOv9(3):YOLOv9损失(Loss)计算

1. 写在前面

YOLOv9的Loss计算与YOLOv8如出一辙,仅存在略微的差异。多说一句,数据的预处理和导入方式都是一样的。因此如果你已经对YOLOv8了解的比较透彻,那么对于YOLOv9你也只是需要多关注网络结构就可以。

YOLOv9本身也是Anchor-Free的,同样采用了解耦头。因此其损失计算的关键同样在于“对齐”,即通过TAL方法实现Ground Truth与Pred grid中的Cell进行对齐,然后计算Loss。

2. TAL

当前,基于CNN的目标检测算法基本都是在网络的后期阶段从特征图(Feature Map)中利用检测头进行分类和回归。YOLO系列也都遵循这个法则。

不同于早期的YOLOv3、TOLOv5等网络,YOLOX、YOLOv8以及本篇YOLOv9均采用了解耦检测头(Decoupled-Head),即将分类和回归视作两个独立的分支。

对Decoupled-Head类型的算法基本都有这么一种观念,就是不同任务间,用于分类和定位的Anchor(或乘坐Cell,指分类和回归前的特征图中的一个单元)往往不一致,需要经过对齐操作。所谓对齐,简单来看就是计算Loss时,将分类与回归所使用的预测Cell进行统一化。

TAL(Task Align Learning),最早出现在论文Task-aligned One-stage Object Detection中。改论文提供一种思想,即通过构建一种“对齐度量”,来统一分类和回归的Anchor,进而实现最终在推理时,获得一个更高得分的分类框以及更准确的定位框系数。

更通俗地讲,TAL就是给Feature Map中的每一个Cell(或称作Anchor)分配Ground Truth框。在这种前提下,有的Cell能够分配到Ground Truth框,有的Cell分配不到GT框。根据Feature Map与GT的分配情况,构建用于Loss计算的target_labels、target_bboxes和target_scores。

TAL的关键是构建一个对齐度量Align Metric,对齐度量的计算包含两个部分,首先是构建每个GT对应每个Cell的分类得分矩阵(张量)s,然后构建GT框与预测框的两两IOU(CIOU)u。之后通过如下计算,获得对应的对齐矩阵(Tensor),是为Align Metric。

Align Metric = s^{^{\alpha }}*u^{\beta }

其中s的获得依赖于预测的分类置信度信息,IOU信息依赖于GT与预测边框信息。二者结合,获得对齐度量矩阵。

3. 选取Cell

从早期的YOLO系列我们可知,并不是Feature Map上所有的Cell都参与计算Loss,因此选取哪些Cell参与计算也是关键的一环。

YOLOv9中,选取的是中心点落在GT框内的Cell参与Loss的计算。如下如所示,所有中心点位于GT框(蓝色)区域内的Cell(黄色标注)均参与计算Loss。

4. topK及二次筛选

标记与某个GT相匹配的Cell,获得shape(bs, n_max_boxes, num_total_anchors)的Tensor,标记的是用于预测某一个GT的Cell。如果某一个Cell参与预测某一个GT,那么该Cell的位置上被置1,否则置0。

需要注意的是,一个Cell只能用于预测一个GT。

官方代码工程中的select_topk_candidates函数即是完成这个任务。

之后经过IOU最大筛选后,会获得每一个Cell所匹配的GT情况。

5. 部分源代码解读

源代码中,比较难理解的就是TAL中计算对齐度量的部分,即如何获得表征GT与Pred之间的对齐关系Align Metric。

(1)get_box_metrics

该函数式TAL的关键,通过该函数我们将获得两个用于对齐的关系矩阵(Tensor),分别是align_metric和overlaps。前者表示每一个GT与每一个Cell(对应网络输出的Feature Map)的匹配得分,overlaps则时GT与Cell的IOU(CIOU)。

我们通过如下计算方式获得align_metric。

align_metric = bbox.scores^{\alpha } * overlaps^{\beta}

这里的align_metric是一个对于预测的边界框和真实边界框进行对齐评估的度量。

这里:

bbox_scores代表边界框的得分,通常反映了模型对于其包含目标的置信度。

overlaps代表预测边界框与真实边界框之间的重叠度,常用IoU(Intersection over Union)来衡量。

self.alpha和self.beta是控制bbox_scores和overlaps在对齐度量中权重的超参数。

通过将边界框得分和重叠度的权重组合,align_metric提供了一个综合指标,用于评估预测边界框的质量。具体来说:

当alpha较大时,模型更重视边界框得分,即模型对自身预测的置信度。

当beta较大时,模型更重视与真实边界框的重叠度,即预测的准确性。

(2)select_candidates_in_gts

收集和标记那些中心点位于GT内的Cell。

我们需要知道,YOLOv9和YOLOv8类似,网络推导出来的是预测框的左上和右下相对于Cell中心点的距离(这一点与YOLOv3、YOLOv5不同)。

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

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

相关文章

编译esp32s3的ncnn,并运行mnist 手写数字识别

东哥科技,专注科技研发,wx交流:dg_i688 我的项目代码 https://github.com/cdmstrong/ncnn_on_esp32s3 下载ncnn git clone https://github.com/Tencent/ncnn.git安装idf 环境 这里直接按官网的可执行文件来就好了,直接安装完…

[mysql必备面试题]-mysql索引(B+ Tree )

一 B Tree 原理 1. 数据结构 B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。 B Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针…

【python中处理日期和时间二】扩展内容datetime模块-pytz模块-dateutil模块

扩展内容:日期和时间 datetime模块;pytz模块;dateutil模块 一、 datetime模块 查看datetime模块函数: >>> import datetime >>> dir(datetime) [MAXYEAR, MINYEAR, UTC, __all__, __builtins__, __cached__…

2024最新国内外低代码平台大全

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

PTA L1-079 天梯赛的善良(C++)

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。 于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的&…

在C#中使用NModbus4通信库执行读操作

Modbus是一种工业领域内广泛使用的通信协议,它是一种基于主从结构的串行通信协议。NModbus4是一个开源的Modbus通信库,用于.NET平台,可以方便地在C#中执行Modbus操作。本文将介绍如何使用NModbus4通信库在C#中执行读操作,包括安装…

Linux下非阻塞IO实验一

一. 简介 前面文章学习了 Linux内核提供的针对应用程序阻塞与非阻塞访问设备的处理方法。文章地址如下: Linux内核中处理非阻塞访问的方法:轮询-CSDN博客 Linux内核中轮询对应于应用层的函数之一:poll函数-CSDN博客 Linux内核中轮询对应…

Python常用新特性记录

Python常用新特性记录 Python3.8PEP 572 :赋值表达式f-字符串支持 用于自动记录表达式和调试文档 Python3.9PEP 584:字典合并与更新运算符PEP 616:新增用于移除前缀和后缀的字符串方法PEP 585:标准多项集中的类型标注泛型 Python…

python面向对象的三大特性:封装,继承,多态

1、面向对象有哪些特性 三种:封装性、继承性、多态性 2、Python中的封装 在Python代码中,封装有两层含义: ① 把现实世界中的主体中的属性和方法书写到类的里面的操作即为封装 ② 封装可以为属性和方法添加为私有权限,不能直…

Midjourney新功能:角色参照指南

基本概念 角色参照(Character Reference):这个功能允许用户在不同的图像生成中保持给定参照角色的一致性。适用模型:适用于Midjourney V6和Niji6型号。 功能亮点 跨风格一致性:可以在不同风格(如动漫风、…

数据泄露态势(2024年2月)

监控说明:以下数据由零零信安0.zone安全开源情报系统提供,该系统监控范围包括约10万个明网、深网、暗网、匿名社交社群威胁源。在进行抽样事件分析时,涉及到我国的数据不会选取任何政府、安全与公共事务的事件进行分析。如遇到影响较大的伪造…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

摘要:开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法,并分享了完整的实现代码。系统采用了强大的YOLOv8算法,并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较,…

Windows主机多网卡访问内外网

1:在实际生产环境有可能需要某台机器既能访问公司的内部网络也要能够访问外网。 2:首先机器要有两块网卡根据实际情况分别设置内外网的IP地址,掩码,网关,DNS等信息。设置完成时会出现下面的提示。 3:打开命…

空间计算综合指南

空间计算(spatial computing)是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实(AR)和虚拟现实(VR)。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码 [AllowAnonymous] public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode) { 返回excel。 string ReportName "ExcelTemplete" DateTime.Now.Ticks.ToString(); …

漏洞复现-红帆OA系列

漏洞复现-红帆OA GetWorkUnit.asmx存在SQL注入iOffice ioDesktopData存在SQL注入list接口存在SQL注入漏洞ioffice wssrtfile sql注入任意⽤户登录(2个)后台多处⽂件上传(7个)后台密码修改(1个)⽂件读取(2个)SQL注⼊(15个)红帆OA任意文件上传漏洞红帆HF Office系统SQL…

QComboBox相关的qss学习

QT有关QCobobox控件的样式设置(圆角、下拉框,向上展开、可编辑、内部布局等)_qcombobox样式-CSDN博客 原始图: 红色边框: QComboBox{ border:2px solid rgb(255, 85, 0); } 绿色背景: QComboBox{ border…

备战蓝桥杯Day27 - 省赛真题-2023

题目描述 大佬代码 import os import sysdef find(n):k 0for num in range(12345678,98765433):str1 ["2","0","2","3"]for x in str(num) :if x in str1:if str1[0] x:str1.pop(0)if len(str1) ! 0:k1print(k)print(85959030) 详…

火山翻译相关介绍

官网:火山翻译 - 在线翻译 (volcengine.com) 火山翻译当前支持文本翻译、语音翻译、图像翻译、视频翻译和直播翻译 火山引擎机器翻译文本翻译的API接口的QPS限制为10,图片翻译的API接口的限制为10 语言支持 语言支持--机器翻译-火山引擎 (volcengine…

C语言指针与数组(不适合初学者版):一篇文章带你深入了解指针与数组!

🎈个人主页:JAMES别扣了 💕在校大学生一枚。对IT有着极其浓厚的兴趣 ✨系列专栏目前为C语言初阶、后续会更新c语言的学习方法以及c题目分享. 😍希望我的文章对大家有着不一样的帮助,欢迎大家关注我,我也会回…