yolov5中的位置损失到底有哪些?

news2024/11/15 20:31:05

目录

1.IOU loss

2.GIOU

3.DIOU和CIOU

5.SIOU

6.EIOU

7.WIOU

8.MPDIOU


别人问目标检测有几个损失函数?

我答:三个。

别人笑了笑。

我问:难道我说记错了?

别人说:是的,你记错了。

我说:哦。

经常糊里糊涂的我竟然没有反驳。

今天就理一理yolov5的损失,并重点讲一下其中的位置损失。

------------------------

yolov5有三个损失函数:分类损失,位置损失,置信度损失

总体的损失为以上三者的加权相加,通过改变权值可以调整三者损失的关注度。

证据:utils/loss.py line240

其中的参数设置:

data/hyps/hyp.scratch.yml

分类损失:

通常对于分类任务,输出的标签是互斥的。yolov5中是对每一个类别预测结果使用二元交叉损失。

位置损失:

边界框预测是目标检测中最主要的任务之一,目标检测中想要框出检测到的目标,就需要通过对边界框所在位置数据的预测。

目标损失:

使用交叉熵损失作为目标损失,有效的区分背景和前景;

--------------------

对于位置损失,目前的发展顺序:

IOU -》DIOU -》CIOU -》SIOU -》EIOU -》WIOU -》MPDIOU

1.IOU loss

论文:《UnitBox: An Advanced Object Detection Network》

链接:https://arxiv.org/pdf/1608.01471.pdf

之前用的回归损失存在问题:

