各种 IoU 损失变体
IoU损失及其各种变体已经在密集预测任务中展现出了优异的效果。这里做一个简单的罗列与梳理。
IoU
∣ P ∩ G ∣ ∣ P ∪ G ∣ \frac{|P \cap G|}{|P \cup G|} ∣P∪G∣∣P∩G∣
IoU Loss
L I o U = 1 − ∣ P ∩ G ∣ ∣ P ∪ G ∣ L_{IoU} = 1 - \frac{|P \cap G|}{|P \cup G|} LIoU=1−∣P∪G∣∣P∩G∣
- ∣ ⋅ ∣ | \cdot | ∣⋅∣ 表示区域面积或者是框的包围面积。
- 取值范围: [ 0 , 1 ] [0, 1] [0,1]
IoU Loss 的不足:
- 如果两个边界框没有重叠部分(non-overlapping),IoU=0,模型参数的梯度为 0 得不到更新。所以,使用 IoU 损失函数训练神经网络的收敛速度会很慢。
- 如果不同的预测框与真值框有相同的 IoU,无法衡量不同的预测框的好坏。
CVPR 2019 | Generalized IoU Loss
GIoU:
I o U − ∣ C − P ∪ G ∣ ∣ C ∣ IoU - \frac{|C - P \cup G|}{|C|} IoU−∣C∣∣C−P∪G∣
- C C C 表示包围预测框 P P P 和真值框 G G G 的最小框。
- 取值范围: ( − 1 , 1 ] (-1, 1] (−1,1]
- 完全重合时,GIoU = IoU,此时值为 1。
- 当两个框重叠区域为 0,间隔无限远的时候,此时 GIoU 值趋于 -1。
GIoU Loss:
L G I o U = 1 − G I o U = 1 − I o U + ∣ C − P ∪ G ∣ ∣ C ∣ L_{GIoU} = 1 - GIoU = 1 - IoU + \frac{|C - P \cup G|}{|C|} LGIoU=1−GIoU=1−IoU+∣C∣∣C−P∪G∣
C C C 的作用是作为一个惩罚项将预测框向真实框靠拢。对于预测框与真实框不重叠的情况,GIoU 通过向目标框缓慢移动来增加二者的重叠区域以达到最大化预测框与真实框之间重叠区域的目的,这是一个不断迭代的过程。使用 GIoU 可以解决预测框与真实框无重叠区域造成的梯度消失问题,可以得到比 MSE 和 IoU 损失函数更高精度的预测框,但是存在迭代速度慢和边界框回归错误的问题。
GIoU Loss 不足:
- 如果两个框处于包含状态,GIoU 就退变为 IoU,起不到大小、形状上的额外约束。
- 还有一种特殊情况,GIoU 也会退变为 IoU,即两个框某个边完全重合,即 C = P ∪ G C=P \cup G C=P∪G。
AAAI 2020 | Distance IoU Loss
L D I o U = 1 − I o U + ρ 2 ( P , G ) c 2 L_{DIoU} = 1 - IoU + \frac{\rho^2(P, G)}{c^2} LDIoU=1−IoU+c2ρ2(P,G)
- ρ 2 ( P , G ) \rho^2(P, G) ρ2(P,G) 表示预测框 P P P 与真实框 G G G 中心点的 欧式距离,即 2 范数( [ ∑ i ( p i − g i ) 2 ] 1 / 2 [\sum_i (p_i - g_i)^2]^{1/2} [∑i(pi−gi)2]1/2)。
- c c c 表示覆盖预测框与真实框的最小闭合框的对角线长度。
- 当两个框无线接近时,IoU Loss = GIoU Loss = DIoU loss = 0
- 当两个框无穷远时,IoU Loss 等于 1,GIoU Loss 和 DIoU Loss 趋于 2
DIoU 中提出了两个问题,并解决了第一个问题:
- 能否直接优化预测框和真值框之间的距离来使模型快速收敛。
- 当预测框和真值框有重叠时,能否更加准确的做回归。
DIoU 损失使用了预测框与真实框中心点之间的归一化距离,对于回归问题是尺度不变的。
与 GIoU 损失一样,DIoU 损失也为非重叠情况下的预测框提供了移动方向;与 GIoU 损失不一样的是,DIoU 损失直接最小化了预测框和真实框之间的距离,即使在真实框具有水平和垂直方向时,其收敛速度也比 GIoU 要快得多。DIoU 损失可以加快神经网络的训练过程并且得到更准确的边界框回归结果,将其用于非极大值抑制 (NMS) 过程中的指标时,可以在有遮挡的情况下提供更为鲁棒的结果。
但是 DIOU 损失函数计算过程只包含了边界框与预测框重叠面积和中心点距离,并没有考虑两框的长宽比。
AAAI 2020 | Complete IoU
L C I o U = 1 − I o U + ρ 2 ( P , G ) c 2 + α v L_{CIoU} = 1 - IoU + \frac{\rho^2(P, G)}{c^2} + \alpha v \\ LCIoU=1−IoU+c2ρ2(P,G)+αv
- v = 4 π 2 ( arctan w G h G − arctan w P h P ) 2 v = \frac{4}{\pi^2}(\arctan \frac{w_G}{h_G} - \arctan \frac{w_P}{h_P})^2 v=π24(arctanhGwG−arctanhPwP)2 用来度量长宽比的相似性。
- α = v 1 − I o U + v \alpha = \frac{v}{1 - IoU + v} α=1−IoU+vv 为权重系数。
可以知道,CIoU 损失包含了以下 3 个几何因子:
- 预测框与真实框重叠区域面积的 IoU 损失。
- 预测框与真实框中心点之间归一化的距离。
- 预测框与真实框纵横比差异。
CIoU 同时解决了上面的两个问题。同时考虑了长宽比。
- 当预测框和真值框距离较远时,权重变小,他们的长宽比相对来说重要程度变小,模型同时拉近预测框和真值框的中心点距离。
- 当预测框和真值框距离较近时,权重变大,长宽比重要程度变大,模型优化预测框和真值框的长宽比,模型依然还要拉近预测框和真值框的中心点距离。
与 GIoU 和 DIoU 一样,CIoU 也是通过迭代将预测框向真实框移动,但是 CIoU 所需要的迭代次数更少,并且得到的预测框与真实框的纵横比更为接近。
Enhanced Completed IoU
后续的工作改进了 CIoU 的权重系数的取值:
L C I o U = 1 − I o U + ρ 2 ( P , G ) c 2 + α v L_{CIoU} = 1 - IoU + \frac{\rho^2(P, G)}{c^2} + \alpha v \\ LCIoU=1−IoU+c2ρ2(P,G)+αv
- v = 4 π 2 ( arctan w G h G − arctan w P h P ) 2 v = \frac{4}{\pi^2}(\arctan \frac{w_G}{h_G} - \arctan \frac{w_P}{h_P})^2 v=π24(arctanhGwG−arctanhPwP)2 用来度量长宽比的相似性。
- α = { 0 if I o U < 0.5 v 1 − I o U + v if I o U ≥ 0.5 \alpha = \begin{cases} 0 & \text{ if } IoU < 0.5 \\ \frac{v}{1 - IoU + v} & \text{ if } IoU \ge 0.5 \end{cases} α={ 01−IoU+vv if IoU<0.5 if IoU≥0.5
该公式表明:
- 在 IoU<0.5 时,CIoU 退变为 DIoU,只考虑预测框和真值框之间的中心点距离。
- 在 IoU>0.5 时,模型才同时考虑预测框和真值框之间的中心点距离,以及预测框的长宽比和真值框的长宽比的相似程度。随着 IoU 的变大,预测框和真值框越相近,权重变大,长宽比的重要程度也变大,模型更加注重长宽比的细节优化。
Arxiv 2021 | Efficient IoU Loss
L E I o U = L I o U + L d i s + L a s p = 1 − I o U + ρ 2 ( P , G ) c 2 + ρ 2 ( w P , w G ) w C 2 + ρ 2 ( h P , h G ) h C 2 = 1 − I o U + ρ 2 ( P , G ) w C 2 + h C 2 + ρ 2 ( w P , w G ) w C 2 + ρ 2 ( h P , h G ) h C 2 \begin{align} L_{EIoU} & = L_{IoU} + L_{dis} + L_{asp} \\ & = 1 - IoU + \frac{\rho^2(P, G)}{c^2} + \frac{\rho^2(w_P, w_G)}{w_C^2} + \frac{\rho^2(h_P, h_G)}{h_C^2} \\ & = 1 - IoU + \frac{\rho^2(P, G)}{w_C^2 + h_C^2} + \frac{\rho^2(w_P, w_G)}{w_C^2} + \frac{\rho^2(h_P, h_G)}{h_C^2} \end{align} LEIoU=LIoU+Ldis+Lasp=1−IoU+c2ρ2(P,G)+wC2ρ2(wP,wG)+hC2ρ2(hP,hG)=1−IoU+wC2+hC2ρ2(P,G)+wC2ρ2(wP,wG)+hC2ρ2(hP,hG)
EIoU 在 CIoU 的基础上将长宽比拆开,明确地衡量了三个几何因素的差异,即重叠区域、中心点和边长,同时引入 Fcoal loss 解决了难易样本不平衡的问题。认为简单的任务框回归不需要用过大的权重来学习,而复杂的任务框回归需要大权重来学习,进而将 EIOU loss 进行改进提出 Focal EIOU loss 公式见下:
L F o c a l − E I o U = I o U γ L E I o U L_{Focal-EIoU} = IoU^\gamma L_{EIoU} LFocal−EIoU=IoUγLEIoU
- 一般 γ \gamma γ 设置为 0.5 即可。
- 当任务简单的时候,IOU 接近为 1,整体退化为 EIoU loss。
- 当任务困难的时候,IOU 值很小,而 EIoU 的值会变大。由于 IOU 的值小于 1,说明变换小于 EIoU Loss 变换。总体遇到难的任务时 loss 会增大,增加对难的回归样本的学习。
NeurlPS 2021 | αIoU
αIoU 将现有的基于 IoU 的损失进行了一个推广。
L I o U = 1 − I o U ⇒ L α − I o U = 1 − I o U α L G I o U = 1 − I o U + ∣ C − P ∪ G ∣ ∣ C ∣ ⇒ L α − G I o U = 1 − I o U α + ( ∣ C − P ∪ G ∣ ∣ C ∣ ) α L D I o U = 1 − I o U + ρ 2 ( P , G ) c 2 ⇒ L α − I o U = 1 − I o U α + ρ 2 α ( P , G ) c 2 α L C I o U = 1 − I o U + ρ ( P , G ) c 2 + β v ⇒ L α − C I o U = 1 − I o U α + ρ 2 α ( P , G ) c 2 α + ( β v ) α \begin{align} L_{IoU} = 1 - IoU & \Rightarrow L_{\alpha-IoU} = 1 - IoU^\alpha \\ L_{GIoU} = 1 - IoU + \frac{|C - P \cup G|}{|C|} & \Rightarrow L_{\alpha-GIoU} = 1 - IoU^\alpha + (\frac{|C - P \cup G|}{|C|})^{\alpha} \\ L_{DIoU} = 1 - IoU + \frac{\rho^2(P, G)}{c^2} & \Rightarrow L_{\alpha-IoU} = 1 - IoU^\alpha + \frac{\rho^{2\alpha}(P, G)}{c^{2\alpha}} \\ L_{CIoU} = 1 - IoU + \frac{\rho(P, G)}{c^2} + \beta v & \Rightarrow L_{\alpha-CIoU} = 1 - IoU^\alpha + \frac{\rho^{2\alpha}(P, G)}{c^{2\alpha}} + (\beta v)^\alpha \\ \end{align} LIoU=1−IoULGIoU=1−IoU+∣C∣∣C−P∪G∣LDIoU=1−IoU+c2ρ2(P,G)LCIoU=1−IoU+c2ρ(P,G)+βv⇒Lα−IoU=1−IoUα⇒Lα−GIoU=1−IoUα+(∣C∣∣C−P∪G∣)α⇒Lα−IoU=1−IoUα+c2αρ2α(P,G)⇒Lα−CIoU=1−IoUα+c2αρ2α(P,G)+(βv)α
使得 αIoU 可以显着超越现有的基于 IoU 的损失,通过调节α,使探测器更灵活地实现不同水平的 bbox 回归精度,并且αIoU 对小数据集和噪声的鲁棒性更强。
并且通过实验发现,在大多数情况下,取α=3 的效果最好。
Arxiv 2022 | SIoU Loss
- 论文:SIoU Loss: More Powerful Learning for Bounding Box Regression
- 公式参考代码(论文中关于 L d i s t a n c e L_distance Ldistance 的描述有点问题,这里形式参考了第三方的实现):https://aistudio.baidu.com/aistudio/projectdetail/4198420
L S I o U = 1 − I o U + L d i s t a n c e + L s h a p e 2 L d i s t a n c e = ∑ t ∈ { x , y } 1 − e − γ ρ t , ρ x = ( G c x − P c x C w ) 2 , ρ y = ( G c y − P c y C h ) 2 , γ = 2 − angle cost = 2 − [ 1 − 2 ∗ sin 2 ( arcsin ( x ) − π 4 ) ] = 2 − sin ( 2 α ) L s h a p e = ∑ t = { w , h } ( 1 − e − ω t ) θ , ω w = ∣ G w − P w ∣ max ( G w , P w ) , ω h = ∣ G h − P h ∣ max ( G h , P h ) \begin{align} L_{SIoU} & = 1 - IoU + \frac{L_{distance} + L_{shape}}{2} \\ L_{distance} & = \sum_{t \in \{x,y\}}1 - e^{- \gamma \rho_t}, \rho_x = (\frac{G_{cx} - P_{cx}}{C_{w}})^2, \rho_y=(\frac{G_{cy} - P_{cy}}{C_h})^2, \\ & \gamma=2-\text{angle cost} = 2 - [1 - 2 * \sin^2(\arcsin(x) - \frac{\pi}{4})] = 2 - \sin(2\alpha) \\ L_{shape} & = \sum_{t = \{w,h\}}(1 - e^{-\omega_t})^\theta, \omega_w=\frac{|G_w-P_w|}{\max(G_w,P_w)}, \omega_h=\frac{|G_h-P_h|}{\max(G_h,P_h)} \end{align} LSIoULdistanceLshape=1−IoU+2Ldistance+Lshape=t∈{ x,y}∑1−e−γρt,ρx=(CwGcx−Pcx)2,ρy=(ChGcy−Pcy)2,γ=2−angle cost=2−[1−2∗sin2(arcsin(x)−4π)]=2−sin(2α)=t={ w,h}∑(1−e−ωt)θ,ωw=max(Gw,Pw)∣Gw−Pw∣,ωh=max(Gh,Ph)∣Gh−Ph∣
SIoU 提出了一种新的损失函数,重新定义了惩罚度量,考虑了期望回归之间的向量夹角。
传统的目标检测损失函数依赖于边界框回归指标的聚合,例如预测框和真实框(即 GIoU、CIoU 等)的距离、重叠区域和纵横比。然而,迄今为止提出和使用的方法都没有考虑期望的真实框和预测框之间不匹配的方向。这种不足导致收敛速度较慢且效率较低,因为预测框在训练过程中可能会“四处游荡”,最终会产生一个更差的模型。
参考链接
- 目标检测中的 IoU loss 变种 - Mr.Jian 的文章 - 知乎 https://zhuanlan.zhihu.com/p/406384631
- 一文搞懂 EIoU 与 SIoU - 弗拉基米尔的文章 - 知乎 https://zhuanlan.zhihu.com/p/537428926
- 《一文搞懂 IoU 发展历程》GIoU、DIoU、CIoU、EIoU、αIoU、SIoU:https://blog.csdn.net/weixin_43694096/article/details/126455488