YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

news/2024/10/11 9:49:07/

一、背景

  1. 目标检测和实例分割中的关键问题
    • 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值,这降低了边界框回归的收敛速度和准确性。
  2. 现有损失函数的不足
    • 现有的基于 ℓ n \ell_n n范数的损失函数简单但对各种尺度敏感。
    • 当预测框与真实框具有相同的宽高比但不同的宽度和高度值时,现有损失函数可能会存在问题,限制了收敛速度和准确性。

文章目录

  • 一、背景
  • 二、原理
    • 2.1 IoU计算原理
    • 2.2. 基于最小点距离的IoU度量
    • 2.3. 作为边界框回归损失函数
    • 2.4 MPDIoU的计算公式
  • 三、添加步骤
    • 3.1 ultralytics/utils/metrics.py
    • 3.2 修改ultralytics/utils/loss.py
    • 3.3 修改ultralytics/utils/tal.py
  • 四、成功运行截图


MPDIoU(Intersection over Union with Minimum Points Distance)是一种用于高效且准确的边界框回归的损失函数。

二、原理

2.1 IoU计算原理

IoU(Intersection over Union)即交并比,用于衡量预测边界框和真实边界框的重合程度。

1. 交集计算:
- 首先确定预测边界框和真实边界框的交集区域。
- 对于两个以左上角和右下角坐标表示的矩形框,分别找出它们在横坐标和纵坐标方向上的重叠区间。
- 如果两个矩形框在横坐标和纵坐标方向上都有重叠部分,那么这个重叠区域就是一个矩形,其面积就是交集的大小。
2. 并集计算:
- 计算预测边界框和真实边界框的并集区域。
- 并集的大小等于两个矩形框各自的面积之和减去它们的交集面积。
3. 比值计算:
- 最后,IoU的值就是交集面积与并集面积的比值。

2.2. 基于最小点距离的IoU度量

  • 原论文中受水平矩形的几何特性启发,设计了一种基于最小点距离的新型IoU度量MPDIoU,直接最小化预测边界框和真实边界框的左上角和右下角点之间的距离。
  • MPDIoU的计算通过两个任意凸形状 A A A B B B,用其左上角和右下角点的坐标来表示,通过计算两个框的交集与并集之比,再减去左上角和右下角两点距离的归一化值来得到MPDIoU

2.3. 作为边界框回归损失函数

  • 在训练阶段,通过最小化基于MPDIoU的损失函数 L M P D I o U = 1 − M P D I o U L_{MPDIoU}=1-MPDIoU LMPDIoU=1MPDIoU,使模型预测的每个边界框 B p r d B_{prd} Bprd接近其真实框 B g t B_{gt} Bgt
  • 现有损失函数中的所有因素(如非重叠区域、中心点距离、宽高偏差等)都可以通过左上角和右下角两点的坐标确定,这意味着提出的 L M P D I o U L_{MPDIoU} LMPDIoU不仅考虑了这些因素,还简化了计算过程。

在这里插入图片描述

2.4 MPDIoU的计算公式

  1. MPDIoU的计算公式:

    • M P D I o U = A ∩ B A ∪ B − d 1 2 w 2 + h 2 − d 2 2 w 2 + h 2 MPDIoU=\frac{A\cap B}{A\cup B}-\frac{d_{1}^{2}}{w^{2}+h^{2}}-\frac{d_{2}^{2}}{w^{2}+h^{2}} MPDIoU=ABABw2+h2d12w2+h2d22
    • 其中 A A A B B B是两个任意凸形状, ( x A 1 , y A 1 ) (x_{A1}, y_{A1}) (xA1,yA1) ( x A 2 , y A 2 ) (x_{A2}, y_{A2}) (xA2,yA2)表示(A)的左上角和右下角点坐标, ( x B 1 , y B 1 ) (x_{B1}, y_{B1}) (xB1,yB1) ( x B 2 , y B 2 ) (x_{B2}, y_{B2}) (xB2,yB2)表示 B B B的左上角和右下角点坐标。
    • d 1 2 = ( x 1 B − x 1 A ) 2 + ( y 1 B − y 1 A ) 2 d_{1}^{2}=(x_{1}^{B}-x_{1}^{A})^{2}+(y_{1}^{B}-y_{1}^{A})^{2} d12=(x1Bx1A)2+(y1By1A)2 d 2 2 = ( x 2 B − x 2 A ) 2 + ( y 2 B − y 2 A ) 2 d_{2}^{2}=(x_{2}^{B}-x_{2}^{A})^{2}+(y_{2}^{B}-y_{2}^{A})^{2} d22=(x2Bx2A)2+(y2By2A)2
  2. 基于MPDIoU的损失函数计算公式:

    • L M P D I o U = 1 − M P D I o U L_{MPDIoU}=1-MPDIoU LMPDIoU=1MPDIoU

三、添加步骤

3.1 ultralytics/utils/metrics.py

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

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

将下方的bbox_iou函数替换原本的bbox_iou函数即可:

