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天精通鸿蒙》 …

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

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

数据泄露态势(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…

漏洞复现-红帆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) 详…

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

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

大模型笔记:吴恩达 ChatGPT Prompt Engineering for Developers(1) prompt的基本原则和策略

1 intro 基础大模型 VS 用指令tune 过的大模型 基础大模型 只会对prompt的文本进行续写 所以当你向模型发问的时候,它往往会像复读机一样续写几个问题这是因为在它见过的语料库文本(通常大多来自互联网)中,通常会连续列举出N个问…

linux_aarch64_qt环境搭建

平台环境: ubuntu 16.04: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) aarch64 gnu gcc版本: gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz Qt交叉编译版本: qt-everywhere-src-5.12.9.tar.xz 一、aarch64编…

BMW配送流程:通过EDI对接VDLP

BMW的汽车配送流程始于汽车“生产结束”,结束于“交付给宝马经销商”。BMW与其物流服务供应商之间没有直接的接口,EDI信息将会通过BMW的EDI供应商提供的VDLP(车辆分销物流平台)进行交换。 近期我们收到来自国内某汽车行业供应商L公…

ISIS多区域实验简述

为支持大型路由网络,IS-IS在路由域内采用两级分层结构。 IS-IS网络中三种级别的路由设备:将Level-1路由设备部署在区域内,Level-2路由设备部署在区域间,Level-1-2路由设备部署在Level-1和Level-2路由设备的中间。 实验拓扑图&…

Linux字符设备与I2C驱动结合使用

引言 在Linux操作系统中,设备驱动程序充当硬件和软件之间的桥梁。字符设备驱动是一种特殊类型的驱动,它允许用户以字节流的形式访问硬件设备。这些设备包括键盘、鼠标、串口等。在本博客中,我们将探讨Linux字符设备驱动的基础知识&#xff0…

LeetCode每日一题 将有序数组转换为二叉搜索树(分治)

题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视…

49、C++/友元、常成员函数和常对象、运算符重载学习20240314

一、封装类 用其成员函数实现&#xff08;对该类的&#xff09;数学运算符的重载&#xff08;加法&#xff09;&#xff0c;并封装一个全局函数实现&#xff08;对该类的&#xff09;数学运算符的重载&#xff08;减法&#xff09;。 代码&#xff1a; #include <iostream…