但该方式还存在两个问题(来自论文《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》中的观点,https://arxiv.org/pdf/1902.09630.pdf):

1.a图和b图中2图都没有重叠,但是使用l2loss无法反应出A和B之间的距离(C与D之间的距离);

2.预测框与gt框之间不能完全反映重叠度的好坏。

iou loss相比于l2 loss收敛性更好,ROC曲线指标也更好(参考:https://arxiv.org/pdf/1608.01471.pdf)

该方法存在缺陷:

1.当真实框和预测框完全不重叠时,因为其损失都为 1,则无法反映预测框离真实框的远近;

2.当真实框包含预测框,且真实框与预测框的大小固定时,其 IoU 很定为预测框与真实框面积的比值,则无论预测框在真实框中的哪个位置,损失都不变。

2.GIOU

论文: 《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》

链接:https://arxiv.org/pdf/1902.09630.pdf

其中C就是包含两个框的最小矩形外框,GIOU计算中分子表示C中除了A和B并集的剩下部分。

损失函数:

L_{giou} = 1-giou

3.DIOU和CIOU

论文:《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》

链接:https://arxiv.org/pdf/1911.08287.pdf

 作者认为好的检测回归损失应该需要考虑三个方面:预测框和GT框的重叠度、预测框和GT框的中心点距离、预测框和GT框各自的长宽比一致性。于是在iou loss的基础上提出了DIOU loss:引入了预测框和GT框中心点的距离。在DIOU loss的基础上提出了CIOU loss:引入了预测框的长宽比和GT框的长宽比。

损失函数:

 将检测框和GT框之间的中心距离加入loss可以在两框不想交的时候指引预测。解决了大框包小框时的问题:

第三种类型的图,iou中加入了中心距离后,得到的DIOU的loss最小,这是很合理的。

作者将diou加入到nms替换iou,当中心点距离近到一定范围的多数情况下表示的是同一个目标,而中心点距离过远即使二者iou超过阈值有可能是遮挡和被遮挡的两个目标。如下图:

 上图中,采用diou nms将被遮挡的目标释放出来了。

5.SIOU

论文:《SIoU Loss: More Powerful Learning for Bounding Box Regression Zhora Gevorgyan》

链接:https://arxiv.org/pdf/2205.12740.pdf

 SIOU在考虑重叠区域,距离和长宽,还考虑了2个框的角度问题。当预测框和真实框不想交时,如何加快收敛速度,作者认为真实框与预测框框之间的方向,导致收敛速度较慢,角度损失定义如下:

 Ch为真实框和预测框中心点的高度差,δ为真实框和预测框中心点的距离。

(b_{C_{_{x}}}^{gt},b_{C_{_{y}}}^{gt})为真实框中心坐标(b_{C_{_{x}}},b_{C_{_{y}}})为预测框中心坐标,可以注意到当\alpha\frac{\pi }{ 2}或0时,在训练过程中若\alpha<\frac{\pi }{4},则最小化\alpha,否则最小化\beta

距离代价(Distance cost):考虑GT框和预测框之间的距离

在计算Λ时,当两个框近乎平行的时候,Λ趋近于0,这样计算出来两框之间的角度距离接近0,此时γ的值接近2,则两框之间的距离对于整体loss贡献变少。当两个框的角度在45时,Λ趋近于1,此时γ的值接近1,则两框之间的距离应该被重视,需要占更多的loss。

形状代价(Shape cost):考虑两个框之间的长宽比,是通过计算两框之间的宽只差和两个框之间最大宽之比来定义的。

重叠区域考虑:重叠区域考虑其实就是普通的IOU。

最后的整体loss公式:

6.EIOU

论文:《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》

链接:https://arxiv.org/pdf/2101.08158.pdf

作者认为ciou loss对于长宽比的加入loss的设计不太合理,于是将ciou loss中反应长宽比一致性的部分替换成了分别对于长和宽的一致性loss,形成了eiou loss;其次,大多数损失函数忽略了正负样本不平衡的问题,即大量与目标框重叠面积较小的预测框在最终的 bbox 优化中占用了绝大部分的贡献。

公式定义:

其中,Wc和hc是预测边界框与真实框的最小外接矩形的宽度和高度,p是两点之间的欧氏距离。

7.WIOU

论文:《Wise-IoU: Bounding Box Regression Loss with Dynamic Focusing Mechanism》 论文链接:https://arxiv.org/pdf/2301.10051.pdf

使用IOU损失的时候,当边界框没有重叠的时候,反向传播的梯度消失了。本文就是解决这个问题。

 作者考虑使用构造了惩罚项Ri来解决这个问题。加入惩罚项的公式:

DIOU将惩罚项定义为中心点连接的归一化长度:

EIoU 在此基础上加大了对距离度量的惩罚力度,其惩罚项定义为:

Complete-IOU

在RDIOU的基础上,CIOU增加了对纵横比一致性的考虑:

 

其中\nu反向传播的梯度满足\frac{\partial \nu }{\partial h }=-\frac{\omega }{h}\frac{\partial \nu }{\partial \omega },也就是v不可能为预测框的宽高提供同号的梯度。在前文对DIoU的分析中可知DIoU会产生负梯度\frac{\partial R_{DIoU}}{\partial W_{g}},当这个负梯度与\frac{\partial L_{IoU}}{\partial W_{g}}

正好抵消时,会导致预测框无法优化。而CIoU对纵横比一致性的可以优化该问题。

(略,后续补充完整)... ...

8.MPDIOU

论文:《MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression》

链接:https://arxiv.org/pdf/2307.07662.pdf

目的:大多数的边界框回归损失函数在不同预测结果下具有相同的值,这降低了边界框回归的收敛速度和准确性。

所以作者提出了以下的算法:

def bbox_mpdiou(box1, box2, x1y1x2y2=True, mpdiou_hw=None, grid=None, eps=1e-7):
    # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4
    box2 = box2.T
    box1[:2] += grid
    box2[:2] += grid

    # Get the coordinates of bounding boxes
    if x1y1x2y2:  # x1, y1, x2, y2 = box1
        b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3]
        b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3]
    else:  # transform from xywh to xyxy
        b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2
        b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2
        b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2
        b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2
    
    # Intersection area
    inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \
            (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)

    # Union Area
    w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps
    w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps
    union = w1 * h1 + w2 * h2 - inter + eps

    iou = inter / union
    d1 = (b2_x1 - b1_x1) ** 2 + (b2_y1 - b1_y1) ** 2
    d2 = (b2_x2 - b1_x2) ** 2 + (b2_y2 - b1_y2) ** 2
    return iou - d1 / mpdiou_hw - d2 / mpdiou_hw  # MPDIoU

