DIoU損失函數詳解,源碼已開源

本文介紹一篇AAAI 2020新提出的一種交併比損失函數,Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression[1],它在收斂速度、迴歸準確性方面相對於IoU和GIoU都有顯著的提升,下面就來看一下DIoU的詳細內容。

摘要

邊界框迴歸是目標檢測任務中非常關鍵的一環,交併比(IoU)是邊界框迴歸過程中一個被廣泛使用的評估指標。目前提出的IoU和廣義IoU(GIoU)有利於評估IoU指標,但是,仍然存在兩點問題,

  • 收斂速度緩慢
  • 迴歸不準確

因此,在這篇文章中,作者提出一種結合預測框目標框之間距離的一種距離IoU(Distance-IoU,DIoU)損失,它在訓練中收斂速度比IoU和GIoU要快的多。

本文總結了在邊界框迴歸中比較重要的3個因素,

  • 重疊面積
  • 中心點距離
  • 長寬比

這3個因素在本文非常重要,本文提出的兩種改進方案DIoU和CIoU都是圍繞這3點因素再展開。

IoU和GIoU

IoU(Intersection over Union)是評估邊界框迴歸效果非常重要且被廣泛使用的指標,它的定義如下,

其中Bgt是目標框,B是預測框。

IoU的損失函數定義如下,

從上面這個損失函數我們可以看出,如果目標框和預測框沒有重疊的話,那麼分子就為0,也就是說,損失函數一直為1。

也就是說,IoU損失僅在邊界框有重疊的情況下起作用,而在沒有重疊的情況梯度不會發生變化。

基於這個弊端,GIoU就出現了。

GIoU主要針對IoU損失在邊界框無重疊的情況下梯度不變化的情況進行改進,它的做法是在原來IoU損失函數的基礎上加了一個懲罰項

,改進後的損失函數如下,

式中多了一個參數C,它代表的含義是能夠同時覆蓋B和Bgt的最小邊界框。從上述公式中引入的懲罰項可以看出,在不重疊的情況下,預測框會不斷向目標框移動。

雖然GIoU可以緩解不重疊情況下梯度消失問題,但是它依然存在一些侷限性。

AAAI 2020 | DIoU損失函數詳解,源碼已開源

我們再回到上述損失函數,可以看一下懲罰項,如果B和Bgt其中一個覆蓋另外一個框的情況下,那麼分子就變成了0,就如同上圖所示,這時候懲罰項就沒有作用了,它就又退化成IoU損失。

AAAI 2020 | DIoU損失函數詳解,源碼已開源

上述圖中,第一行代表GIoU幾個邊界框迴歸步驟,第二行代表DIoU的幾個迭代步,圖中綠色代表目標框,黑色代表錨框,藍色代表GIoU的預測框,紅色代表DIoU的預測框。

從上面迭代過程中預測框為了與目標框重疊,它在開始階段會逐漸的增大尺寸。然而到後面階段,GIoU會退化成IoU損失,因此,它需要在垂直和水平方向需要多次的迭代來達到收斂。

思考

思考2個問題,

•為了獲得更快的收斂速度,是否可以直接最小化預測框和目標框之間的歸一化距離?•當與目標框有重疊甚至存在包含關係時,如何使得迴歸速度更準確、更快速?

可以思考一下這兩個問題,本文提出的DIoU和CIoU都是在圍繞這兩個問題在展開。

DIoU

讀到這裡可以看出,無論是IoU還是GIoU都是基於前面我們列出來的3個因素的第一點:重疊面積

AAAI 2020 | DIoU損失函數詳解,源碼已開源

因此,本文將第二點因素中心點距離考慮在損失函數之中提出了DIoU。

式中b和bgt分別代表B和Bgt的中心點,p(.)的含義代表歐式距離,c代表覆蓋兩個邊界框最小框的對角線長度(上圖中

藍色線)。

DIoU在IoU的基礎上加入了一個懲罰項,用於度量目標框和預測框之間中心點的距離,我們在最小化邊界框中心點的距離過程中,能夠使得邊界框收斂速度更快。

DIoU繼承了IoU和GIoU的一些特性,

  • DIoU損失仍然與迴歸問題的規模無關
  • 與GIoU損失類似,DIoU損失在與目標框不重疊時可以為邊界框明確移動方向

DIoU對比IoU和GIoU也有一些優越性,

  • DIoU損失可以直接最小化兩個盒子的距離,因此收斂速度比GIoU損失快得多
  • 對於目標框和預測框存在包含關係的情況,DIoU損失可以使迴歸非常快,而GIoU損失幾乎退化為IoU損失

到這裡,就會打了思考部分的第一個問題:為了獲得更快的收斂速度,是否可以直接最小化預測框和目標框之間的歸一化距離。

CIoU

現在就來回答第二個問題:當與目標框有重疊甚至存在包含關係時,如何使得迴歸速度更準確、更快速?

現在把摘要中強調的一部分拿回來再重申一遍,邊界框迴歸中比較重要的3個因素,

  • 重疊面積
  • 中心點距離
  • 長寬比

DIoU考慮了重疊面積中心點距離達到了很不錯的效果,然而,長寬比這個重要的因素還沒有被考慮進來。

因此,基於DIoU提出了CIoU損失,在原來DIoU損失函數的基礎上引入了長寬比的一致性,改進後的損失函數為,

其中,v用於測量長寬比的一致性,

​代表一個平衡參數,

其中重疊面積因子在迴歸中被賦給更高的優先級,特別是在非重疊情況下。

DIoU應用於非極大值抑制

在原始的NMS(Non-Maximum Suppression,非極大值抑制)會移除一些容易的檢測框,其中IoU就是一個度量冗餘檢測框的一個重要指標,在抑制冗餘檢測框的過程中,唯一考慮的因素就是重疊面積,這樣顯然是不合理的,如果存在遮擋的情況,這樣就會產生錯誤的抑制。

本文提出將DIoU應用於NMS中,這樣不僅考慮重疊區域,還會將檢測框與目標框中心點之間的距離考慮在內,這樣能夠有效避免上述錯誤。

實驗結果

AAAI 2020 | DIoU損失函數詳解,源碼已開源

從上圖誤差可視化中我們可以看出,(a)和(b)在中間凹陷部分對應的迴歸效果較好,但是,IoU損失在非重疊的情況下有較大誤差,GIoU在水平和垂直情況下有較大誤差。而本文提出的GIoU,無論在哪種情況下,都會產生非常小的誤差。

AAAI 2020 | DIoU損失函數詳解,源碼已開源

使用YOLOv3模型,在PASCAL VOC 2007數據集上對比IoU、GIoU、DIoU、CIoU四種損失的表現,選取的對比指標分別是AP和AP75。可以從上圖中看出,在AP和AP75這兩項評價指標方面DIoU對比IoU和GIoU均取得了顯著的提升。

源代碼

DIoU[2]目前源代碼已經開源,代碼是由Matlab編寫,代碼已經託管到Github,可以直接在Github搜索DIoU,也可以查看引用鏈接。

引用鏈接

[1] DIoU Paper: https://github.com/Zzh-tju/DIoU

[2] DIoU Code: https://github.com/Zzh-tju/DIoU


分享到:


相關文章: