前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YOLOv8、v7、v5优化:Powerful-IoU更好、更快的收敛IoU | 2024年最新IoU

YOLOv8、v7、v5优化:Powerful-IoU更好、更快的收敛IoU | 2024年最新IoU

原创
作者头像
AI小怪兽
发布2024-01-25 19:58:56
77513
代码可运行
发布2024-01-25 19:58:56
举报
文章被收录于专栏:YOLO大作战YOLO大作战
运行总次数:3
代码可运行

???本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数

???MS COCO和PASCAL VOC数据集实现涨点

1.Powerful-IoU介绍

?

链接:https://www.sciencedirect.com/science/article/abs/pii/S0893608023006640

摘要:边界框回归(Bounding box regression, BBR)是目标检测中的核心任务之一,而BBR的损失函数对其性能影响很大。然而,我们观察到现有的基于iou的损失函数受到不合理的惩罚因素的影响,导致锚框在回归过程中膨胀,显著减缓了收敛速度。为了解决这个问题,我们深入分析了锚框增大的原因。为此,我们提出了一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的强效iou (PIoU)损失函数。PIoU损耗引导锚框沿着有效路径回归,从而比现有的基于iou的损耗更快地收敛。此外,我们还研究了聚焦机制,并引入了一个非单调注意层,将其与PIoU结合,得到了一个新的损失函数PIoU v2。PIoU v2损耗增强了对中等质量锚框的聚焦能力。通过将PIoU v2整合到流行的目标检测器(如YOLOv8和DINO)中,我们在MS COCO和PASCAL VOC数据集上实现了平均精度(AP)的提高和性能的改进,从而验证了我们提出的改进策略的有效性。

图1所示。基于不同iou的损失函数指导下的锚框回归过程。彩色框是在回归过程中由不同损失函数引导的锚框。很明显,以PIoU损失为导向的锚盒是最快回归到接近目标盒的。此外,除PIoU损失外,所有损失函数引导的锚盒都存在面积扩大问题,而PIoU损失引导的锚盒则不存在面积扩大问题。

?

图2所示。基于IoU的损失。(a)和(b)中的损失函数都使用诸如锚框和目标框的最小外部边界框(灰色虚线框)的对角线长度或面积等维度信息作为损失因子的分母。相反,(c)中的PIoU损耗仅使用目标盒的边缘长度作为损耗因子的分母。

图3所示。一个扩展锚框的例子。在左图中,锚框的中心位置为(4,4),宽度为4,高度为2。在右图中,锚框的中心位置也是(4,4),但宽度为6,高度为3。可以观察到,尽管锚盒尺寸增大,但?????、??和?减小。然而,?P???并没有表现出这样的行为。

1.1 PIoU v2损失

在本节中,我们将探讨聚焦机制在我们提出的损失函数中的应用。为了解决第2.2节中提到的Focal EIoU (Zhang, Ren et al., 2022)和WIoU (Tong et al., 2023)的局限性,我们设计了一个由单个超参数控制的非单调注意函数与PIoU相结合。PIoU v2损耗在PIoU损耗上增加注意层后得到,增强了对中高质量锚盒的聚焦能力,提升了目标检测器的性能。注意函数和PIoU v2损失定义为:

1.3 实验结果

2.Powerful-IoU如何将入到YOLOv8

2.1修改ultralytics/utils/metrics.py

核心代码 # Intersection area

代码语言:python
代码运行次数:3
复制


    # PIoU
    dw1 = torch.abs(b1_x2.minimum(b1_x1) - b2_x2.minimum(b2_x1))
    dw2 = torch.abs(b1_x2.maximum(b1_x1) - b2_x2.maximum(b2_x1))
    dh1 = torch.abs(b1_y2.minimum(b1_y1) - b2_y2.minimum(b2_y1))
    dh2 = torch.abs(b1_y2.maximum(b1_y1) - b2_y2.maximum(b2_y1))
    P = ((dw1 + dw2) / torch.abs(w2) + (dh1 + dh2) / torch.abs(h2)) / 4
    L_v1 = 1 - iou - torch.exp(-P ** 2) + 1

    if PIoU:
        return L_v1

    if PIoU2:
        q = torch.exp(-P)
        x = q * Lambda
        return 3 * x * torch.exp(-x ** 2) * L_v1
   

by AI小怪兽

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Powerful-IoU介绍
    • 1.1 PIoU v2损失
      • 1.3 实验结果
      • 2.Powerful-IoU如何将入到YOLOv8
        • 2.1修改ultralytics/utils/metrics.py
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com