Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
解决了什么问题
为了解决以下l损失函数的问题:
{IoU:无法解决目标框与预测框无交集的情况GIoU:收敛速度慢DIoU:预测框与目标框不一致在物体检测中, 通常用到的损失函数是IoU(Intersection over Union)和GIoU(generalized IoU), 虽然GIoU补充了IoU在两个box不重叠时候梯度消失无法检测的情况, 但是GIoU还是存在问题(收敛速度慢)
The problem of GIoU
绿色框为真实目标框, 黑色框为首次出现的预测框, 蓝色框是GIoU_Loss预测框, 红色框为DIoU_Loss预测框.
当GIoU与目标框没有交集时, 它必须扩大自己的面积与目标产生交集, 这是导致它收敛慢的主要原因.所以DIoU的提出便是为了解决这个问题. 而DIoU依然存在一个问题, 预测框的大小和目标框不一致. CIoU_Loss的提出便是为了解决这一个问题
方法
LCIoU=1−IoU+ρ2(b,bgt)c2+αυv=4π2(arctanwgthgt−arctanwh)2α=v(1−IoU)+vIoU=|B∩Bgt||B∪Bgt|Bgt=(xgt,ygt,wgt,hgt)B=(x,y,w,h)参数:
A | B | C |
---|---|---|
1 | bgt | 真实目标框 |
2 | b | 预测框(x,y,w,h)或(x1,y1,x2,y2) |
3 | ρ | 欧氏距离 |
4 | c | 真实框与预测框的最小包围框的对角线长度 |
5 | ρ(b,bgt) | 真实框与预测框两中心的距离 |
检测算法
数据集
- PASCAL VOC(VOC 2007和VOC 2012)
- MS COCO 2017
效果
Distinguish
在GIoU和IoU这种情况下相同无法区分时, DIoU依然可以区分
Regression error
在Fig4可以看到, 回归误差E(T,n)在DIoU上是最好的, 所有点都能处在一个低的误差范围
Regression error
On YOLOv3 with PASCAL VOC 2007
DIoU loss 可以比IoU增加3.29% AP和6.02% AP75
Quantitative comparison of YOLOv3 trained using LIoU (baseline), LGIoU , LDIoU and LCIoU .
On SSD with PASCAL VOC 2007
Table2 comparison on SSD VOC2007
On Faster R-CNN with MS COCO 2017
Comparison of DIoU_NMS and original NMS
我们在阈值为[0.43,0.48]范围内比较原NMS和DIoU_NMS。从图9可以看出,DIoU_NMS在各个方面都优于原NMS
所以不需要仔细调整阈值ε也能得到表现比原NMS好的结果。
Comparison of DIoU-NMS and original NMS for different thresholds ε. The models of YOLO v3 and SSD are trained
on PASCAL VOC 07+12 using LCIoU.
改进方向
Alpha-IoU: A Family of Power Intersection over Union Losses for Bounding Box Regression
在所有IoU上添加一个α次方,由实验数据可知, α∈[2,4]效果不错,且α=3时最好.
LIoU=1−IoU⇒Lα−IoU=1−IoUαLGIoU=1−IoU+|C−B∪Bgt||C|⇒Lα−GIoU=1−IoUα+(|C−B∪Bgt||C|)αLDIoU=1−IoU+ρ2(b,bgt)c2⇒Lα−DIoU=1−IoUα+ρ2α(b,bgt)c2αLCIoU=1−IoU+ρ2(b,bgt)c2+βv⇒Lα−CIoU=1−IoUα+ρ2α(b,bgt)c2α+(βv)αCode精读
- 此代码位于yolov5/utils/metrics.py, box1为预测框, box2为真实目标框.
- 在yolov5/utils/loss.py中, 其x1y1x2y2=False,传入的box参数为(x,y,w,h)
- 在物体识别中, 坐标系原点一般为左上角, 整个图像处于第一象限,所以x,y没有负值, clamp(0)只会识别出两个框不相交的情况
扩展
在Yolov11中应用到的其它Loss
损失函数 | 使用场景 | 优点 | 缺点 | 论文出处 |
---|---|---|---|---|
VarifocalLoss | 目标检测中的分类任务,特别是处理不平衡数据(如前景和背景样本不平衡)。 | 1. 动态调整样本权重,关注难分类样本。 2. 适用于不平衡数据。 |
1. 计算复杂度较高。 2. 需要调整超参数(如 alpha 和 gamma )。 |
Varifocal Loss: A Dynamic Loss for Dense Object Detection |
FocalLoss | 目标检测中的分类任务,处理类别不平衡问题。 | 1. 减少易分类样本的损失贡献,关注难分类样本。 2. 缓解类别不平衡问题。 |
1. 需要调整超参数(如 gamma 和 alpha )。2. 对噪声敏感。 |
Focal Loss for Dense Object Detection |
DFLoss | 目标检测中的边界框回归任务,用于预测边界框的分布。 | 1. 通过分布预测提高边界框回归精度。 2. 适用于密集目标检测。 |
1. 计算复杂度较高。 2. 需要调整 reg_max 参数。 |
Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection |
BboxLoss | 目标检测中的边界框回归任务,结合 IoU 损失和 DFL 损失。 | 1. 结合 IoU 和 DFL,提高边界框回归精度。 2. 适用于通用目标检测任务。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 IoU 和 DFL 的改进,无单独论文。 |
RotatedBboxLoss | 旋转目标检测中的边界框回归任务,处理旋转边界框。 | 1. 支持旋转边界框的回归。 2. 适用于旋转目标检测任务。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 IoU 和 DFL 的改进,无单独论文。 |
KeypointLoss | 关键点检测任务,如人体姿态估计。 | 1. 支持关键点检测任务。 2. 通过欧氏距离计算损失。 |
1. 对关键点标注质量敏感。 2. 需要调整 sigmas 参数。 |
基于 COCO 关键点评估方法,无单独论文。 |
v8DetectionLoss | YOLOv8 目标检测任务,结合分类、边界框回归和 DFL 损失。 | 1. 综合性强,适用于通用目标检测。 2. 支持多任务学习。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 YOLOv8 的改进,无单独论文。 |
v8SegmentationLoss | YOLOv8 实例分割任务,结合检测和分割损失。 | 1. 支持实例分割任务。 2. 结合检测和分割损失,提高分割精度。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 YOLOv8 的改进,无单独论文。 |
v8PoseLoss | YOLOv8 姿态估计任务,结合关键点检测和分类损失。 | 1. 支持姿态估计任务。 2. 结合关键点检测和分类损失,提高姿态估计精度。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 YOLOv8 的改进,无单独论文。 |
v8ClassificationLoss | YOLOv8 分类任务,用于图像分类。 | 1. 简单高效,适用于分类任务。 2. 使用交叉熵损失,易于实现。 |
1. 仅适用于分类任务,不支持多任务学习。 | 基于交叉熵损失的改进,无单独论文。 |
v8OBBLoss | YOLOv8 旋转目标检测任务,处理旋转边界框。 | 1. 支持旋转目标检测任务。 2. 结合分类、边界框回归和 DFL 损失。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 YOLOv8 的改进,无单独论文。 |
E2EDetectLoss | 端到端目标检测任务,结合一对多和一对一检测策略。 | 1. 结合一对多和一对一检测,提高检测精度。 2. 适用于端到端检测任务。 |
1. 计算复杂度较高。 2. 需要调整超参数。 |
基于 YOLOv8 的改进,无单独论文。 |
VarifocalLoss
L=α⋅pγ⋅(1−q)+q⋅BCE(p,q)
FocalLoss
L=−αt(1−pt)γlog(pt)
DFLoss
L=CrossEntropy(p,yl)⋅wl+CrossEntropy(p,yr)⋅wr
BboxLoss
FG 表示所有正样本的集合wi=∑jtarget_scoresijS=target_scores_sum 是正样本目标得分的总和IoU 损失:Liou=1S∑i∈FGwi⋅(1−IoU(ˆbi,bi))if reg_max≤1DFL 损失:Ldfl=1S∑i∈FGwi⋅DFLoss(pred_disti,ti)if reg_max>1RotatedBboxLoss
F 表示所有正样本的集合wi=∑jtarget_scoresijS=∑i∈Fwi 是正样本目标得分的总和, 归一化因子Liou=1S∑i∈Fwi⋅(1−probiou(ˆbi,bi))if reg_max≤1Ldfl=1S∑i∈Fwi⋅DFLoss(pred_disti,ti)if reg_max>1其中probiou是计算基于高斯分布的 IoU,它使用协方差矩阵和Bhattacharyya距离衡量 OBB 之间的不确定性差异。
- 输入 OBB 数据:函数接收两个形状为
(N,5)
的张量,表示N
个旋转边界框,格式为(x, y, w, h, r)
。 - 计算中心坐标:拆分输入 OBB,获取
(x, y)
作为中心坐标。 - 计算协方差矩阵:
_get_covariance_matrix(obb)
计算每个 OBB 的协方差矩阵的参数(a, b, c)
,表示高斯分布的形状。 ai=w2i12cos2ri+h2i12sin2ri,bi=w2i12sin2ri+h2i12cos2ri,ci=(w2i12−h2i12)cosrisinri,
- 计算 Bhattacharyya 距离(BD):
T1
计算中心点分布差异;T2
计算相关性项;T3
计算协方差矩阵的相似性项;BD = T1 + T2 + T3
,限制 BD 取值范围以保持数值稳定性。 {t1=14⋅(a1+a2)(y1−y2)2+(b1+b2)(x1−x2)2(a1+a2)(b1+b2)−(c1+c2)2+ϵt2=12⋅(c1+c2)(x2−x1)(y1−y2)(a1+a2)(b1+b2)−(c1+c2)2+ϵt3=12⋅ln((a1+a2)(b1+b2)−(c1+c2)24max
- 计算 Hellinger 距离(HD):
HD = sqrt(1 - exp(-BD))
,用于转换 BD 到相似度衡量。- Hellinger 距离的离散概率分布计算公式:H(P,Q)=\sqrt[]{\frac{1}{2} \sum_{i}^{}(\sqrt[]{p_i}-\sqrt[]{q_i} })^2
- 计算最终的 Probiou:
IoU = 1 - HD
,得到 Probiou 评分。
- 可选 CIoU 计算:
- 计算宽高比的影响
v
; - 计算 alpha 作为权重调整 IoU;
return iou - v * alpha
返回 CIoU 结果。
- 计算宽高比的影响