YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍

本文记录的是改进YOLOv11的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑真实GT(Ground Truth)框预测框之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-IoU提出了一种关注边界框本身形状和尺度的边界框回归方法。


文章目录

  • 一、本文介绍
  • 二、Shape-IoU设计原理
    • 2.1 原理
    • 2.2 优势
  • 三、Shape-IoU的实现代码
  • 四、添加步骤
    • 4.1 修改ultralytics/utils/metrics.py
    • 4.2 修改ultralytics/utils/loss.py
    • 4.3 修改ultralytics/utils/tal.py


二、Shape-IoU设计原理

Shape-IoU:考虑边界框形状和尺度的更精确度量

以下是关于Shape-IoU的详细介绍:

2.1 原理

  • 分析边界框回归特性:通过对边界框回归样本的分析,得出以下结论:
    • 当回归样本的偏差和形状偏差相同且不全为0时,假设GT框不是正方形且有长短边,边界框形状和尺度的差异会导致其IoU值的差异。
    • 对于相同尺度的边界框回归样本,当回归样本的偏差和形状偏差相同且不全为0时,边界框的形状会对回归样本的IoU值产生影响。沿着边界框短边方向的偏差和形状偏差对应的IoU值变化更为显著。
    • 对于具有相同形状边界框的回归样本,当回归样本偏差和形状偏差相同且不全为0时,与较大尺度的回归样本相比,较小尺度边界框回归样本的IoU值受GT框形状的影响更为显著。
  • Shape - IoU公式
    • I o U = ∣ B ∩ B g t ∣ ∣ B ∪ B g t ∣ IoU = \frac{|B \cap B^{gt}|}{|B \cup B^{gt}|} IoU=BBgtBBgt
    • w w = 2 × ( w g t ) s c a l e ( w g t ) s c a l e + ( h g t ) s c a l e ww = \frac{2 \times (w^{gt})^{scale}}{(w^{gt})^{scale} + (h^{gt})^{scale}} ww=(wgt)scale+(hgt)scale2×(wgt)scale
    • h h = 2 × ( h g t ) s c a l e ( w g t ) s c a l e + ( h g t ) s c a l e hh = \frac{2 \times (h^{gt})^{scale}}{(w^{gt})^{scale} + (h^{gt})^{scale}} hh=(wgt)scale+(hgt)scale2×(hgt)scale
    • d i s t a n c e s h a p e = h h × ( x c − x c g t c ) 2 + w w × ( y c − y c g t c ) 2 distance^{shape} = hh \times (\frac{x_c - x_c^{gt}}{c})^{2} + ww \times (\frac{y_c - y_c^{gt}}{c})^{2} distanceshape=hh×(cxcxcgt)2+ww×(cycycgt)2
    • Ω s h a p e = ∑ t = w , h ( 1 − e − ω t ) θ , θ = 4 \Omega^{shape} = \sum_{t = w, h}(1 - e^{-\omega_t})^{\theta}, \theta = 4 Ωshape=t=w,h(1eωt)θ,θ=4,其中 { ω w = h h × ∣ w − w g t ∣ m a x ( w , w g t ) ω h = w w × ∣ h − h g t ∣ m a x ( h , h g t ) \left\{\begin{array}{l} \omega_{w} = hh \times \frac{|w - w^{gt}|}{max(w, w^{gt})} \\ \omega_{h} = ww \times \frac{|h - h^{gt}|}{max(h, h^{gt})} \end{array}\right. {ωw=hh×max(w,wgt)wwgtωh=ww×max(h,hgt)hhgt
  • 对应的边界框回归损失 L S h a p e − I o U = 1 − I o U + d i s t a n c e s h a p e + 0.5 × Ω s h a p e L_{Shape - IoU} = 1 - IoU + distance^{shape} + 0.5 \times \Omega^{shape} LShapeIoU=1IoU+distanceshape+0.5×Ωshape

在这里插入图片描述

2.2 优势

  • 提高检测性能:论文中通过一系列对比实验,证明了Shape-IoU方法在不同检测任务中能够有效提高检测性能,优于现有方法,在不同检测任务中达到了最先进的性能。
  • 关注边界框自身属性:考虑了边界框本身的形状和尺度对边界框回归的影响,弥补了现有研究忽略这一因素的不足。
  • 在小目标检测任务中的应用:针对小目标检测任务,提出了Shape-Dot DistanceShape-NWD,将Shape-IoU的思想融入其中,提高了在小目标检测方面的性能。

论文:https://arxiv.org/pdf/2312.17663
源码:https://github.com/malagoutou/Shape-IoU


三、Shape-IoU的实现代码

Shape-IoU的实现代码如下:

def shape_iou(box1, box2, xywh=True, scale=0, eps=1e-7):
    (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1)
    w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2
    b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_
    b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_
 
    # 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
    union = w1 * h1 + w2 * h2 - inter + eps
 
    # IoU
    iou = inter / union
 
    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance    #Shape-Distance  
    ww = 2 * torch.pow(w2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    hh = 2 * torch.pow(h2, scale) / (torch.pow(w2, scale) + torch.pow(h2, scale))
    cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex width
    ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
    c2 = cw ** 2 + ch ** 2 + eps                            # convex diagonal squared
    center_distance_x = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2) / 4
    center_distance_y = ((b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4
    center_distance = hh * center_distance_x + ww * center_distance_y
    distance = center_distance / c2
  
    omiga_w = hh * torch.abs(w1 - w2) / torch.max(w1, w2)
    omiga_h = ww * torch.abs(h1 - h2) / torch.max(h1, h2)
    shape_cost = torch.pow(1 - torch.exp(-1 * omiga_w), 4) + torch.pow(1 - torch.exp(-1 * omiga_h), 4)
    
    iou = iou - distance - 0.5 * ( shape_cost)
    return iou  # IoU

四、添加步骤

4.1 修改ultralytics/utils/metrics.py

此处需要查看的文件是ultralytics/utils/metrics.py

metrics.py中定义了模型的损失函数和计算方法,我们想要加入新的损失函数就只需要将代码放到这个文件内即可

Shape-IoU添加后如下:

在这里插入图片描述

4.2 修改ultralytics/utils/loss.py

utils\loss.py用于计算各种损失。

ultralytics/utils/loss.py在的引用中添加shape_iou,然后在BboxLoss函数内修改如下代码,使模型调用此Shape-IoU损失函数。

在这里插入图片描述


iou = shape_iou(pred_bboxes[fg_mask], target_bboxes[fg_mask])

在这里插入图片描述

4.3 修改ultralytics/utils/tal.py

tal.py中是一些损失函数的功能应用。

ultralytics/utils/tal.py在的引用中添加shape_iou,然后在iou_calculation函数内修改如下代码,使模型调用此Shape-IoU损失函数。

在这里插入图片描述

return shape_iou(gt_bboxes, pd_bboxes).squeeze(-1).clamp_(0)

在这里插入图片描述

此时再次训练模型便会使用Shape-IoU计算模型的损失函数。

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

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

相关文章

机器学习模型评估

前言 承接上篇讲述了机器学习有哪些常见的模型算法,以及适用的场景,本篇将继续讲述如何评估模型。模型评估的目的是选出泛化能力强的模型。泛化能力强表示模型能很好地适用于未知的样本,模型的错误率低、精度高。本文将从评估方法和评估指标…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战?选择正确的云渲染服务至关重要。探索最佳解决方案,优化渲染效率,快速呈现逼真动画。 汽车3d动画渲染选择哪个? 对于汽车3D动画渲染,选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

<<机器学习实战>>10-11节笔记:生成器与线性回归手动实现

10生成器与python实现 如果是曲线规律的数据集,则需要把模型变复杂。如果是噪音较大,则需要做特征工程。 随机种子的知识点补充: 根据不同库中的随机过程,需要用对应的随机种子: 比如 llist(range(5)) random.shuf…

Ubuntu下安装向日葵:闪退

下载 https://sunlogin.oray.com/download 初次安装 $ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 234281 个文件和目录。) 准备解压 SunloginClient_15.2.0.63064_amd64.deb ..…

助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)

助农扶贫系统小程序 目录 基于java的助农扶贫系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1.1 农户管理 5.1.2 用户管理 5.1.3 订单统计 5.2.1 商品信息管理 5.3.1 商品信息 5.3.2 订单信息 5.3.3 商品评价 5.3.4 商品退货 四、数据库设计 1、…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了,其口碑榜首、节奏紧凑、贴合原著、电影质感,都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原,长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

ubuntu18.04 Anconda安装及使用

1、安装Anaconda 1)下载: 下载链接:https://www.anaconda.com/download#downloads 点击图中Free Download,登录并下在 下载对应版本 2)安装 sudo bash Anaconda3-2024.06-1-Linux-x86_64.sh输入后,直接回车安装。 出…

大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件,以限制从数据库表中检索的数据。当你执行一个查询时,WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…

UE学习篇ContentExample解读------Blueprints Advanced-下

文章目录 总览描述批次阅览2.1 Timeline animation2.2 Actor tracking2.3 Button Trigger using a blueprint interface2.4 Opening door with trigger2.5 Child Blueprints 概念总结致谢: 总览描述 打开关卡后,引入眼帘的就是针对关卡的总体性文字描述&…

五子棋双人对战项目(1)——WebSocket介绍

目录 一、项目介绍 如何实现实时同步对局? 二、WebSocket 1、什么是WebSocket? 2、WebSocket的报文格式 opcode payload len payload data 3、WebSocket握手过程 4、WebSocket代码的简单编写 三、WebSocket 和 HTTP的关系 1、相同点&#xf…

从 Kafka 到 WarpStream: 用 MinIO 简化数据流

虽然 Apache Kafka 长期以来一直是流数据的行业标准,但新的创新替代方案正在重塑生态系统。其中之一是 WarpStream,它最近在 Confluent 的所有权下进入了新的篇章。此次收购进一步增强了 WarpStream 提供高性能、云原生数据流的能力,巩固了其…

Iceberg 基本操作和快速入门

安装 Iceberg 是一种适用于大型分析表的高性能工具,通过spark启动并运行iceberg,文章是通过docker来进行安装并测试的 新建一个docker-compose.yml文件 文件内容 version: "3" services: spark-iceberg: image: tabulario/spark-iceberg co…

GS-SLAM论文阅读笔记--MM3DGS SLAM

前言 多传感器融合GS-SLAM的另一个IROS2024,不过这篇没有用到激光雷达,而是相机和IMU结合而实现的。今天看一下这篇。 文章目录 前言1.背景介绍2.关键内容2.1 跟踪2.2 深度监督2.3 惯性融合2.4建图2.5 总体流程 3.文章贡献4.个人思考 1.背景介绍 虽然SLAM方法使用…

计算神经学笔记01

- **The term neuromorphic is generally used to describe analog, digital, mixed-mode analog/digital VLSI, and software systems that implement several models of neural systems.** - 神经形态一词通常用于描述模拟、数字、混合模式的模拟/数字超大规模集成电路&…

记录|Modbus-TCP产品使用记录【摩通传动】

目录 前言一、摩通传动实验图1.1 配置软件 IO_Studio1.2 测试软件Modbus Poll1.2.1 读写设置测试1.2.2 AI信号的读取 1.3 对应的C#连接Modbus的测试代码如下【自制,仅供参考】1.4 最终实验图 更新时间 前言 参考文章: 自己需要了解和对比某些产品的Modbu…

C++基础---类和对象(上)

1.类的定义 C程序设计允许程序员使用类(class)定义特定程序中的数据类型。这些数据类型的实例被称为对象 ,这些实例可以包含程序员定义的成员变量、常量、成员函数,以及重载的运算符。语法上,类似C中结构体&#xff0…

3D建模软件 | Blender v4.2.2 绿色版

Blender是一款功能强大的免费开源3D创作套件,适用于创建3D可视化效果,如静态图像、3D动画、视觉特效以及视频编辑。Blender以其跨平台兼容性、高效内存管理、统一的工作流程和活跃的社区支持而受到独立艺术家和小型工作室的青睐。 它提供了从建模、渲染…

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下: pid_t fork(void); 返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid 注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程&…