PIoU Loss|用于提高旋转目标检测器性能的新型损失函数

今天和大家分享一篇ECCV2020中关于旋转目标检测的文章:

源码地址:https://github.com/clobotics/piou

论文地址:https://arxiv.org/abs/2007.09584
PIoU Loss|用于提高旋转目标检测器性能的新型损失函数

动机

在检测旋转目标时,使用传统的Smooth L1损失会更关注减小角度误差(angle error)而不是减小全局IoU。如下图中图(a)所示,图中绿色的框是预测得到的Bounding Box,红色的框是ground truth。
PIoU Loss|用于提高旋转目标检测器性能的新型损失函数

在图(a)中,虽然2个目标的IOU一致,但是明显看到“细长”的目标检测得不太好。专注于减小角度误差很容易使得远离中心的点在Bounding Box外面。

为了解决上述问题,作者提出了PIoU(Pixels-IoU),并以此为基础构造PIoU损失,从图(b)可以看出,相比于Smooth L1损失,PIoU损失对于图中的“细长”目标有较大的值,因此能对其检测结果进一步优化。

PIoU(Pixels-IoU)Loss

假设存在一个Bounding Box和一个点,如下图中图(a)所示
PIoU Loss|用于提高旋转目标检测器性能的新型损失函数
定义如下指示函数用来表示点是否在Bounding Box内部:

δ ( p i , j ∣ b ) = { 1 , d i , j w ≤ w 2 , d i , j h ≤ h 2 0 ,  otherwise  \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)=\left\{\begin{array}{ll} 1, & d_{i, j}^{w} \leq \frac{w}{2}, d_{i, j}^{h} \leq \frac{h}{2} \\ 0, & \text { otherwise } \end{array}\right. δ(pi,j​∣b)={1,0,​di,jw​≤2w​,di,jh​≤2h​ otherwise ​

定义两个框的“intersection area” S b ∩ b ′ S_{b \cap b^{\prime}} Sb∩b′​和“union area” S b ∪ b ′ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}} Sb∪b′​:

S b ∩ b ′ = ∑ p i , j ∈ B b , b ′ δ ( p i , j ∣ b ) δ ( p i , j ∣ b ′ ) S b ∪ b ′ = ∑ p i , j ∈ B b , b ′ δ ( p i , j ∣ b ) + δ ( p i , j ∣ b ′ ) − δ ( p i , j ∣ b ) δ ( p i , j ∣ b ′ ) \begin{array}{c} S_{b \cap b^{\prime}}=\sum_{p_{i, j} \in B_{b, b^{\prime}}} \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right) \\ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}}=\sum_{\boldsymbol{p}_{i, j} \in B_{b, b^{\prime}}} \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)+\delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right)-\delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) \delta\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right) \end{array} Sb∩b′​=∑pi,j​∈Bb,b′​​δ(pi,j​∣b)δ(pi,j​∣b′)Sb∪b′​=∑pi,j​∈Bb,b′​​δ(pi,j​∣b)+δ(pi,j​∣b′)−δ(pi,j​∣b)δ(pi,j​∣b′)​

上式中的 B b , b ′ B_{b, b^{\prime}} Bb,b′​表示能包含 b b b和 b ′ b^{\prime} b′的最小水平框。

上述公式可以用来表示PIoU,但是不可微,无法用于反向传播中。因此作者使用如下公式近似上文中的指示函数:

F ( p i , j ∣ b ) = K ( d i , j w , w ) K ( d i , j h , h ) F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)=K\left(d_{i, j}^{w}, w\right) K\left(d_{i, j}^{h}, h\right) F(pi,j​∣b)=K(di,jw​,w)K(di,jh​,h)

K ( d , s ) = 1 − 1 1 + e − k ( d − s ) K(d, s)=1 - \frac{1}{1+e^{-k(d-s)}} K(d,s)=1−1+e−k(d−s)1​

F ( p i , j ∣ b ) F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) F(pi,j​∣b)的函数图如上图中图(b)所示。因此两个框的“intersection area” S b ∩ b ′ S_{b \cap b^{\prime}} Sb∩b′​和“union area” S b ∪ b ′ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}} Sb∪b′​可以近似表示为:

S b ∩ b ′ ≈ ∑ p i , j ∈ B b , b ′ F ( p i , j ∣ b ) F ( p i , j ∣ b ′ ) S b ∪ b ′ ≈ ∑ p i , j ∈ B b , b ′ F ( p i , j ∣ b ) + F ( p i , j ∣ b ′ ) − F ( p i , j ∣ b ) F ( p i , j ∣ b ′ ) \begin{array}{c} S_{b \cap b^{\prime}} \approx \sum_{p_{i, j} \in B_{b, b^{\prime}}} F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right) \\ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}} \approx \sum_{\boldsymbol{p}_{i, j} \in B_{b, b^{\prime}}} F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right)+F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right)-F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}\right) F\left(\boldsymbol{p}_{i, j} \mid \boldsymbol{b}^{\prime}\right) \end{array} Sb∩b′​≈∑pi,j​∈Bb,b′​​F(pi,j​∣b)F(pi,j​∣b′)Sb∪b′​≈∑pi,j​∈Bb,b′​​F(pi,j​∣b)+F(pi,j​∣b′)−F(pi,j​∣b)F(pi,j​∣b′)​

在实际使用时,为减少计算量,使用如下公式近似表示 S b ∪ b ′ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}} Sb∪b′​:

S b ∪ b ′ = w × h + w ′ × h ′ − S b ∩ b ′ S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}}=w \times h+w^{\prime} \times h^{\prime}-S_{\boldsymbol{b} \cap \boldsymbol{b}^{\prime}} Sb∪b′​=w×h+w′×h′−Sb∩b′​

PIoU可以表示为:

P I o U ( b , b ′ ) = S b ∩ b ′ S b ∪ b ′ P I o U\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right)=\frac{S_{\boldsymbol{b} \cap \boldsymbol{b}^{\prime}}}{S_{\boldsymbol{b} \cup \boldsymbol{b}^{\prime}}} PIoU(b,b′)=Sb∪b′​Sb∩b′​​

定义PIoU损失如下:

L p i o u = − ∑ ( b , b ′ ) ∈ M ln ⁡ P IoU ⁡ ( b , b ′ ) ∣ M ∣ L_{p i o u}=\frac{-\sum_{\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right) \in M} \ln P \operatorname{IoU}\left(\boldsymbol{b}, \boldsymbol{b}^{\prime}\right)}{|M|} Lpiou​=∣M∣−∑(b,b′)∈M​lnPIoU(b,b′)​

上式中的 b b b表示预测框, b ′ {b}^{\prime} b′表示ground truth。M表示预测框和ground truth的匹配集合,当2者IoU大于0.5时认为匹配。

PIoU损失的示意图如下图所示:
PIoU Loss|用于提高旋转目标检测器性能的新型损失函数

实验结果

在baseline检测器的基础上使用PIoU损失的性能提升情况如下所示:

  • Retail50K(本文提出的公开数据集)PIoU Loss|用于提高旋转目标检测器性能的新型损失函数
  • HRSC2016
    PIoU Loss|用于提高旋转目标检测器性能的新型损失函数
  • DOTA
    PIoU Loss|用于提高旋转目标检测器性能的新型损失函数
上一篇:SPOJ PRIME1 - Prime Generator(线性筛)


下一篇:Codeforces Round #725 (Div. 3)