目标检测---IOU计算详细解读(IoU、GIoU、DIoU、CIoU、EIOU、Focal-EIOU、SIOU、WIOU)

在这里插入图片描述

常见IoU解读与代码实现

  • 一、✒️IoU(Intersection over Union)
    • 1.1 🔥IoU原理
      • ☀️ 优点
      • ⚡️缺点
    • 1.2 🔥IoU计算
    • 1.3 📌IoU代码实现
  • 二、✒️GIoU(Generalized IoU)
    • 2.1 GIoU原理
      • ☀️优点
      • ⚡️缺点
    • 2.2 🔥GIoU计算
    • 2.3 📌GIoU代码实现
  • 三、✒️DIoU(Distance-IoU)
    • 3.1 DIoU原理
      • ☀️优点
      • ⚡️缺点
    • 3.2 DIoU计算
    • 3.3 📌DIoU代码实现
  • 四、✒️CIoU(Complete-IoU)
    • 4.1 CIoU原理
      • ☀️优点
      • ⚡️缺点
    • 4.2 CIoU计算
    • 4.3 📌CIoU代码实现
  • 五、✒️EIOU(Efficient-IoU)
    • 5.1原理
    • 5.2 代码实现
  • 六、✒️Focal-EIOU
    • 6.1 原理
      • ☀️优点
      • ⚡️缺点
    • 📌6.2 代码实现
  • 七、✒️SIOU(Soft Intersection over Union)
    • 7.1原理
  • 八、✒️Wise-IoU

一、✒️IoU(Intersection over Union)

1.1 🔥IoU原理

🚀交并比(IoU, Intersection over Union)是一种计算不同图像相互重叠比例的算法,经常被用于深度学习领域的目标检测或语义分割任务中。

在我们得到模型输出的预测框位置后,也可以计算输出框与真实框(Ground Truth Bound)之间的 IoU,此时,这个框的取值范围为 0~1,0 表示两个框不相交,1 表示两个框正好重合。

1-IOU 表示真实框与预测框之间的差异,如果用 1-IOU,这时的取值范围还是 0~1,但是变成了 0 表示两个框重合,1 表示两个框不相交,这样也就符合了模型自动求极小值的要求。因此,可以使用1-IOU来表示模型的损失函数(Loss 函数)。


🎯IoU 的定义如下:
在这里插入图片描述

✨直观来讲,IoU 就是两个图形面积的交集和并集的比值
在这里插入图片描述

☀️ 优点

使用IoU来计算预测框和目标框之间的损失有以下优点:

  • 具有尺度不变性;
  • 满足非负性;
  • 满足对称性;

⚡️缺点

如果只使用IoU交并比来计算目标框损失的话会有以下问题:

  • 预测框与真实框之间不相交的时候,如果|A∩B|=0,IOU=0,无法进行梯度计算;
  • 相同的IOU反映不出实际预测框与真实框之间的情况,虽然这三个框的IoU值相等,但是预测框与真实框之间的相对位置却完全不一样;
    在这里插入图片描述

也就是说,IoU 初步满足了计算两个图像的几何图形相似度的要求,简单实现了图像重叠度的计算,但无法体现两个图形之间的距离以及图形长宽比的相似性。

1.2 🔥IoU计算

上面介绍了IoU原理,下面是IoU简单计算的原理图,我们需要先计算出相交部分黄色的面积,然后再计算蓝框的面积与绿框围成面积的总和,然后计算两者的比值,如下:假设一个格子的面积是1,交集黄色部分的面积为2x2=4,蓝框与绿框围成面积总和为3x3+4x4-2x2=21,所以IOU=4/21=0.19;

在这里插入图片描述

在代码中并不是采用上面的计算方法,而是使用坐标进行计算,如下图,矩形 AC 与矩形 BD 相交,它们的顶点A、B、C、D,分别是:A(0,0)、B(3,2)、C(6,8)、D(9,10)
在这里插入图片描述
📟此时 IoU 的计算公式应为:
在这里插入图片描述
带入 A、B、C、D 四点的实际坐标后,可以得到:
在这里插入图片描述

1.3 📌IoU代码实现

import numpy as np

