网易首页 > 网易号 > 正文 申请入驻

IoU已经out了,试试这几个变体:GIoU、DIoU和CIoU介绍与对比分析

0
分享至


你是否曾经训练过一个模型,在评估指标上表现出色,但在实际可视化边界框时,却发现它在许多情况下都失败了?这可能是因为像简单交并比(IoU)这样的标准指标并没有很好地捕捉到你所期望的模型行为。

简单的IoU在当前阶段已经显得有些过时了。

IoU作为一个评估指标可能还算不错,尽管它仍然存在一些问题。但重要的是,其实已经有很多更新更智能的指标。让我们来看看其中的几个,这样你可能就会重新考虑是否要在模型训练、评估和推理中继续使用IoU这个过时的指标。

为什么IoU很重要

在目标检测任务中,IoU指标实际上贯穿于模型开发的每个阶段:

  1. 评估阶段:在评估模型性能时,通常使用IoU指标将预测边界框与真实边界框进行比较。
  2. 训练阶段:在优化模型定位能力时,IoU指标的可微分版本常被用作回归损失函数。
  3. 推理阶段:在推理过程中,非极大值抑制(NMS)通常被用来处理同一目标被预测出多个边界框的问题。为了解决这个问题,需要比较两个预测框,如果它们的IoU很高,就丢弃置信度较低的那个框。

最近的一些进展,如Yolo-V10和类DETR模型中的"无NMS"训练策略,设法避免了第三种情况。但是第一种和第二种用例在未来可能仍将继续存在。

所以IoU是非常重要的,那么如何能够提高他的效果呢?让我们来看看这些IoU变体!

1、交并比(IoU)

首先从基础开始——所谓的交并比究竟是什么?

这是目标检测领域的首选评估指标。计算两个边界框的IoU时,如果它们有重叠区域,就测量重叠面积,然后除以两个框所覆盖的总面积。

下面是与上图相对应的代码:

def iou(boxA, boxB):
xA = max(boxA[0], boxB[0])
yA = max(boxA[1], boxB[1])
xB = min(boxA[2], boxB[2])
yB = min(boxA[3], boxB[3])
# Compute the area of intersection rectangle
interArea = max(0, xB - xA) * max(0, yB - yA)
# Compute the area of both the prediction and ground-truth rectangles
boxAArea = (boxA[2] - boxA[0]) * (boxA[3] - boxA[1])
boxBArea = (boxB[2] - boxB[0]) * (boxB[3] - boxB[1])
# Compute the IoU
iou = interArea / float(boxAArea + boxBArea - interArea)
return iou

IoU简单且在许多情况下都适用,但它也有缺陷。比如说当两个框很好地重叠时,它的效果不错;但如果两个框完全不重叠呢?那IoU就变成了零!

这种情况在小目标上经常发生,这也是为什么这个指标偏向于大目标的原因。正是IoU缺乏细微表达能力的问题,促使人们开发出了更复杂的变体。

2、广义交并比(GIoU)

当两个框不重叠时,IoU就失效了但如果我们能够度量不重叠的两个框之间的距离呢?

这就是广义IoU(GIoU)。GIoU不仅度量重叠面积,还通过考虑最小外接矩形框的面积来度量两个框之间的距离。

我们用C表示包围两个框的最小矩形框的面积。这样一来,即便是两个框没有重叠(常规IoU为零),GIoU仍然能够提供有价值的反馈,告诉我们预测框在尝试捕获目标方面的效果如何。这有助于我们改进模型训练,使其更适合评估。

GIoU能够提供对模型学习过程更深入的洞察,特别是在训练的早期阶段,因为早就其节点的模型的定位能力往往还很糟糕。

def giou(boxA, boxB):
# Calculate IoU
iou_value = iou(boxA, boxB)
# Calculate the smallest enclosing box
xC_min = min(boxA[0], boxB[0])
yC_min = min(boxA[1], boxB[1])
xC_max = max(boxA[2], boxB[2])
yC_max = max(boxA[3], boxB[3])
# Area of the smallest enclosing box
enclosingArea = (xC_max - xC_min) * (yC_max - yC_min)
# Area of union
unionArea = boxAArea + boxBArea - interArea
# Calculate GIoU
giou = iou_value - (enclosingArea - unionArea) / enclosingArea
return giou

3、距离交并比(DIoU)

为什么我们需要最小外接矩形框呢,难道不能直接度量两个框之间的距离吗?

在训练的初始阶段,使用DIoU作为损失函数可以帮助模型更快地改进定位能力,因为它为不重叠的框提供了更加明确的梯度信号。

DIoU在常规IoU的基础上,额外考虑了两个框中心点之间的欧氏距离d:

在DIoU的计算中,用c的平方(即包围两个框的最小外接矩形框的对角线长度的平方)对距离d进行归一化。

DIoU根据预测框中心与真实框中心之间的距离来惩罚预测结果。对于不重叠的两个框,DIoU损失会随着它们之间距离的平方而增大,而GIoU损失则有一定的饱和趋势

这使得模型在处理不重叠框时能够更快地学习。但是,DIoU损失有时会导致梯度信号过于极端,从而导致权重更新幅度过大,尤其是在使用一些带噪声的标注分配算法(如DETR类模型中的匈牙利算法)时。

DIoU的另一个缺点在于,它过于关注两个框中心的距离,而忽略了框本身形状的差异。

究竟哪种损失函数最适合你呢,还是取决于具体的任务、数据和训练设置。建议都试一试,看看DIoU是否能给你带来更好的效果。

import numpy as np
def diou(boxA, boxB):
# Calculate IoU
iou_value = iou(boxA, boxB)
# Center of boxA and boxB
centerA = [(boxA[0] + boxA[2]) / 2, (boxA[1] + boxA[3]) / 2]
centerB = [(boxB[0] + boxB[2]) / 2, (boxB[1] + boxB[3]) / 2]
# Distance between the centers
center_distance = np.linalg.norm(np.array(centerA) - np.array(centerB))
# Diagonal distance of the enclosing box
xC_min = min(boxA[0], boxB[0])
yC_min = min(boxA[1], boxB[1])
xC_max = max(boxA[2], boxB[2])
yC_max = max(boxA[3], boxB[3])
diagonal_distance = np.linalg.norm([xC_max - xC_min, yC_max - yC_min])
# Calculate DIoU
diou = iou_value - (center_distance ** 2) / (diagonal_distance ** 2)
return diou

4、完全交并比(CIoU)

我们如何在DIoU的基础上同时优化两个框的形状差异呢?这就引出了CIoU

这个"超级损失函数"集成了前面提到的各种IoU变体的优点。它类似于DIoU,但额外引入了一项用于惩罚长宽比差异的项。可以把CIoU看作是边界框回归任务的"终极Boss"!

CIoU的公式,其中引入了两个新的项:α和v。

v项度量了两个框的长宽比差异。它的定义相对复杂,但可以类比为一种广义上的欧氏距离。

α是一个权重项,用于平衡IoU项和长宽比差异项。当预测框与真实框的重合度很低时,α会趋近于0,此时CIoU退化为DIoU;而当重合度较高时,α会趋近于1,此时CIoU会更多地考虑两个框的形状差异。

CIoU可能是当前最前沿的目标检测系统中使用的最复杂的IoU变体。它同时考虑了:

  1. 两个框中心点之间的距离(像DIoU一样)
  2. 两个框的形状/大小的相似程度
  3. 并通过权重项α来平衡二者

使用CIoU确实能够给我带来一些性能提升,但相比DIoU而言,提升幅度并不算太大。这也与最初提出DIoU和CIoU的论文《Distance-IoU损失》的实验结果基本一致。下图展示了他们在一个实验中使用不同IoU变体所得到的收敛曲线。

需要注意的是,为了提高训练稳定性,对于定位很差的预测框,我们通常将α项设为0。这样可以保证模型先专注于缩小两个框的距离,而不去过早地优化形状差异。

下面是一个PyTorch实现的CIoU损失函数:

def ciou(boxA, boxB):
# Calculate DIoU
diou_value = diou(boxA, boxB)
iou_value = iou(boxA, boxB)
# Width and height of the boxes
widthA, heightA = boxA[2] - boxA[0], boxA[3] - boxA[1]
widthB, heightB = boxB[2] - boxB[0], boxB[3] - boxB[1]
# Aspect ratio penalty
v = (4 / (np.pi ** 2)) * np.power(np.arctan(widthA / heightA) - np.arctan(widthB / heightB), 2)
alpha = v / ((1 - iou_value) + v) if iou_value > 0.5 else 0
# CIoU calculation
ciou = diou_value + alpha * v
return ciou

总结

GIoU、DIoU和CIoU这三个变体都有各自的独到之处,它们在一定程度上弥补了普通IoU在处理不重叠、距离较远或形状差异较大的边界框时的不足。

这些新的指标不仅仅给出一个量化的分数,它们的各项组成部分还能告诉我们,预测结果好坏的原因究竟是什么

虽然本文主要聚焦在训练阶段,但请注意,这些指标实际上可以用于所有三个场景:训练、评估和推理。所以建议在所有场合都使用CIoU,但在评估时,可能还需要一些时间来建立对其数值的直观理解。

当然最后还是我们一直说的那句话到底应该使用哪种IoU变体组合,还是要看你自己的实际情况!每个都试一试,一定不会有错的。

https://avoid.overfit.cn/post/fd8eff2b11f14aba890d45649d72a44a

作者:Benjamin Bodner

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
突发!赖清德返回台湾,派出4架F-16接机护航,解放军或有大动作

突发!赖清德返回台湾,派出4架F-16接机护航,解放军或有大动作

共工之锚
2026-05-06 00:27:51
公安部原主持常务工作的副部长白景富逝世,享年81岁

公安部原主持常务工作的副部长白景富逝世,享年81岁

澎湃新闻
2026-05-06 18:00:27
阿联酋报复不隔夜!翼龙无人机突袭,幻影2000轰炸,伊朗基地爆炸

