今天和大家分享一篇ECCV2020中关于旋转目标检测的文章:
源码地址:https://github.com/clobotics/piou
论文地址:https://arxiv.org/abs/2007.09584
动机
在检测旋转目标时,使用传统的Smooth L1损失会更关注减小角度误差(angle error)而不是减小全局IoU。如下图中图(a)所示,图中绿色的框是预测得到的Bounding Box,红色的框是ground truth。
在图(a)中,虽然2个目标的IOU一致,但是明显看到“细长”的目标检测得不太好。专注于减小角度误差很容易使得远离中心的点在Bounding Box外面。
为了解决上述问题,作者提出了PIoU(Pixels-IoU),并以此为基础构造PIoU损失,从图(b)可以看出,相比于Smooth L1损失,PIoU损失对于图中的“细长”目标有较大的值,因此能对其检测结果进一步优化。
PIoU(Pixels-IoU)Loss
假设存在一个Bounding Box和一个点,如下图中图(a)所示
定义如下指示函数用来表示点是否在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′)∈MlnPIoU(b,b′)
上式中的 b b b表示预测框, b ′ {b}^{\prime} b′表示ground truth。M表示预测框和ground truth的匹配集合,当2者IoU大于0.5时认为匹配。
PIoU损失的示意图如下图所示:
实验结果
在baseline检测器的基础上使用PIoU损失的性能提升情况如下所示:
- Retail50K(本文提出的公开数据集)
- HRSC2016
- DOTA