def IoU(box1, box2):
    # 计算中间矩形的宽高
    in_w = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_h = min(box1[3], box2[3]) - max(box1[1], box2[1])

    # 计算交集、并集面积
    inter = 0 if in_w <= 0 or in_h <= 0 else in_h * in_w
    union = (box2[2] - box2[0]) * (box2[3] - box2[1]) +\
            (box1[2] - box1[0]) * (box1[3] - box1[1]) - inter
    # 计算IoU
    iou = inter / union
    return iou

if __name__ == "__main__":
    box1 = [0, 0, 6, 8]  # [左上角x坐标,左上角y坐标,右下角x坐标,右下角y坐标]
    box2 = [3, 2, 9, 10]
    print(IoU(box1, box2))

运行结果:

0.23076923076923078

二、✒️GIoU(Generalized IoU)

2.1 GIoU原理

📜 CVPR2019中论文《Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression》提出了GIOU的思想。

GIoU(Generalized Intersection over Union) 相较于 IoU 多了一个“Generalized”,通过引入预测框和真实框的最小外接矩形来获取预测框、真实框在闭包区域中的比重,从而解决了两个目标没有交集时梯度为零的问题。

引入了最小封闭形状C (可以把A,B包含在内)

在这里插入图片描述

公式定义如下:
在这里插入图片描述
其中C是两个框的最小外接矩形的面积。原有 IoU 取值区间为 [0,1],而 GIoU 的取值区间为[-1,1] ;在两个图像完全重叠时IoU=GIoU=1,当两个图像不相交的时候IoU=0,GIOU=-1

☀️优点

  1. 与IoU只关注重叠区域不同,GIOU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度;
  2. GIOU是一种IoU的下界,取值范围[ − 1 , 1 ] 。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1。因此,与IoU相比,GIoU是一个比较好的距离度量指标,解决了不重叠情况下,也就是IOU=0的情况,也能让训练继续进行下去。

⚡️缺点

但是目标框与预测框重叠的情况依旧无法判断:
在这里插入图片描述

2.2 🔥GIoU计算

上面我们已经计算出IOU的值,这里还需要计算由AD构成C的面积,也就是9x10=90;由GIOU公式可以计算出:
在这里插入图片描述

在这里插入图片描述

2.3 📌GIoU代码实现

import numpy as np

def GIoU(box1, box2):
    # 计算两个图像的最小外接矩形的面积
    x1, y1, x2, y2 = box1
    x3, y3, x4, y4 = box2
    area_c = (max(x2, x4) - min(x1, x3)) * (max(y4, y2) - min(y3, y1))

    # 计算中间矩形的宽高
    in_w = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_h = min(box1[3], box2[3]) - max(box1[1], box2[1])

    # 计算交集、并集面积
    inter = 0 if in_w <= 0 or in_h <= 0 else in_h * in_w
    union = (box2[2] - box2[0]) * (box2[3] - box2[1]) + \
            (box1[2] - box1[0]) * (box1[3] - box1[1]) - inter
    # 计算IoU
    iou = inter / union

    # 计算空白面积
    blank_area = area_c - union
    # 计算空白部分占比
    blank_count = blank_area / area_c
    giou = iou - blank_count
    return giou

if __name__ == "__main__":
    box1 = [0, 0, 6, 8]
    box2 = [3, 2, 9, 10]
    print(GIoU(box1, box2))

输出结果:

0.09743589743589745

三、✒️DIoU(Distance-IoU)

3.1 DIoU原理

🔥该原理是在19年⽂章Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression提出的
基于IoU和GIoU存在的问题,作者提出了两个问题:

  1. 直接最⼩化anchor框与⽬标框之间的归⼀化距离是否可⾏,以达到更快的收敛速度?
  2. 如何使回归在与⽬标框有重叠甚⾄包含时更准确、更快?

GIoU 虽然解决了 IoU 的一些问题,但是它并不能直接反映预测框与目标框之间的距离,DIoU(Distance-IoU)即可解决这个问题,它将两个框之间的重叠度、距离、尺度都考虑了进来,使得⽬标框回归变得更加稳定。DIoU的计算公式如下:
在这里插入图片描述
其中、b和bgt分别表示预测框与真实框的中心点坐标,p2(b,bgt)表示两个中心点的欧式距离(指在欧几里得空间中两点之间的距离),C 代表两个图像的最小外接矩形的对角线长度
在这里插入图片描述

