論文提出了IoU-based的DIoU loss和CIoU loss,以及建議使用DIoU-NMS替換經典的NMS方法,充分地利用IoU的特性進行優化。並且方法能夠簡單地遷移到現有的算法中帶來性能的提升,實驗在YOLOv3上提升了5.91mAP,值得學習
論文:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
Introduction
IoU
IoU是目標檢測里面很重要的一個指標,通過預測的框和GT間的交集與並集的比例進行計算,經常用於評價bbox的優劣 。但一般對bbox的精調都采用L2范數,而一些研究表明這不是最優化IoU的方法,因此出現了IoU loss
IoU loss
IoU loss顧名思義就是直接通過IoU計算梯度進行回歸,論文提到IoU loss的無法避免的缺點:當兩個box無交集時,IoU=0,很近的無交集框和很遠的無交集框的輸出一樣,這樣就失去了梯度方向,無法優化。IoU loss的實現形式有很多種,除公式2外,還有UnitBox的交叉熵形式和IoUNet的Smooth-L1形式
這里論文主要討論的類似YOLO的檢測網絡,按照GT是否在cell判斷當前bbox是否需要回歸,所以可能存在無交集的情況。而一般的two stage網絡,在bbox regress的時候都會卡$IoU\ge 0.5$,不會對無交集的框進行回歸
GIoU loss
GIou loss在IoU loss的基礎上增加一個懲罰項,$C$為包圍預測框$B$和$B^{gt}$的最小區域大小,當bbox的距離越大時,懲罰項將越大
盡管GIoU解決了IoU的梯度問題,但他仍然存在幾個限制:
- 如圖1所示,在訓練過程中,GIoU傾向於先增大bbox的大小來增大與GT的交集,然后通過公式3的IoU項引導最大化bbox的重疊區域
- 如圖2中的包含情況,GIoU會退化成IoU
- 由於很大程度依賴IoU項,GIoU需要更多的迭代次數來收斂,特別是水平和垂直的bbox(后面會分析)。一般地,GIoU loss不能很好地收斂SOTA算法,反而造成不好的結果
DIoU
綜合上面的分析,論文提出Distance-IoU(DIoU) loss,簡單地在IoU loss基礎上添加一個懲罰項,該懲罰項用於最小化兩個bbox的中心點距離。如圖1所示,DIoU收斂速度和效果都很好,而且DIoU能夠用於NMS的計算中,不僅考慮了重疊區域,還考慮了中心點距離。另外,論文考慮bbox的三要素,重疊區域,中心點距離和長寬比,進一步提出了Complete IoU(CIoU) loss,收斂更快,效果更好
Analysis to IoU and GIoU Losses
為了全面地分析IoU loss和GIoU的性能,論文進行了模擬實驗,模擬不同的距離、尺寸和長寬比的bbox的回歸情況
Simulation Experiment
如圖3所示,實驗選擇7個不同長寬比(1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1)的單元box(area=1)作為GT,單元框的中心點固定在(7, 7),而實驗共包含5000 x 7 x 7個bbox,且分布是均勻的:
- Distance:在中心點半徑3的范圍內均勻分布5000中心點,每個點帶上7種scales和7種長寬比
- Scale:每個中心點的尺寸分別為0.5, 0.67, 0.75, 1, 1.33, 1.5, 2
- Aspect ratio:每個中心點的長寬比(=為1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1
給定一個loss函數$\mathcal{L}$,可以通過梯度下降來模擬bbox優化的過程。對於預測的bbox $B_i$,$B_i^t$為$t$階段的結果,$\triangledown B_i{t-1}$為$\mathcal{L}$對$B_it$的梯度,使用$\eta(2-IoU_i^{t-1})$來加速收斂。bbox的優化評價使用$\mathcal{l}_1$-norm,共訓練200輪,error曲線如圖3b所示
Limitations of IoU and GIoU Losses
論文將5000個中心點上的bbox在最后階段的total error進行了可視化。IoU loss只對與target box有交集的bbox有效,因為無交集的bbox的$\triangledown B$為0。而GIoU由於增加了懲罰函數,盆地區域明顯增大,但是垂直和水平的區域依然保持着高錯誤率,這是由於GIoU的懲罰項經常很小甚至為0,導致訓練需要更多的迭代來收斂
The Proposed Method
一般而言,IoU-based loss可以定義為公式5,$R(B,B{gt})$是預測box$B$和$B{gt}$的懲罰項
Distance-IoU Loss
論文提出了能減少兩個box中心點間的距離的懲罰項,$b$和$b{gt}$分別表示$B$和$B{gt}$的中心點。$\rho(\cdot)$是歐氏距離,$c$是最小包圍兩個bbox的框的對角線長度
DIoU loss的完全定義如公式7
DIoU loss的懲罰項能夠直接最小化中心點間的距離,而GIoU loss意在減少外界包圍框的面積
DIoU loss保留了IoU loss和GIoU loss的一些屬性:
- DIoU loss依然是尺寸無關的,不會大尺寸產生大的loss,小尺寸產生小的loss那樣
- 類似於GIoU loss,DIoU loss能夠為無交集的bbox提供梯度方向
- 當bbox完全重合時,$\mathcal{L}{IoU}=\mathcal{L}{GoU}=\mathcal{L}{DoU}=0$,當bbox很遠時,$\mathcal{L}{GoU}=\mathcal{L}_{DoU}\to 2$
在模擬實驗中,發現DIoU loss也有一些獨有的屬性:
- 如圖1和圖3所示,DIoU loss能夠直接最小化bbox的中心點距離。因此,他的收斂很快
- 在包含的情況下,或垂直和水平的情況下,DIoU loss的收斂非常快,而GIoU loss則幾乎退化成了IoU loss
Complete IoU loss
論文考慮到bbox回歸三要素中的長寬比還沒被考慮到計算中,因此,進一步在DIoU的基礎上提出了CIoU。其懲罰項如公式8,其中$\alpha$是權重函數,而$v$用來度量長寬比的相似性
完整的損失函數定義如公式10
$\alpha$的定義如公式11,重疊區域能夠控制權重的大小
最后,CIoU loss的梯度類似於DIoU loss,但還要考慮$v$的梯度。在長寬在$[0,1]$的情況下,$w2+h2$的值通常很小,會導致梯度爆炸,因此在實現時將$\frac{1}{w2+h2}$替換成1
Non-Maximum Suppression using DIoU
在原始的NMS中,IoU指標用於抑制多余的檢測框,但由於僅考慮了重疊區域,經常會造成錯誤的抑制,特別是在bbox包含的情況下。因此,可以使用DIoU作為NMS的標准,不僅考慮重疊區域,還考慮了中心點距離
其中$s_i$是分類置信度,$\epsilon$為NMS閾值,$\mathcal{M}$為最高置信度的框。DIoU-NMS傾向於中心點距離較遠的box存在不同的對象,而且僅需改幾行代碼,DIoU-NMS就能夠很簡單地集成到目標檢測算法中
Experimental Results
YOLO v3 on PASCAL VOC
在YOLOv3上進行實驗對比,DIoU loss和CIoU的效果都很顯著,mAP分別提升3.29%和5.67%,而AP75則分別提升6.40%和8.43%,而使用DIoU-NMS則能進一步提升,幅度達到5.91%和9.88%
SSD on PASCAL VOC
在SSD-FPN上進行實驗對比,因為本身模型已經精度很好了,DIoU loss和CIoU的效果不是很顯著,但仍有提升。mAP分別提升0.59%和0.84%,而AP75則分別提升1.77%和2.59%,而使用DIoU-NMS則能進一步提升效果
Faster R-CNN on MS COCO
在Faster R-CNN ResNet-50-FPN上,由於Faster R-CNN本身提供的bbox質量都比較高(即在圖4的盆地),因此,GIoU的優化都很小,但此時DIoU和CIoU則表現了不錯的優化效果。注意到,CIoU在小物體上的性能都有所下降,可能由於長寬比對小物體的檢測貢獻不大,因為此時中心點比長寬比重要
圖7對GIoU和CIoU的結果進行了可視化,可以看到,在中大型物體檢測上,CIoU的結果比GIoU要准確
Discussion on DIoU-NMS
如圖8所示,DIoU-NMS能夠更好地引導bbox的消除
為了進一步驗證DIoU-NMS的效果,進行了對比實驗。如圖9所示,DIoU-NMS的整體性能都比原生的NMS效果要好
Conclusion
論文提出了兩種新的IoU-based損失函數,DIoU loss和CIoU loss:DIoU loss最小化bbox間的中心點距離,從而使得函數快速收斂;CIoU loss則在DIoU loss的基礎上加入長寬比的考量,能夠進一步地快速收斂和提升性能。另外論文提出DIoU-NMS來代替原生的NMS,充分地利用IoU的特性進行優化,從實驗結果來看,效果也是很好的
寫作不易,未經允許不得轉載~
更多內容請關注知乎專欄/微信公眾號【曉飛的算法工程筆記】