YOLOv3 提升 5.91 mAP,IoU在目標檢測中的正確打開方式

論文提出了IoU-based的DIoU loss和CIoU loss,以及建議使用DIoU-NMS替換經典的NMS方法,充分地利用IoU的特性進行優化。並且方法能夠簡單地遷移到現有的演算法中帶來性能的提升,實驗在YOLOv3上提升了5.91mAP,值得學習。

論文:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

  • 論文地址: https://arxiv.org/abs/1911.08287
  • 代碼地址: https://github.com/Zzh-tju/DIoU

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的時候都會卡,不會對無交集的框進行回歸

GIoU loss

  GIou loss在IoU loss的基礎上增加一個懲罰項,為包圍預測框和的最小區域大小,當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函數,可以通過梯度下降來模擬bbox優化的過程。對於預測的bbox,為階段的結果,為對的梯度,使用來加速收斂。bbox的優化評價使用-norm,共訓練200輪,error曲線如圖3b所示

Limitations of IoU and GIoU Losses

  論文將5000個中心點上的bbox在最後階段的total error進行了可視化。IoU loss只對與target box有交集的bbox有效,因為無交集的bbox的為0。而GIoU由於增加了懲罰函數,盆地區域明顯增大,但是垂直和水平的區域依然保持著高錯誤率,這是由於GIoU的懲罰項經常很小甚至為0,導致訓練需要更多的迭代來收斂

The Proposed Method


  一般而言,IoU-based loss可以定義為公式5,是預測box和的懲罰項

Distance-IoU Loss

  論文提出了能減少兩個box中心點間的距離的懲罰項,和分別表示和的中心點。是歐氏距離,是最小包圍兩個bbox的框的對角線長度

  DIoU loss的完全定義如公式7

  DIoU loss的懲罰項能夠直接最小化中心點間的距離,而GIoU loss意在減少外界包圍框的面積   DIoU loss保留了IoU loss和GIoU loss的一些屬性:

  • DIoU loss依然是尺寸無關的,不會大尺寸產生大的loss,小尺寸產生小的loss那樣
  • 類似於GIoU loss,DIoU loss能夠為無交集的bbox提供梯度方向
  • 當bbox完全重合時,,當bbox很遠時,

  在模擬實驗中,發現DIoU loss也有一些獨有的屬性:

  • 如圖1和圖3所示,DIoU loss能夠直接最小化bbox的中心點距離。因此,他的收斂很快
  • 在包含的情況下,或垂直和水平的情況下,DIoU loss的收斂非常快,而GIoU loss則幾乎退化成了IoU loss

Complete IoU loss

  論文考慮到bbox回歸三要素中的長寬比還沒被考慮到計算中,因此,進一步在DIoU的基礎上提出了CIoU。其懲罰項如公式8,其中是權重函數,而用來度量長寬比的相似性

  完整的損失函數定義如公式10

的定義如公式11,重疊區域能夠控制權重的大小

  最後,CIoU loss的梯度類似於DIoU loss,但還要考慮的梯度。在長寬在的情況下,的值通常很小,會導致梯度爆炸,因此在實現時將替換成1

Non-Maximum Suppression using DIoU

  在原始的NMS中,IoU指標用於抑制多餘的檢測框,但由於僅考慮了重疊區域,經常會造成錯誤的抑制,特別是在bbox包含的情況下。因此,可以使用DIoU作為NMS的標準,不僅考慮重疊區域,還考慮了中心點距離

  其中是分類置信度,為NMS閾值,為最高置信度的框。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的特性進行優化,從實驗結果來看,效果也是很好的。