☀️优点

DIoU 相较于其他两种计算方法的优点是:

  1. DIoU 可直接最小化两个框之间的距离,所以作为损失函数时 Loss 收敛更快。
  2. 与GIoU loss类似,DIoU loss在与⽬标框不重叠时,仍然可以为边界框提供移动⽅向。
  3. 在两个框完全上下排列或左右排列时,没有空白区域,此时 GIoU 几乎退化为了 IoU,但是 DIoU 仍然有效。
  4. DIOU还可以替换普通的IOU评价策略,应用于NMS中,使得NMS得到的结果更加合理和有效。
    在这里插入图片描述

⚡️缺点

DIoU 在完善图像重叠度的计算功能的基础上,实现了对图形距离的考量,但仍无法对图形长宽比的相似性进行很好的表示。

3.2 DIoU计算

通过计算可得,中心点 b、中心点 bgt的坐标分别为:(3,4)、(6,6)
在这里插入图片描述
此时的 DIoU 计算公式为:
在这里插入图片描述

3.3 📌DIoU代码实现

import numpy as np

def calculate_diou(box1, box2):
    # 计算两个图像的最小外接矩形的面积
    x1, y1, x2, y2 = box1
    x3, y3, x4, y4 = box2
    area_c = (max(x2, x4) - min(x1, x3)) * (max(y4, y2) - min(y3, y1))

    # 计算中间矩形的宽高
    in_w = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_h = min(box1[3], box2[3]) - max(box1[1], box2[1])

    # 计算交集、并集面积
    inter = 0 if in_w <= 0 or in_h <= 0 else in_h * in_w
    union = (box2[2] - box2[0]) * (box2[3] - box2[1]) + \
            (box1[2] - box1[0]) * (box1[3] - box1[1]) - inter

    # 计算IoU
    iou = inter / union

    # 计算中心点距离的平方
    center_dist = np.square((x1 + x2) / 2 - (x3 + x4) / 2) + \
                  np.square((y1 + y2) / 2 - (y3 + y4) / 2)

    # 计算对角线距离的平方
    diagonal_dist = np.square(max(x1, x2, x3, x4) - min(x1, x2, x3, x4)) + \
                    np.square(max(y1, y2, y3, y4) - min(y1, y2, y3, y4))

    # 计算DIoU
    diou = iou - center_dist / diagonal_dist
    return diou

box1 = [0, 0, 6, 8]
box2 = [3, 2, 9, 10]
print(calculate_diou(box1, box2))

输出结果:

0.1589460263493413

四、✒️CIoU(Complete-IoU)

4.1 CIoU原理

📜 AAAI 2020(与DIOU同一篇文章) 论文链接:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

论⽂考虑到bbox回归三要素中的⻓宽⽐还没被考虑到计算中,为此,进⼀步在DIoU的基础上提出了CIoU,同时考虑两个矩形的长宽比,也就是形状的相似性。所以CIOU在DIOU的基础上添加了长宽比的惩罚项。
在这里插入图片描述

其中, α \alpha α 是权重函数, ν \nu ν而用来度量长宽比的相似性。计算公式为:

在这里插入图片描述

☀️优点

  1. 更准确的相似性度量:CIOU考虑了边界框的中心点距离和对角线距离,因此可以更准确地衡量两个边界框之间的相似性,尤其是在目标形状和大小不规则的情况下。
  2. 鲁棒性更强:相比传统的IoU,CIOU对于目标形状和大小的变化更具有鲁棒性,能够更好地适应各种尺寸和形状的目标检测任务。

⚡️缺点

  1. 计算复杂度增加:CIOU引入了额外的中心点距离和对角线距离的计算,因此相比传统的IoU,计算复杂度有所增加,可能会增加一定的计算成本。
  2. 实现难度较高:CIOU的计算方式相对复杂,需要对边界框的坐标进行更多的处理和计算,因此在实现上可能会相对困难一些,需要更多的技术和经验支持。

4.2 CIoU计算

中心点 b、中心点 bgt的坐标分别为:(3,4)、(6,6),由此CIoU计算公式如下:
在这里插入图片描述

