GIoU、DIoU、CIoU详解
GIoU、DIoU、CIoU
随着IoU Loss在目标检测领域的应用,最近有几篇典型的工作提出去改进IoU Loss,本文将依次介绍GIoU、DIoU和CIoU Loss
GIoU
优势
- 首先可以实现较全场景以类IoU Loss为目标直接优化,使得优化目标和最终的评估目标一致。由于IoU Loss的关键问题在于当两个物体没有交集的时候,它就退化为常数1,失去优化目标
- 相比于传统的回归loss,它具备尺度不变形
- 极限情况下,GIoU(A,B) = IoU(A, B)
核心实现
公式
G
I
o
U
(
A
,
B
)
=
I
o
U
(
A
,
B
)
−
∣
C
∣
−
∣
A
U
B
∣
∣
C
∣
GIoU(A, B) = IoU(A, B) - \frac{|C| - |AUB|}{|C|}
GIoU(A,B)=IoU(A,B)−∣C∣∣C∣−∣AUB∣
L
o
s
s
g
i
o
u
=
1
−
G
I
o
U
Loss_{giou} = 1 - GIoU
Lossgiou=1−GIoU
Code
# 计算C
A = np.random.random([N, 4])
B = np.random.random([N, 4])
C = np.zero_like(A)
C[:, :2] = np.min(A[:, :2], B[:, :2])
C[:, 2:] = np.min(A[:, 2:], B[:, 2:])
GIoU的特性
- 使用GIoU作为距离的时候,L = 1-GIoU可以确保其始终是非负的。不确定性?对称性?三角不等性?
- 三角不等式:以三角形的任两边之和总大于第三边这一几何事实为背景的不等式叫做三角形不等式
- 尺度不变的,不论框的大小,我们主要是看两个框之间的比例。
- GIoU使用是IoU的下限,GIoU <= IoU
- GIoU的取值范围是[-1,1]
DIoU(Distance-IoU)
Motivation
-
GIoU训练过程较慢,作者做的模拟实验见下图
-
GIoU倾向得到一个较大的bbox
-
GIoU 区分两个对象之间的对齐方式比较间接,仅通过引入C的方式来反应重叠的方式,不够直接。如下图所示。第二幅图展示来当GIoU一样的情况下,DIoU是不一致的(前提是,中心点重合的情况下认为拟合的最好)。
Contributions
- 提出了基于IoU Loss的一般性范式,这是我认为最大的贡献
- 提出了DIoU Loss,在IoU loss的基础上将central之间的距离作为惩罚项
- 在各个数据集和detector上都取得了不错的效果
Detail
- 范式:作为认为IoU loss应该优化的目标包括三个方面
- 两个框之间的重合度
- 中心点之间的距离
- 长宽比的相似性
- 作者基于上述的1&&2,提出了DIoU Loss,结合1&&2&&3提出了CIoU Loss(C is complete)
- DIoU Loss,定义如下所示,其中关键中心点之间距离的惩罚项的分子代表两个框中心点之间的欧式距离。分母是GIoU中矩阵C的对角线变长。分母起到了归一化的作用。
L D I o U = 1 − I o U + p 2 ( b , b g t ) c 2 L_{DIoU} = 1 - IoU + \frac{p^2(b,b_{gt})}{c^2} LDIoU=1−IoU+c2p2(b,bgt) - CIoU的定义如下所示,它在DIoU的基础上增加了对长宽比的惩罚项
v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 v=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})^2 v=π24(arctanhgtwgt−arctanhw)2
L C I o U = L G I o U + α v L_{CIoU} = L_{GIoU} + \alpha v LCIoU=LGIoU+αv
α = v ( 1 − I o U ) + v \alpha=\frac{v}{(1-IoU)+v} α=(1−IoU)+vv
Result
Discussion
- 正如文中所说,Faster RCNN的改进没有SSD和YOLO那么大,因为Faster RCNN在第二阶段的时候框基本上已经有一个较好的位置,不会出现距离GT较远的情况
- 可能不适应于密集场景,尤其是当两个物体本身就相聚较近的时候,central也会较近。尤其是DIoU NMS的时候会将这些物体消除。这种场景可能还是Multiple Instance Prediction效果较好。