注:以上是部分信息记录,没有详细讲述,不喜勿喷。

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

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

相关文章

Python学习 — 免费使用,无须激活,下载安装即可免费使用Pycharm教程

学生如何通过自己的学校邮箱账号来免费使用专业版Pycharm&#xff0c;无需激活下载与安装、配置Python解释器教程。 前言&#xff1a; Pycharm官网版本是有两个版本的, 第一个版本是Professional(专业版本)&#xff0c;这个版本功能更加强大&#xff0c;主要是为Python和web开…

[vxe-table] 合并行后滚动错位

使用vxe-table的属性:span-method合并行&#xff0c;之后下拉后会错位 原因&#xff1a;缺少配置 scroll-y"{enabled: false}"参考&#xff1a; vxe-table合并行后错位

Maven如何将JAR包上传至本地仓库及私服

前言 为什么需要上传jar包至maven仓库&#xff1f; maven官方仓库有些依赖并不存在&#xff0c;现在项目都是maven直接获取jar&#xff0c;当maven获取不到时&#xff0c;或者需要引入外部jar包依赖时&#xff0c;就需要我们把jar上传至maven仓库。 示例&#xff1a;demo.jar…

好用的思维导图软件Xmind Pro 中文专业安装

XMind是一款非常实用的商业思维导图软件&#xff0c;应用领域广泛&#xff0c;为帮助用户提高工作效率而生。它融合了全球先进的管理理念和一线设计思想&#xff0c;具有强大的功能和优雅的界面&#xff0c;用户可以根据自己的需求自由定制。 好用的思维导图软件Xmind Pro 中文…

【AN基础工具—动画人物绘制】

【AN基础工具——动画人物绘制】 基本操作绘制直线选择工具基本图形钢笔工具 实战 本篇内容&#xff1a;动画人物绘制基础 重点内容&#xff1a;选择工具&#xff0c;线条&#xff0c;钢笔工具 工 具&#xff1a;Adobe Animate 2022 基本操作 绘制直线 选择《直线工具&#x…

2023-10-09 LeetCode每日一题(最小和分割)

2023-10-09每日一题 一、题目编号 2578. 最小和分割二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来&#xff0c;得到 num 各数位的一个排…

即时编译jit和xbyak的基本使用介绍

一般来说&#xff0c;解释型编程语言都是依靠自身运行的虚拟机&#xff0c;在解释程序。有时候语言为了提高运行速度&#xff0c;不会去直接解释程序文本&#xff0c;而是模拟cpu执行方式&#xff0c;将文本代码执行一次翻译&#xff0c;翻译为类似cpu执行的汇编语言去执行。有…

树 | 选择题

1. 若X是二叉树中序线索树中一个有左孩子的结点&#xff0c;且X不为根&#xff0c;则X的前驱为 X的双亲 X的右子树中最左的结点 X的左子树中最右结点&#xff08;正确答案&#xff09; X的左子树中最右叶结点&#xff08;可能没有&#xff09; 这里不是前驱结点&#xff0…

IDEA的使用(四)创建不同类型的工程(IntelliJ IDEA 2022.1.3版本)

1. 创建Java工程 创建之后&#xff0c;src下是空的。可以在src下创建软件包Package&#xff0c;命名采用域名倒序。在软件包下再创建Java类。Java类运行后出现中文乱码&#xff0c;就到控制台和文件编码这两个地方设置编码。 2. 创建JavaWeb工程 2.1 在win11和IDEA中配置Tomca…

Linux高性能服务器编程 学习笔记 第十三章 多进程编程

我们将讨论Linux多进程编程的以下内容&#xff1a; 1.复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。 2.僵尸进程以及如何避免僵尸进程。 3.进程间通信&#xff08;Inter Process Communication&#xff0c;IPC&#xff09;最简单的方式&#xff1a;管道。 …

使用EasyDarwin+ffmpeg+EasyPlayerPro完成rtsp的推流操作和拉流操作