在这里插入图片描述

4.3 📌CIoU代码实现

import numpy as np
import IoU
import DIoU
# box : [左上角x坐标,左上角y坐标,右下角x坐标,右下角y坐标]
box1 = [0, 0, 6, 8]
box2 = [3, 2, 9, 10]
# CIoU
def CIoU(box1, box2):
    x1, y1, x2, y2 = box1
    x3, y3, x4, y4 = box2
    # box1的宽:box1_w,box1的高:box1_h,
    box1_w = x2 - x1
    box1_h = y2 - y1
    # box2的宽:box2_w,box2的高:box2_h,
    box2_w = x4 - x3
    box2_h = y4 - y3
    iou = IoU(box1, box2)
    diou = DIoU(box1, box2)

    # v用来度量长宽比的相似性
    v = (4 / (np.pi) ** 2) * (np.arctan(int(box2_w / box2_h)) - np.arctan(int(box1_w / box1_h)))
    # α是权重函数
    a = v / ((1 + iou) + v)
    ciou = diou - a * v
    return ciou

print(CIoU(box1, box2))

输出结果:

0.1589460263493413

五、✒️EIOU(Efficient-IoU)

5.1原理

📜发表在arXiv2022年:《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》上的论文

EIOU是在 CIOU 的惩罚项基础上将预测框和真实框的纵横比的影响因子拆开,分别计算预测框和真实框的长和宽,并且加入Focal聚焦优质的锚框,来解决 CIOU 存在的问题。先前基于iou的损失,例如CIOU和GIOU,不能有效地测量目标盒和锚点之间的差异,这导致BBR(边界框回归)模型优化的收敛速度慢,定位不准确。
在这里插入图片描述

针对上述问题,对CIOU损失进行了修正,提出了一种更有效的IOU损失,即EIOU损失,定义如下:
在这里插入图片描述
其中wc和hc是覆盖两个盒子的最小围框的宽度和高度。也就是说,我们将损失函数分为三个部分:IOU损失LIOU距离损失Ldis方向损失Lasp。这样,我们可以保留CIOU损失的有效特点。同时,EIOU损失直接使目标盒与锚盒宽度和高度的差值最小化,从而使收敛速度更快,定位效果更好。

5.2 代码实现

import numpy as np

def calculate_eiou(box1, box2):
    # 计算嵌入向量(这里简化为使用中心点坐标作为嵌入向量)
    center1 = np.array([(box1[0] + box1[2]) / 2, (box1[1] + box1[3]) / 2])
    center2 = np.array([(box2[0] + box2[2]) / 2, (box2[1] + box2[3]) / 2])

    # 计算嵌入向量之间的欧式距离
    euclidean_distance = np.linalg.norm(center1 - center2)

    # 计算目标框的面积
    area_box1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area_box2 = (box2[2] - box2[0]) * (box2[3] - box2[1])

    # 计算交集和并集的面积
    intersection = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0])) * \
                   max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))
    union = area_box1 + area_box2 - intersection

    # 计算EIOU
    eiou = 1 - intersection / union + euclidean_distance
    return eiou

box1 = [0, 0, 6, 8]
box2 = [3, 2, 9, 10]
print(calculate_eiou(box1, box2))

输出结果

4.374782044694758

六、✒️Focal-EIOU

6.1 原理

🔥高质量的 anchor 总是比低质量的 anchor 少很多,这也对训练过程有害无利。所以,需要研究如何让高质量的 anchor 起到更大的作用。
贡献:

  • 总结了现有回归 loss 的问题:最重要的是没有直接优化需要优化的参数
  • 提出了现有方法收敛速度较慢的问题,很多的低质量样本贡献了大部分的梯度,限制了框的回归
  • 提出了 Focal-EIoU,平衡高质量样本和低质量样本对 loss 的贡献,也就是提升高质量(IoU 大)样本的贡献,抑制低质量(IoU 小)样本的贡献

简单的方法不能直接适用于基于IOU的损失。因此,我们最后提出Focal-EIOU损失来改善EIOU损失的性能。使用IOU的值来重新加权EIOU损失,并获得Focal-EIOU损失,通过对难以分类的样本进行更加重视的损失函数设计,从而进一步提高目标检测算法的性能。如下所示:
在这里插入图片描述

