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不同)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

密码CTF

一、[SWPUCTF 2021 新生赛]crypto8——unencode编码 1.题目 73E-30U1&>V-H965S95]I<U]P;WE<GT 特征&#xff1a;有-&#xff0c;是uuencode编码&#xff0c;使用python脚本或者在线网站 二、[AFCTF 2018]Vigenre——维吉尼亚密码 1.题目&#xff1a; 给了一个…

vue使用elementPlus ui框架,如何给Dialog 对话框添加Loading 自定义类名显示隐藏

vue使用elementPlus ui框架时&#xff0c;如何给Dialog 对话框添加Loading 自定义类名&#xff0c;想要实现dialog对话框区域有loading效果 官方给出的这个API配置项customClass&#xff0c;使用不太明确。暂时无法实现绑定class。 最后的实现方式&#xff1a; <template&…

产品之美8| 壁纸中的图案随着用户行为变化

上一篇写了壁纸中的图案随着时间和季节变化&#xff0c;留下一个问题&#xff0c;如果壁纸随用户行为该怎样变化&#xff1f; 这一篇就是折叠手机中的壁纸&#xff0c;其中图案随着用户打开手机而动态变化。具体见图&#xff1a; 随着折叠手机的打开&#xff0c;壁纸中的小鱼进…

深度强化学习01

Random variable Probability Density Function 学习视频 这绝对是我看过最好的深度强化学习&#xff01;从入门到实战&#xff0c;7小时内干货不断&#xff01;_哔哩哔哩_bilibili

Java多线程实战-基于注解和AOP切面的异步操作日志记录解决方案

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

K8S日志收集方案-EFK部署

EFK架构工作流程 部署说明 ECK (Elastic Cloud on Kubernetes)&#xff1a;2.7 Kubernetes&#xff1a;1.23.0 文件准备 crds.yaml 下载地址&#xff1a;https://download.elastic.co/downloads/eck/2.7.0/crds.yaml operator.yaml 下载地址&#xff1a;https://download.e…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:FormLink)

提供静态卡片交互组件&#xff0c;用于静态卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件仅可…

Spring Cloud Alibaba微服务从入门到进阶(六)(声明式HTTP客户端-Feign)

Feign是Netflix开源的声明式HTTP客户端&#xff08;只要声明一个接口&#xff0c;Feign就会通过你定义的接口自动给你构造请求的目标地址&#xff0c;并帮助你请求&#xff09; 用Feign重构前面RestTemplate方式的服务间调用 想回顾一下RestTemplate调用 加依赖 项目集成Feig…

3. ElasticSearch搜索技术深入与聚合查询实战

1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 1.2 …

米桃安全漏洞讲堂系列第4期:WebShell木马专题

一、WebShell概述 WebShell是黑客经常使用的一种恶意脚本也称为木马后门。其目的是获得对服务器的执行操作权限&#xff0c;比如执行系统命令、窃取用户文件、访问数据库、删改web页面等&#xff0c;其危害不言而喻。 黑客利用常见的漏洞&#xff0c;如文件上传、SQL注入、远程…

PMP和软考,考哪一个?

PMP跟软考有部分知识点是重合的&#xff0c;软考高项比较适用于计算机 IT 行业&#xff0c;而 PMP 不受行业限制&#xff0c;各行各业都适用&#xff0c;至于哪个更合适&#xff0c;看你想去国企还是民企&#xff0c;国企软考吃香&#xff0c;民企PMP 吃香 下面说下两者具体有什…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

腾讯春招后端一面(八股篇)

前言 前几天在网上发了腾讯面试官问的一些问题&#xff0c;好多小伙伴关注&#xff0c;今天对这些问题写个具体答案&#xff0c;博主好久没看八股了&#xff0c;正好复习一下。 面试手撕了三道算法&#xff0c;这部分之后更&#xff0c;喜欢的小伙伴可以留意一下我的账号。 1…

JavaScript中的事件模型(详细案例代码)

文章目录 一、事件与事件流二、事件模型原始事件模型特性 标准事件模型特性 IE事件模型 一、事件与事件流 javascript中的事件&#xff0c;可以理解就是在HTML文档或者浏览器中发生的一种交互操作&#xff0c;使得网页具备互动性&#xff0c; 常见的有加载事件、鼠标事件、自定…

详解命令docker run -d --name container_name -e TZ=Asia/Shanghai your_image

docker run 是Docker的主要命令&#xff0c;用于从镜像启动一个新的容器。下面详细解释并举例说明 -d, --name, -e TZ 参数的用法&#xff1a; -d 或 --detach&#xff1a; 这个标志告诉Docker以守护进程&#xff08;后台&#xff09;模式运行容器。这意味着当你执行 docker ru…

JavaScript进阶:js的一些学习笔记-this指向,call,apply,bind,防抖,节流

文章目录 1. this指向1. 箭头函数 this的指向 2. 改变this的指向1. call()2. apply()3. bind() 3. 防抖和节流1. 防抖2. 节流 1. this指向 1. 箭头函数 this的指向 箭头函数默认帮我们绑定外层this的值&#xff0c;所以在箭头函数中this的值和外层的this是一样的箭头函数中的…

双碳目标下生态与农田系统温室气体排放模

当前全球温室气体大幅升高&#xff0c;过去170年CO2浓度上升47%&#xff0c;这种极速变化使得物种和生态系统的适应时间大大缩短&#xff0c;进而造成全球气候变暖、海平面上升、作物产量降低、人类心血管和呼吸道疾病加剧等种种危害。在此背景下&#xff0c;代表可持续发展的“…

linux ffmpeg编译

下载源码 https://ffmpeg.org/ csdn下载源码包 不想编译可以直接下载使用静态版本 https://ffmpeg.org/download.html https://johnvansickle.com/ffmpeg/ 根据cpu类型&#xff0c;下载解压后就可以直接使用了。 linux编译 安装底层依赖 yum install gcc yum isntall …

Openlayers入门教程 --- 万字长篇

也许你还不熟悉Openlayers&#xff0c;也许你是一个Openlayers小白&#xff0c;零基础没关系&#xff0c;这篇文章提供最基础的 Openlayers 教程&#xff0c;简单易学&#xff0c;贯穿整个Openlayers 知识体系。读完本文&#xff0c;您将会对 Openlayers 有一个全新的认识。 文…

FreeRTOS学习笔记

一、RTOS入门 1.RTOS介绍 RTOS全称&#xff1a;Real Time OS&#xff0c;实时操作系统。 特点&#xff1a; 分而治之&#xff1a;实现功能划分多个任务。延时函数&#xff1a;不会空等待&#xff0c;高优先级延时的时候执行低优先级&#xff0c;会让出CPU的使用权给其他任务…