本文分享在做视频类测试过程中所用到的工具EasyDarwinffmpegEasyPlayerPro 首先说一下EasyDarwin,简单来讲&#xff0c;它就是个推流和拉流及系统消耗的监测软件&#xff0c;具体使用方法我会写在下方。 EasyDarwin 1、解压下载好的EasyDarwin压缩包&#xff0c;并找到EasyD…

el-upload手动上传图片,上传后隐藏上传样式(el-upload上传单张图片,vue2)

简介&#xff1a;上期介绍了使用el-upload上传文件&#xff0c;这次来介绍一下如何使用el-upload上传图片&#xff0c;只能上传一次&#xff0c;上传图片后隐藏上传按钮部分。 实现效果图&#xff1a; 1、首先&#xff0c;想要在项目中使用el-upload组件&#xff0c;同样&#…

ios app开发环境搭建

Xcode是Apple iOS的应用市场app store移动应用的开发工具&#xff0c;支持不同设备、不同应用场景的开发&#xff0c;本文主要描述xcode开发工具开发环境的搭建。 如上所示&#xff0c;在macos中&#xff0c;使用app store安装xcode开发工具 如上所示&#xff0c;在macos中&…

陪诊系统|陪诊助浴系统|养老护理系统开发功能

助浴陪诊小程序是一款为老年人提供贴心服务的手机应用&#xff0c;旨在帮助老年人在家中就能享受到专业的助浴和陪诊服务。该程序通过简单易用的界面和人性化的设计&#xff0c;为老年人提供全面的护理服务。 1、用户注册登录 为了提供更好的服务&#xff0c;用户需要注册并登…

线性系统时域分析

1、稳定性分析 2、动态品质的求取 3、稳定误差计算 典型输入信号&#xff1a; 1、抛物线函数(等加速度阶跃函数) 2、单位阶跃函数 3.斜坡函数 A1,是单位阶跃函数1(t) 4.脉冲函数 A0 记为 动态过程和稳态过程 超调量&#xff1a;&#xff08;系统最大值-系统稳态值&…

基于Qt C++的工具箱项目源码,含命令行工具、桌面宠物、文献翻译、文件处理工具、医学图像浏览器、插件市场、设置扩展等工具

一、介绍 1. 基本信息 完整代码下载地址&#xff1a;基于Qt C的工具箱项目源码 TBox是一款基于Qt C的工具箱。用户可以自行选择安装所需的工具&#xff08;以插件的形式&#xff09;&#xff0c;将TBox打造成专属于自己的效率软件。TBox基本界面展示如下&#xff1a; 2. 使用…

视频转二维码简单技巧,适用多种视频格式

现在很多商品介绍多是以视频的方式来展现&#xff0c;那么为了方便用户能够同时快速获取视频内容&#xff0c;所以很多的商家现在会将视频生成二维码放到宣传单、展板、海报等宣传内容上&#xff0c;让他人通过扫码获取信息。那么视频二维码生成器的使用方法有哪几个步骤呢&…

【webUI】gradio基础使用2——Gallery组件显示多张图片

参考&#xff1a;https://www.gradio.app/docs/gallery | 参考代码&#xff08;老版本&#xff0c;有错误&#xff09; gradio基础使用1&#xff1a;https://blog.csdn.net/imwaters/article/details/131400571 说明 基于python的浏览器上多图片显示&#xff0c;是很多复杂程序…

袖口收缩包装机包装效果如何调整

袖口收缩包装机是一种使用非常广泛的包装设备&#xff0c;老百姓最常见的啤酒瓶和可乐瓶的包装就是袖口包装&#xff0c;我们看到的成品效果都是非常好的&#xff0c;那是因为厂商在出厂时已经对设备进行了非常好的调试&#xff0c;那么对于初次使用或者已经使用了&#xff0c;…

Pulsar 之架构,客户端以及多区域容灾

Pulsar 之架构&#xff0c;客户端以及多区域容灾 架构BrokersClusters元数据存储配置存储区持久存储Apache BookKeeperLedgersLedgers读一致性托管Ledgers 日志存储 Pulsar 代理服务发现 Pulsar client(客户端)客户端设置阶段Reader interface 多区域容灾备份(GEO-REPLICATION)…