其中 γ \gamma γ为控制异常值抑制程度的参数。该损失中的Focal与传统的Focal Loss有一定的区别,传统的Focal Loss针对越困难的样本损失越大,起到的是困难样本挖掘的作用;而根据上述公式:IOU越高的损失越大,相当于加权作用,给越好的回归目标一个越大的损失,有助于提高回归精度。

☀️优点

  1. EIOU在CIOU的基础上分别计算宽高的差异值取代了纵横比,宽高损失直接使预测框与真实框的宽度和高度之差最小,使得收敛速度更快;
  2. 在处理难以分类的样本时表现更好,能够进一步提高目标检测算法的鲁棒性和准确性。

⚡️缺点

在一般情况下可能会增加一定的计算复杂度,同时需要更多的参数调优和训练策略设计。

📌6.2 代码实现

import numpy as np

def calculate_focal_eiou(box1, box2, alpha=0.25, gamma=2):
    # 计算嵌入向量(这里简化为使用中心点坐标作为嵌入向量)
    center1 = np.array([(box1[0] + box1[2]) / 2, (box1[1] + box1[3]) / 2])
    center2 = np.array([(box2[0] + box2[2]) / 2, (box2[1] + box2[3]) / 2])

    # 计算嵌入向量之间的欧式距离
    euclidean_distance = np.linalg.norm(center1 - center2)

    # 计算目标框的面积
    area_box1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area_box2 = (box2[2] - box2[0]) * (box2[3] - box2[1])

    # 计算交集和并集的面积
    intersection = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0])) * \
                   max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))
    union = area_box1 + area_box2 - intersection

    # 计算Focal Loss
    iou = intersection / union
    focal_loss = -alpha * (1 - iou) ** gamma

    # 计算Focal-EIOU
    focal_eiou = 1 - iou + euclidean_distance + focal_loss
    return focal_eiou

box1 = [0, 0, 6, 8]
box2 = [3, 2, 9, 10]
print(calculate_focal_eiou(box1, box2))

输出结果:

4.2268530506119175

七、✒️SIOU(Soft Intersection over Union)

7.1原理

📜论文链接:《More Powerful Learning for Bounding Box Regression》

该论文中提出了一种新的损失函数 SIoU,其中考虑到所需回归之间的向量角度,重新定义了惩罚指标。应用于传统的神经网络和数据集,表明 SIoU 提高了训练的速度和推理的准确性。

在许多模拟和测试中揭示了所提出的损失函数的有效性。特别是,将 SIoU 应用于 COCO-train/COCO-val 与其他损失函数相比,提高了 +2.4% (mAP@0.5:0.95) 和 +3.6%(mAP@0.5)。

SIoU损失函数由4个Cost代价函数组成:

  • Angle cost
  • Distance cost
  • Shape cost
  • IoU cost

Angle cost(角度代价)
如果 α \alpha α<=45°的时候,需要先最小化 α \alpha α;如果 α \alpha α>45°,则需要最小化 β \beta β=90°- α \alpha α,从公式化简之后的结果可以得出,如果预测框和真实框沿着x轴或者y轴对齐的时候,此时 ⋀ \bigwedge =0,如果中心点角度为45°的时候,此时 ⋀ \bigwedge =1;
在这里插入图片描述
论文中计算公式:
Λ = 1 − 2 ∗ sin ⁡ 2 ( arcsin ⁡ ( x ) − π 4 ) \Lambda=1-2 * \sin ^2\left(\arcsin (x)-\frac{\pi}{4}\right) Λ=12sin2(arcsin(x)4π)

x = c h σ = sin ⁡ ( α ) σ = ( b c x g t − b c x ) 2 + ( b c y g t − b c y ) 2 c h = max ⁡ ( b c y g t , b c y ) − min ⁡ ( b c y g t , b c y ) \begin{gathered}x=\frac{c_h}{\sigma}=\sin (\alpha) \\ \sigma=\sqrt{\left(b_{c_x}^{g t}-b_{c_x}\right)^2+\left(b_{c_y}^{g t}-b_{c_y}\right)^2} \\ c_h=\max \left(b_{c_y}^{g t}, b_{c_y}\right)-\min \left(b_{c_y}^{g t}, b_{c_y}\right)\end{gathered} x=σch=sin(α)σ=(bcxgtbcx)2+(bcygtbcy)2 ch=max(bcygt,bcy)min(bcygt,bcy)

