【YOLOv10改进-损失函数】Shape-IoU:考虑边框形状与尺度的指标

简介: YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。

YOLOv10目标检测创新改进与实战案例专栏

专栏链接: YOLOv10 创新改进有效涨点

介绍

image-20240130102437884

摘要

​ 作为检测器定位分支的重要组成,边框回归损失在目标检测任务中发挥巨大作用。现有的边框回归方法,通常考虑了GT框与预测框之间的几何关系,通过使用边框间的相对位置与相对形状等计算损失,而忽略了边框其自身的形状与尺度等固有属性对边框回归的影响。为了弥补现有研究的不足,本文提出聚焦边框自身形状与尺度的边框回归方法。首先我们对边框回归特性进行分析,得出边框自身形状因素与尺度因素会对回归结果产生影响。接着基于以上结论我们,我们提出了Shape-IoU方法,其能够通过聚焦边框自身形状与自身尺度计算损失,从而使得边框回归更为精确。最后我们通过大量的对比实验来验证本文方法,实验结果表明本文方法能够有效提升检测效果且优于现有方法,在不同的检测任务中达到了sota.

创新点

  1. 本研究对边界框回归的特性进行了深入分析,并得出结论:在边界框回归过程中,回归样本的形状与尺度因素对回归结果有显著影响。

  2. 基于对现有边界框回归损失函数的考量,特别是考虑到回归样本自身形状与尺度对边界框回归的影响,提出了Shape-IoU损失函数。对于小目标检测任务,进一步提出了Shape-Dot-Distance和Shape-NWD损失函数。

  3. 采用当前最先进的单阶段检测器,在不同的检测任务上进行了一系列比较实验。实验结果证实,该方法在检测效果上优于现有方法,并达到了行业领先水平(State of the Art,SOTA)。

方法

1.边框回归特性分析

如图所示,图a与图b中,边框回归样本A与B的基准框(GT框)尺度相同,样本C与D的基准框尺度亦相同。样本A与D的基准框形状相同,样本B与C的基准框形状相同。样本C与D的边框尺度大于样本A与B。在图a中,所有边框回归样本的偏移量(deviation)相同,形状偏移量(shape-deviation)为0。图b中,所有边框回归样本的形状偏移量相同,偏移量为0。观察结果如下:

- 图a中,样本AB的偏移量相同,但它们的IoU值存在差异。
- 图a中,样本C与D的偏移量相同,但它们的IoU值存在差异,且与样本AB相比,其IoU值差异较小。
- 图b中,样本AB的形状偏移量相同,但它们的IoU值存在差异。
- 图b中,样本C与D的形状偏移量相同,但它们的IoU值存在差异,且与样本AB相比,IoU值差异较小。
AI 代码解读

分析图a中样本A与B的IoU值差异可知,由于GT框形状不同(即长边和短边方向的偏差),对IoU值的影响各异。对于小尺度边框,其IoU值变化更敏感,GT框形状对IoU值的影响更显著。此外,图b中从形状偏移量角度分析边框回归,发现回归样本的GT框形状在回归过程中影响其IoU值。

基于以上分析,可以得出以下结论:

  • (1)在非正方形GT框中,即存在长边与短边的情况下,假设偏移量与形状偏移量均不为0,边框形状与尺度的差异会导致IoU值存在显著差异。
  • (2)在相同尺度的边框回归样本中,当偏移量与形状偏移量均不为0时,边框形状会显著影响IoU值,特别是沿边框短边方向的偏移。
  • (3)在形状相同的边框回归样本中,相较于大尺度样本,小尺度样本的IoU值更易受GT框形状影响。

2.Shape-IoU

其中,scale为尺度因子,与数据集中目标的尺度相关;ww与hh分别为水平方向与竖直方向的权重系数,与GT框的形状相关。对应的边框回归损失函数如下:

文章链接

论文地址:论文地址

代码地址:代码地址

原文作者CSDN : https://blog.csdn.net/qq_45911380/article/details/135330376

视频讲解

yolov8引入代码

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

    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    #Shape-Shape    
    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)

    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU    #Shape-IoU
    iou = iou - distance - 0.5 * ( shape_cost)
    return iou  # IoU
AI 代码解读

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/140185105

目录
打赏
0
0
0
0
95
分享
相关文章
RT-DETR改进策略【损失函数篇】| WIoU v3:针对低质量样本的边界框回归损失函数
RT-DETR改进策略【损失函数篇】| WIoU v3:针对低质量样本的边界框回归损失函数
64 14
RT-DETR改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
RT-DETR改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
55 1
RT-DETR改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
|
1月前
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
117 4
YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
105 4
YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS
YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS
394 6
YOLOv11改进策略【损失函数篇】| WIoU v3:针对低质量样本的边界框回归损失函数
YOLOv11改进策略【损失函数篇】| WIoU v3:针对低质量样本的边界框回归损失函数
70 6
|
1月前
RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
71 0
RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)
YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
72 0
YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
IoU已经out了,试试这几个变体:GIoU、DIoU和CIoU介绍与对比分析
本文探讨了目标检测中常用的交并比(IoU)及其变体,包括广义交并比(GIoU)、距离交并比(DIoU)和完全交并比(CIoU)。这些指标不仅提高了模型在处理不重叠、距离较远或形状差异大的边界框时的表现,还为模型的学习过程提供了更深入的洞察。文章详细解释了各指标的计算方法及应用场景,并提供了相应的代码示例,帮助读者更好地理解和应用这些先进的评估指标。
304 7
IoU已经out了,试试这几个变体:GIoU、DIoU和CIoU介绍与对比分析
【YOLOv8改进】Shape-IoU:考虑边框形状与尺度的指标(论文笔记+引入代码)
YOLO目标检测专栏探讨了边框回归损失的创新方法,强调了目标形状和尺度对结果的影响。提出的新方法Shape-IoU关注边框自身属性,通过聚焦形状和尺度提高回归精度。实验显示,该方法提升了检测效果,超越现有技术,在多个任务中达到SOTA。论文和代码已公开。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等