def bbox_iou(box1, box2, xywh=True, GIoU=False, DIoU=False, CIoU=False, MDPIoU=False, feat_h=640, feat_w=640, eps=1e-7):# Returns Intersection over Union (IoU) of box1(1,4) to box2(n,4)# Get the coordinates of bounding boxesif xywh:  # transform from xywh to xyxy(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 / 2b1_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_else:  # x1, y1, x2, y2 = box1b1_x1, b1_y1, b1_x2, b1_y2 = box1.chunk(4, -1)b2_x1, b2_y1, b2_x2, b2_y2 = box2.chunk(4, -1)w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + epsw2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps# Intersection areainter = (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 Areaunion = w1 * h1 + w2 * h2 - inter + eps# IoUiou = inter / unionif CIoU or DIoU or GIoU:cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex (smallest enclosing box) widthch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex heightif CIoU or DIoU:  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1c2 = cw ** 2 + ch ** 2 + eps  # convex diagonal squaredrho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4  # center dist ** 2if CIoU:  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2)with torch.no_grad():alpha = v / (v - iou + (1 + eps))return iou - (rho2 / c2 + v * alpha)  # CIoUreturn iou - rho2 / c2  # DIoUc_area = cw * ch + eps  # convex areareturn iou - (c_area - union) / c_area  # GIoU https://arxiv.org/pdf/1902.09630.pdfelif MDPIoU:d1 = (b2_x1 - b1_x1) ** 2 + (b2_y1 - b1_y1) ** 2d2 = (b2_x2 - b1_x2) ** 2 + (b2_y2 - b1_y2) ** 2mpdiou_hw_pow = feat_h ** 2 + feat_w ** 2return iou - d1 / mpdiou_hw_pow - d2 / mpdiou_hw_pow  # MPDIoUreturn iou  # IoU

在这里插入图片描述

3.2 修改ultralytics/utils/loss.py

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

BboxLoss函数内修改如下代码,使模型调用此MPDIoU损失函数。


iou = bbox_iou(pred_bboxes[fg_mask], target_bboxes[fg_mask], xywh=False, MDPIoU=True)

在这里插入图片描述

3.3 修改ultralytics/utils/tal.py

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

iou_calculation函数内修改如下代码,使模型调用此MPDIoU损失函数。

return bbox_iou(gt_bboxes, pd_bboxes, xywh=False, MPDIoU=True).squeeze(-1).clamp_(0)

在这里插入图片描述

四、成功运行截图

在这里插入图片描述


http://www.ppmy.cn/news/1537379.html

相关文章

鸿蒙NEXT开发-动画(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

SCRM呼叫中心高保真Axure原型 源文件分享

在数字化时代,客户关系管理(CRM)对于企业的成功至关重要。SCRM呼叫中心后台作为一款专为CRM设计的软件原型,致力于为企业提供高效、智能的客户沟通解决方案。本文将详细介绍该产品的核心功能及其对企业提升客户满意度和销售业绩的…

uniAPP是否可以做php语言书写后端的前端开发?

UniAPP可以做PHP语言书写后端的前端开发。以下是关于这个问题的详细解答: 一、UniAPP与后端开发的关系 前后端分离:UniAPP作为一款跨平台开发框架,采用了前后端分离的开发模式。这意味着前端和后端的开发可以独立进行,互不影响。…

继承--C++

文章目录 一、继承的概念及定义1、继承的概念 二、继承定义1、定义格式2、继承基类成员访问方式的变化3、继承类模板 三、基类和派生类间的转换1、继承中的作用域2、隐藏规则: 四、派生类的默认成员函数1、4个常见默认成员函数2、实现⼀个不能被继承的类 五、继承与…

第四范式发布全新一代文档数字化管理平台Smart Archive 2.0

产品上新 Product Release 今日,第四范式正式推出全新一代文档数字化管理平台——Smart Archive 2.0。该产品基于第四范式自研的文档处理大模型,实现零样本下对企业文档的精准识别及信息提取。文档处理大模型利用二十多个行业,上百种场景下的…

数据结构和算法简介

目录 1.认识数据结构 什么是数据结构 逻辑结构 物理结构 常见的数据结构 2.认识算法 什么是算法 如何衡量算法效率 时间复杂度 什么是时间复杂度 如何计算时间复杂度 大O渐进表示法 常见时间复杂度计算例子 空间复杂度 什么是空间复杂度 如何计算空间复杂度 常…

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式 输电线路悬垂线夹检测无人机航拍图像数据集介绍 数据集名称 输电线路悬垂线夹检测数据集 (Transmission Line Fittings Detection Dataset) 数据集…

无线费控智能水表:智能生活的守护者

在当今智能化日益普及的时代,无线费控智能水表作为一项重要的技术创新,正在逐步改变我们的生活方式。它不仅能够实现远程抄表,自动计费,还能有效监控用水情况,促进水资源的合理利用,是现代城市智慧化管理不…