阿联酋报复不隔夜!翼龙无人机突袭,幻影2000轰炸,伊朗基地爆炸

知法而形
2026-05-06 17:04:46
制造业月薪9000没人来,2.4亿人挤外卖:是年轻人变懒了吗?

制造业月薪9000没人来,2.4亿人挤外卖:是年轻人变懒了吗?

老特有话说
2026-05-05 15:30:29
为什么发达国家对中国都不友好?

为什么发达国家对中国都不友好?

新浪财经
2026-05-04 07:26:54
活塞1比0骑士:坎宁安不再是一个人了

活塞1比0骑士:坎宁安不再是一个人了

张佳玮写字的地方
2026-05-06 10:22:22
恭喜!国乒21岁王牌复苏轰3-0:霸气握拳庆祝,王皓等到他觉醒

恭喜!国乒21岁王牌复苏轰3-0:霸气握拳庆祝,王皓等到他觉醒

李喜林篮球绝杀
2026-05-06 19:11:33
狂盖12帽也没用?大将军辣评马刺:注定出局 文班连小个子都打不了

狂盖12帽也没用?大将军辣评马刺:注定出局 文班连小个子都打不了

仰卧撑FTUer
2026-05-06 07:18:11
荒唐至极!欧洲议会勒令废除普通话法案?中国主权绝不容外人置喙

荒唐至极!欧洲议会勒令废除普通话法案?中国主权绝不容外人置喙

行者聊官
2026-05-06 14:16:30
赵心童未被体育总局认定为世界冠军,丁俊晖梁文博15年前获认定

赵心童未被体育总局认定为世界冠军,丁俊晖梁文博15年前获认定

米修体育
2026-05-06 00:41:18
吴宜泽夺冠,最开心的除了他的父母,可能就是敢扑进冠军怀里的她

吴宜泽夺冠,最开心的除了他的父母,可能就是敢扑进冠军怀里的她

揽星河的笔记
2026-05-05 20:20:47
中国运-20B:全球最大在产运输机,腾飞在即

中国运-20B:全球最大在产运输机,腾飞在即

心灵得以滋养
2026-05-06 12:44:08
男子把降压药掰开吃30分钟后昏迷!医生提醒:部分降压药掰开或咬碎或可致死亡,这几类药千万不能掰开吃

男子把降压药掰开吃30分钟后昏迷!医生提醒:部分降压药掰开或咬碎或可致死亡,这几类药千万不能掰开吃

极目新闻
2026-05-02 22:35:48
伦敦世乒赛:大逆转!国乒3:1晋级8强,王楚钦拿2分,梁靖崑输球

伦敦世乒赛:大逆转!国乒3:1晋级8强,王楚钦拿2分,梁靖崑输球

国乒二三事
2026-05-06 19:10:53
最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

周军律师聊案子
2026-04-21 09:50:16
国际油价大跌

国际油价大跌

澎湃新闻
2026-05-06 18:34:03
吴宜泽夺冠,最激动的除卖房托举他的父母,还有敢扑进他怀里的她

吴宜泽夺冠,最激动的除卖房托举他的父母,还有敢扑进他怀里的她

林轻吟
2026-05-06 17:00:10
国际足联傻眼了,原来除了中国,还有多个国家集体拒买转播权

国际足联傻眼了,原来除了中国,还有多个国家集体拒买转播权

古史青云啊
2026-05-06 19:56:28
广东首节G1压制北京!三外合砍22分,杰曼周琦齐爆,替补轰12分!

广东首节G1压制北京!三外合砍22分,杰曼周琦齐爆,替补轰12分!

篮球资讯达人
2026-05-06 19:59:28
瑞士选美小姐婚后竟成“零件”?丈夫肢解、摘子宫,细节看吐!

瑞士选美小姐婚后竟成“零件”?丈夫肢解、摘子宫,细节看吐!

新欧洲
2026-05-05 18:47:19
2026-05-06 20:51:00
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1986文章数 1461关注度
往期回顾 全部

科技要闻

“马斯克不懂AI”:OpenAI当庭戳老底

头条要闻

知情人士:伊朗将同意将铀浓缩材料运出伊朗

头条要闻

知情人士:伊朗将同意将铀浓缩材料运出伊朗

体育要闻

活塞1比0骑士:坎宁安不再是一个人了

娱乐要闻

神仙友谊!杨紫连续10年为张一山庆生

财经要闻

最新GDP!全国30强城市,又变了

汽车要闻

领克10/领克10+ 无论能源形式 领克都要快乐

态度原创

时尚
教育
亲子
家居
艺术

春天穿“黑色”太沉闷?学会这些搭配小技巧,显瘦减龄还洋气

教育要闻

“潮”人出动!冲冲冲!

亲子要闻

跟着荷兰奶奶学识颜色

家居要闻

大胆前卫 时尚大宅

艺术要闻

震撼!康斯坦丁摄影作品里的性感曲线让人惊艳!

无障碍浏览 进入关怀版