可以将x和 α \alpha α的值带入公式进行化简,其中 C h C_h Ch 为真实框和预测框中心点的高度差, σ \sigma σ 为真实框和预测框中心点的距离。

Λ = 1 − 2 ∗ sin ⁡ 2 ( arcsin ⁡ ( C h σ ) − π 4 ) = 1 − 2 ∗ sin ⁡ 2 ( α − π 4 ) = cos ⁡ 2 ( α − π 4 ) − sin ⁡ 2 ( α − π 4 ) = cos ⁡ ( 2 α − π 2 ) = sin ⁡ ( 2 α ) \begin{aligned} & \Lambda=1-2 * \sin ^2\left(\arcsin \left(\frac{C_h}{\sigma}\right)-\frac{\pi}{4}\right) \\ & =1-2 * \sin ^2\left(\alpha-\frac{\pi}{4}\right) \\ & =\cos ^2\left(\alpha-\frac{\pi}{4}\right)-\sin ^2\left(\alpha-\frac{\pi}{4}\right) \\ & =\cos \left(2 \alpha-\frac{\pi}{2}\right) \\ & =\sin (2 \alpha)\end{aligned} Λ=12sin2(arcsin(σCh)4π)=12sin2(α4π)=cos2(α4π)sin2(α4π)=cos(2α2π)=sin(2α)

Distance cost(距离成本)
真实值边界框与边界框预测值之间距离的计算方案。
在这里插入图片描述

根据上面定义的角度成本重新定义距离成本:
Δ = ∑ t = x , y ( 1 − e − γ ρ t ) \Delta=\sum_{t=x, y}\left(1-e^{-\gamma \rho_t}\right) Δ=t=x,y(1eγρt)
where
ρ x = ( b c x g t − b c x c w ) 2 , ρ y = ( b c y g t − b c y c h ) 2 , γ = 2 − Λ \rho_x=\left(\frac{b_{c_x}^{g t}-b_{c_x}}{c_w}\right)^2, \rho_y=\left(\frac{b_{c_y}^{g t}-b_{c_y}}{c_h}\right)^2, \gamma=2-\Lambda ρx=(cwbcxgtbcx)2,ρy=(chbcygtbcy)2,γ=2Λ

α → 0 \alpha \rightarrow 0 α0,距离成本的贡献大大减少.与之相反 α \alpha α 越接近 π 4 \frac{\pi}{4} 4π, Δ \Delta Δ就越大,随着角度的增加,问题变得更加困难。 所以,随着角度的增加 γ \gamma γ 的时间优先于距离值。当 α → 0 \alpha \rightarrow 0 α0,距离成本将变为常规成本。

Shape cost(形状成本)
形状成本定义为:
Ω = ∑ t = w , h ( 1 − e − ω t ) θ \Omega=\sum_{t=w, h}\left(1-e^{-\omega_t}\right)^\theta Ω=t=w,h(1eωt)θ
其中:
ω w = ∣ w − w g t ∣ max ⁡ ( w , w g t ) , ω h = ∣ h − h g t ∣ max ⁡ ( h , h g t ) \omega_w=\frac{\left|w-w^{g t}\right|}{\max \left(w, w^{g t}\right)}, \omega_h=\frac{\left|h-h^{g t}\right|}{\max \left(h, h^{g t}\right)} ωw=max(w,wgt)wwgt,ωh=max(h,hgt)hhgt

𝜃 的值定义了形状的成本,并且其值对于每个数据集都是唯一的。 𝜃 的值是这个方程中非常重要的一项,它控制着对形状成本的关注程度。如果𝜃的值设置为1,它将立即优化形状,从而损害形状的自由运动。为了计算 𝜃 的值,对每个数据集使用遗传算法,实验上 𝜃 的值接近 4,作者为此参数定义的范围是从 2 到 6。

