目标检测(损失函数):目标定位损失—GIoU


C V P R   2019 CVPR~2019 CVPR 2019 有一篇介绍目标检测定位损失函数的 p a p e r paper paper

1、提出问题

目标检测的主要任务之一是对目标定位。通常我们使用边界框来表示它。衡量目标检测定位性能的主要指标是交并比 I o U IoU IoU。但是我们在设计损失函数时通常使用 m s e mse mse 等损失函数来优化模型对目标的定位结果。但是,这类损失函数并不总是能够很好地反映定位精度。如下图 1 1 1 所示:

图 1: (a) l 2 l_2 l2 距离相等但是 I o U IoU IoU 和 G I o U GIoU GIoU 不相等;(b) l 1 l_1 l1 距离相等但是 I o U IoU IoU 和 G I o U GIoU GIoU 不相等

因此,考虑直接使用 I o U IoU IoU 衡量目标定位损失。 L I o U = 1 − I o U L_{IoU}=1-IoU LIoU=1−IoU

I o U IoU IoU 还有一个优点:尺度不变性

但是这样做也存在以下几点问题:

  1. 如果两个框没有相交,则 I o U = 0 IoU=0 IoU=0 这时无法反映两个框的距离(相似程度)。并且损失函数此时不存在梯度,无法通过梯度下降进行训练。
  2. 即使相同的 I o U IoU IoU 也不能代表检测框的定位效果相同。 如图所示: 图 2: 以上几种情况下均有 I o U = 0.33 IoU=0.33 IoU=0.33 但是显然从左到右定位效果越来越差。

2、解决方案

图 3: G I o U GIoU GIoU 计算方法
算法思路如下: 输入:任意两个凸几何 输出: G I o U GIoU GIoU 对于 A A A 和 B B B 首先计算最小闭包 C C C。 I o U = ∣ A ∩ B ∣ ∣ A ∪ B ∣ IoU=frac{|Acap B|}{|Acup B|} IoU=∣A∪B∣∣A∩B∣ G I o U = I o U − ∣ C ( A ∪ B ) ∣ ∣ C ∣ GIoU=IoU-frac{|Cackslash(Acup B)|}{|C|} GIoU=IoU−∣C∣∣C(A∪B)∣

G I o U GIoU GIoU 具有如下特点:

  1. L G I o U = 1 − G I o U L_{GIoU}=1-GIoU LGIoU=1−GIoU 损失函数具有一般损失函数所有的性质,如,非负性。
  2. 对尺度不敏感,即尺度不变性。
  3. G I o U GIoU GIoU 是 I o U IoU IoU 的一个下界,当两个几何越相似,该下界越紧。即, lim ⁡ A → B G I o U ( A , B ) = I o U ( A , B ) lim _{A ightarrow B} GIoU(A, B)=IoU(A, B) limA→BGIoU(A,B)=IoU(A,B)。
  4. ∀ A , B ⊆ S , 0 ≤ I o U ( A , B ) ≤ 1 forall A, B subseteq mathbb{S}, 0 leq IoU(A, B) leq 1 ∀A,B⊆S,0≤IoU(A,B)≤1,但是, ∀ A , B ⊆ S , − 1 ≤ G I o U ( A , B ) ≤ 1 forall A, B subseteq mathbb{S}, -1 leq GIoU(A, B) leq 1 ∀A,B⊆S,−1≤GIoU(A,B)≤1

损失函数计算步骤如下图 4 4 4:

图 4: L I o U L_{IoU} LIoU 和 L G I o U L_{GIoU} LGIoU 计算方法
经验分享 程序员 微信小程序 职场和发展