現在在物體檢測領域,通常會使用IoU(Intersection over Union)來作爲一個很重要的度量指標。但是很多時候在訓練網絡時,採用的是l2-norm來回歸檢測框的,文章認爲採用l2-norm來訓練模型而使用IoU來衡量模型好壞,這兩者之間似乎存在着某種不匹配的關係。
舉個例子,如下圖所示,
現假設採用左上角右下角的座標來表示一個矩形框,即(x1,y1,x2,y2)。在採用l2-norm來度量兩個框的匹配度,即上圖中綠色表示的ground truth框與黑框表示的預測框之間的匹配度,當假設兩個框的一個角的歐拉距離是固定的(這裏假設兩個框的左下角距離固定),那麼這兩個框在l2-norm度量下的相似度,在當以綠色框右上角爲圓形某固定值爲半徑的圓(黑色虛線表示)上的每個點表示預測框的右上角時,l2-norm值是一樣的。
這句話可以用下面公式表示:
綠色框左上角座標爲(x1,y1)右下角爲(x2,y2)
黑色框左上角座標爲(x1′,y1′)右下角爲(x2′,y2′)
下面要滿足兩個條件,
- 兩個框左下角(x1,y2),(x1′,y2′)距離爲定值,可以用下面公式表示
(x1−x1′)2+((y2−y2′)2)=a
這裏a表示定值
- 以(x2,y1)爲圓形,某個定值爲半徑,可以用下面公式表示
(x−x2)2+(y−y1)2=r2
這裏用r表示半徑
將上面兩式相加就是兩個矩形框的l2-norm的表示,可以看出只要取圓上的另一一點,l2-norm的結果是一樣的,而這時候IoU和後面要介紹的GIoU值都是不一樣的,這就說明了l2-norm不能很好的表示IoU值。而且這個結論與用什麼方式表示矩形框是無關的,如下面用矩形框的中心點和框的寬高來表示一個框也可以得到相應的結論。
爲了更好的優化網絡以及有一個更好的度量,文章提出了GIoU的概念。
一、GIoU的性質
下面先來回顧一下IoU的計算,如下式表示
對於任意兩個形狀,A和B,它們的IoU爲
IoU=∣A⋃B∣∣A⋂B∣
當兩個物體沒有相交時,IoU定義爲0。
IoU具有以下性質,使得IoU在2D、3D計算機視覺中成爲一個重要的評測指標:
- IoU能作爲一中度量,而LIoU=1−IoU能滿足度量的所有性質。
- IoU對於尺度有不變性。這意味着兩個任意形狀A和B之間的相似性與它們的空間尺度無關。
然而IoU作爲度量也有它的缺點,那就是當∣A⋂B∣=0是IoU爲0,這時候並不能表示兩個物體之間的距離,他們是鄰近的還是相距很遠的。爲了解決這個問題,本文提出GIoU。
先介紹一下GIoU作爲一種度量方式,它具有的性質:
- 類似與IoU,GIoU也能表示距離。LGIoU=1−GIoU能滿足度量的所有性質。
- 類似IoU,GIoU也對於尺度有不變性。
- GIoU是IoU的下界,即GIoU(A,B)≤IoU(A,B),當A和B的形狀和位置無限趨近時,等號成立
- 類似0≤IoU≤1,−1≤GIoU≤1,如果兩個物體重疊時IoU(A,B)=GIoU(A,B)=1,如果兩個物體的並集與包圍兩個物體的形狀之比趨近0時GIoU取得-1。
二、GIoU的計算方式
對於兩個框表示
預測框:Bp=(x1p,y1p,x2p,y2p)
標註框:Bg=(x1g,y1g,x2g,y2g)
- 爲確保預測框中x2p>x1p,y2p>y1p:
x^1p=min(x1p,x2p),x^2p=max(x1p,x2p)
y^1p=min(y1p,y2p),y^2p=max(y1p,y2p)
- 標註框的面積爲Ag=(x2g−x1g)×(y2g−y1g)
- 預測框的面積爲Ap=(x2p−x1p)×(y2p−y1p)
- 兩者的交集爲
x1I=max(x^1p,x1g),x2I=min(x^2p,x2g)
y1I=max(y^1p,y1g),y2I=min(y^2p,y2g)
I={(x2I−x1I)×(y2I−y1I)ifx2I>x1I,xy2I>y1I0otherwise
- 計算兩個框最小的包圍框
x1c=min(x^1p,x1g),x2c=max(x^2p,x2g)
y1c=min(y^1p,y1g),y2c=max(y^2p,y2g)
- 最小的包圍框的面積爲Ac=(x2c−x1c)×(y2c−y1c)
- IoU=UI,U=Ap+Ag−I
- GIoU=IoU−AcAc−U
- LGIoU=1−GIoU
當IoU爲0時在訓練網絡時沒有梯度了,影響訓練質量和模型收斂速度,而GIoU不會爲0。而且從GIoU的性質3可以看出,GIoU與IoU有很強的相關性。文章也採用了隨機的10K個樣本求IoU和GIoU得到下圖,也可以 看出二者相關性,並且還能看出GIoU相對於IoU能夠獲得更陡的梯度值,更有利於模型訓練。
關於GIoU Loss的穩定性
通過前面介紹知道
0≤LIoU≤1,0≤LGIoU≤2
所以兩個loss都是有界的
LIoU在IoU爲0時的行爲
當IoU=0時,LGIoU=2−AcU,要使得loss減小,就要使U/Ac增大,從而要使得U增大或者Ac減小,要達到這種要求就需要預測框和標註框儘量重疊。
關於GIoU實踐可能存在的問題
在博主訓練yolov3的時候,使用了GIoUloss,不用與smoothL2-loss的計算只要算座標的一個偏置量的差值,要算GIoUloss必須先求出座標,而在求座標的時候使用了e爲底的指數,造成了w和h爲inf的情況,導致loss爲nan,採用的辦法是限制w和h爲一個較大的值。