➤ SIOU最后的回归损失为:
L b o x = 1 − I o U + Δ + Ω 2 L_{b o x}=1-I o U+\frac{\Delta+\Omega}{2} Lbox=1IoU+2Δ+Ω

八、✒️Wise-IoU

论文摘要:
📜近年来的研究大多假设训练数据中的示例有较高的质量,致力于强化边界框损失的拟合能力。但我们注意到目标检测训练集中含有低质量示例,如果一味地强化边界框对低质量示例的回归,显然会危害模型检测性能的提升。Focal-EIoU v1 被提出以解决这个问题,但由于其聚焦机制是静态的,并未充分挖掘非单调聚焦机制的潜能。基于这个观点,我们提出了动态非单调的聚焦机制,设计了 Wise-IoU (WIoU)。动态非单调聚焦机制使用“离群度”替代 IoU 对锚框进行质量评估,并提供了明智的梯度增益分配策略。该策略在降低高质量锚框的竞争力的同时,也减小了低质量示例产生的有害梯度。这使得 WIoU 可以聚焦于普通质量的锚框,并提高检测器的整体性能。将WIoU应用于最先进的单级检测器 YOLOv7 时,在 MS-COCO 数据集上的 AP-75 从 53.03% 提升到 54.50%

关于Wise-IoU的详细介绍可以观看这篇论文:Wise-IoU 作者导读:基于动态非单调聚焦机制的边界框损失

WIOU主要有以下几点优势:

  1. 相对面积加权
    Wiou损失函数的计算中引入了交集与并集的比值,从而对不同大小的目标框进行了相对面积加权。这样可以避免小目标对损失函数的影响过大,提升了对小目标的检测效果。
  2. 解决类别不平衡问题
    在目标检测任务中,经常会遇到类别不平衡的情况,即某些类别的目标数量明显少于其他类别。Wiou损失函数通过引入权重因子,可以对不同类别的目标进行不同程度的加权,从而解决了类别不平衡问题。
  3. 高度可定制化
    Wiou损失函数的计算中,可以根据实际需求调整交集和并集的权重因子,从而对不同任务和数据集进行高度定制化的适配。这使得Wiou损失函数在实际应用中具有更广泛的适用性。

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

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

相关文章

深入理解Java中的TCP连接:三次握手和四次挥手

欢迎来到我的博客&#xff01;今天我们将一起探索网络通信的奥秘。在Java编程中&#xff0c;我们经常会涉及到网络通信&#xff0c;而TCP协议是实现可靠数据传输的重要协议之一。在建立TCP连接和断开连接的过程中&#xff0c;三次握手和四次挥手是至关重要的步骤。本文将深入探…

rt-thread(5.0版本)之sfud组件的使用问题记录(w25q128存储模块)

前言 记录一下5.0版本时使用官方推荐的函数与底层驱动存在的不兼容问题 相关宏定义 // -----------------------------SPI 组件 #define RT_USING_SPI #define RT_USING_SFUD #define RT_SFUD_USING_SFDP #define RT_SFUD_USING_FLASH_INFO_TABLE #define RT_SFUD_SPI_MAX_HZ…

生骨肉冻干喂养有哪些优点?对猫身体好的生骨肉冻干分享

随着科学养猫知识的普及&#xff0c;生骨肉冻干喂养越来越受到养猫人的青睐。生骨肉冻干不仅符合猫咪的饮食天性&#xff0c;还能提供均衡的营养&#xff0c;有助于维护猫咪的口腔和消化系统健康。很多铲屎官看到了生骨肉冻干喂养的好处&#xff0c;打算开始生骨肉冻干喂养&…

ES 常见面试题及答案

目录 es 写入数据流程 es 删除数据流程 es 读数据流程 es 部署的服务有哪些角色 es 的实现原理 es 和lucence 关系 如何提高写入效率 提高搜索效率 es doc value指的啥 分片指的啥&#xff0c;定义后可不可义再修改 深分页如何优化 对于聚合操作是如何优化的 元数据…

微服务高级篇(二):分布式事务+Seata架构

文章目录 一、分布式事务理论基础1.1 CAP定理1.2 BASE理论 二、初始Seata2.1 Seata的架构2.2 部署TC【事务协调者】服务2.3 微服务集成Seata 三、实践3.1 XA模式3.1.1 原理3.1.2 实现 3.2 AT模式3.2.1 原理3.2.2 脏写问题以及解决方案【全局锁超时处理】3.2.3 实现 3.3 TCC模式…

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xff0c;采用贪心算法的策略&#…

【漏洞复现】Progress Kemp LoadMaster 命令注入漏洞(CVE-2024-1212)

0x01 产品简介 Progress Kemp LoadMaster是一款高性能的应用交付控制器&#xff0c;具有可扩展性&#xff0c;支持实体硬件和虚拟机的负载均衡。它提供了当今应用服务所需的各种功能&#xff0c;包括深度用户验证、资安防护&#xff08;如WAF/IPS/DDoS防护&#xff09;以及零信…

Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe“

错误提示&#xff1a;Cannot run program “C:\Program Files\Java\jdk-17\bin\java.exe” 解决办法&#xff1a; 检查环境变量是否配置是否正确检查项目环境是否正确&#xff0c;可能会出现多个JDK版本&#xff0c;将不需要的删除

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix)

Spring Cloud(Finchley版本)系列教程(四) 断路器(Hystrix) 为了更好的浏览体验&#xff0c;欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一、断路器Hystrix hystrix是Netlifx开源的一款容错框架&#xff0c;防雪崩利器&#xff0c;具备服务降级&#xff0c;…

如何实现在固定位置的鼠标连点

鼠大侠的鼠标连点功能是免费的 浏览器搜索下载鼠大侠&#xff0c;指定连点间隔和启动快捷键 点击设置&#xff0c;指定点击位置

2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年熔化焊接与热切割证模拟考试题库及熔化焊接与热切割理论考试试题是由安全生产模拟考试一点通提供&#xff0c;熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材&#xff0c;熔化焊接与热切割大…

部分字符函数与字符串函数的讲解

说到字符函数&#xff0c;我们见过很多&#xff0c;比如strlen&#xff0c;strcpy&#xff0c;strcat...... 这时候就会有人说还有sizeof&#xff0c;其实sizeof不是库函数&#xff0c;他其实是操作符 但是你听说过以下库函数么&#xff1f; 所以说字符串的函数有很多&#xff…

Photomator:专业级照片编辑的利器

Photomator软件是一款功能强大的照片编辑和管理工具&#xff0c;专注于提供高质量的图像处理体验和便捷的工作流程。以下是关于Photomator软件功能特色的详细介绍&#xff1a; 高级颜色调整功能&#xff1a;Photomator提供了大量前沿的颜色调整工具&#xff0c;包括AI驱动的自…

【数据结构】单链表详解

前言 为了解决顺序表存在的一些问题&#xff0c;我们引入了单链表~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 顺序表存在一定的问题 与顺序表的对比 认识链表 链表结构 打印节点 头文件SList.h 源…

opencv安装(C++)并配置vs

准备工作&#xff1a; 1.opencv安装包(此教程使用4.9) 2.visual studio(此教程使用vs2019) opencv安装&#xff1a; 1、下载opencv&#xff1a; 1.1 官网下载&#xff1a;Releases - OpenCV 1.2 百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1NpEoFjbbyQJtFD…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

基于springboot+vue的火锅店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

javaSwing推箱子游戏

一、简介 策略性游戏可以锻炼人的思维能力还能缓解人的压力&#xff0c;使人们暂时忘却生活当中的烦恼&#xff0c;增强人们的逻辑思维能力&#xff0c;游戏的艺术美也吸引着越来越多的玩家和厂商&#xff0c;寓教于乐&#xff0c;在放松人们心情的同时还可以活跃双手。在人类…

支小蜜校园防欺凌系统怎么识别到学生打架?

校园欺凌行为已经成为一个全球性的社会问题&#xff0c;它不仅影响了学生的身心健康&#xff0c;也破坏了校园的和谐氛围。为了有效预防和应对这一现象&#xff0c;许多学校开始引入校园防欺凌系统。那么&#xff0c;校园防欺凌系统是如何识别到学生打架的呢&#xff1f;本文将…

腾讯云轻量2核2G3M服务器优惠价61元一年性能测评

阿里云轻量应用服务器2核2G3M带宽优惠价一年61元&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域节…