--NeoZng【neozng1@hnu.edu.cn】
-
IOU loss family
在之前訓練bbox regression分支的時候,我們只利用了回歸得到的角點與GT角點坐標差的模值(若是利用中心點和長寬也類似,用MAE、RMSE、Smooth L1等LF),仔細思考一下就會發現這存在一些問題:實際評價檢測效果的時候使用的指標是IOU,但顯然我們loss的設計目標和評價指標不等價,多個檢測框可能有相同的Loss但IOU的差異可以特別大,為了解決這個問題IOU loss就自然而然誕生了,
?
截取自論文原文,這里對比了L2 loss 和IoU loss
IOU loss用IOU來評價bbox回歸的好壞,這樣就統一了評價指標和訓練指標,同時還讓bbox regression擁有了尺度不變性(原來的距離loss對于不同大小的樣本不具有這個特性!),
欸那有人肯定又會說了,即使IOU相同,回歸效果的好壞也會有差啊,不信你看這個:
?
以上三種情況雖然predict和GT的IOU相同,但是他們的回歸效果肯定不同
?
而且在剛開始訓練的時候,萬一預測的框離GT很遠,根本沒有產生交集那IOU不就一直是零嗎?那么有沒有什么辦法可以改進IOU loss讓他可以區分相同IOU情況下回歸效果的好壞并解決預測bbox和GT交集為零時如何訓練的問題?GIOU給出了答案,首先找到一個能夠包住GT和預測框的最外界矩形C,然后計算C的面積減去(GT ∪ bbox) 的面積的差與C的面積的比值,再用GT和bbox的IoU值減去這個比值得到GIoU,
?
\符號表示集合運算中的減法,定義為C\(A∪B)定義為C中有而AB并集中沒有的部分
?
略加思考你就會發現,GIOU loss會使得IOU盡量大,而C\(A∪B)盡量的小,那么在bbox和GT盡量對齊的時候,GIOU值會更大,這就在很大程度上解決了前一張圖片中出現的無法區分的問題,下面這張圖展示了不同情況下L2 損失、IOU loss和GIOU loss的大小:
?
對比下來,GIOU擁有最好的評價效果
既然IOU loss已經在這里開了個大坑,大伙就都在想能不能再這些個loss的基礎上再挑挑刺,進一步細化評價標準?還真有,CIOU這不就來了,而且這幫作者還直接一下提了倆,除了CIOU還搞了個DIOU,還給不給人活路了,分我也發倆篇撒,
論文作者著重考慮了bbox回顧的三個要素:重疊區域,中心點距離和長寬比,從這里入手首先提出DIOU:在IOU loss的基礎上添加了一個bbox和GT中心距離的懲罰項,以此為目標進行訓練將會逐漸把兩個框拉在一起,但是能保證他們對齊程度一定提高嗎?CIOU緊隨其后,又在DIOU的基礎上額外增加了一個bbox的長寬比的約束,讓loss能夠更快地收斂,對比GIOU,GIOU的損失函式似乎也在做類似的事情,不過它把這兩個作業給糅合在了一起而沒有在兩個方向上分別發力,頗有些”不偏科也沒強項“的感覺,CIOU則把中心點距離和長寬比分開考慮,認為他們的作用是正交的,并對兩個因素進行專門的優化,從而獲得了更好的效果和更快的訓練速度,
這就像線性代數中的特征值分解/正交分解,把原本糅合在一起的特征或屬性在不同的維度/基底上分開考慮,最后再疊加到一起,這也是信號處理的慣用”伎倆“了(fourier、laplace等等),
同時作者指出在NMS的時候使用DIOU可以獲得比簡單的IOU更好效果,論文還對GIOU的drawbacks進行了鞭尸分析,通過實驗指出了IOU family前任們的局限性,感興趣可以戳 Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression (arxiv.org),
-
GFL
GFL的全稱是generalized focal loss,看名字就知道,extend、generalize、complete啊這類的基本都是在原有論文的基礎上得到啟發進一步得到的結果(這說明多看論文就能發paper),
觀察IOU family的實作方法,我們發現IOU分支是和分類分支獨立的兩個分支,特別是使用解耦head的結構,訓練的時候各玩各,而且前人的ablavation也已經證明定位框的準確性和分類準確度并沒有很大的關聯,因此在訓練和預測的時候,兩者輸出的結果存在一個gap,一個分類置信度很低的bbox卻很有可能在IOU分支中獲得很高的分數,最后在計算得分的時候將兩者相乘就會得到例外的結果,那GFL的解決方法就是,在訓練的時候聯合兩者的表示(representation,定位質量表示框準不準,也就是前述iou family解決的問題,分類表示如one-hot或者softmax的輸出,還有用分布來衡量的方法),

這樣,在訓練的時候,把原來的one-hot label轉換成分類與質量估計聯合的連續label(即one-hot label乘上該預測框和GT的iou作為新的訓練標記),將這個label作為分類和質量估計的指導,從而消除訓練和推理時的gap(似乎顯而易見!但是之前卻沒有人想到),
因此對于FL的第一步修改,得到了如下的運算式:
?
σ就是添加了框質量預測的分類估計值,y是乘上了iou的標簽
?
第二個問題是框的表示,在以往的傳統框回歸中,實際上是讓網路學習一個狄拉克分布(沖激函式),即對一個以影像長寬為橫縱坐標,框位置為輸出的一個函式;也有一些方法嘗試為框的回歸簡歷一個高斯分布,即訓練目標是得到以訓練label為中心的一個盡量集中的高斯分布,GFL的想法則是不去人為指定或設計一個框的分布,而是讓網路自己學習這個任意分布(頗有一種粒子濾波器的感覺),
想要得到預測輸出,根據概率分布函式的定義,就對整個區間進行積分:

因為影像是一個二維離散平面每一個坐標軸是離散的,所以我們把區間劃分成n個小區間,將其離散化:

若要回歸的更精確,就將區間間隔變得更小,反之增大,極限情況就是一個像素一個區間. 根據概率分布函式的特點,我們希望在積磁區間內積分得到1,聰明的你肯定已經想到我們可以用softmax來輸出整個離散分布!不過這里還存在一個問題,一個積分值可以對應無窮種分布函式,這就會大大降低學習的效率,使得框的分布不能很快地收斂(每個label都大概率會導向不同的分布,雖然他們的總體收斂方向相同,但是中間有很多個step都相互抵消了),從直觀上考慮,下圖(3)是比(1)和(2)更好的分布,因此作者對損失函式稍加約束,提高離label最近的兩個位置的權重使得分布能夠更快的收斂,否則增加的權重可能被放在距離label處更遠的地方,如下圖(1),
?
不同中分布積分得到相同值(橫軸豎線)
最后得到的DFL(distance focal loss)就是如下的形式:
其中yi和yi+1是第i和i+1個位置(這兩項看起來和cross entropy也有些相似,其實是在計算預測分布輸出和標簽的差異),y是標注的Dirac函式(即標注框的位置)Si和Si+1是分布函式在yi和yi+1處的值(也就是前文公式中的P(yi)),那么每次計算兩個位置,若長寬都為100像素則需要計算99+99=198次,
不得不驚嘆作者的loss function設計之巧妙,最后還將QFL和DFL進行統一,得到了一個GFL的運算式,有興趣的同學可以自行參閱原文:https://arxiv.org/pdf/2006.04388.pdf ,作者在知乎上也有一篇講解的文章,戳這里:大白話 Generalized Focal Loss - 知乎 (zhihu.com)
強烈推薦下載原文并且精讀,它對于之前的預測框幾種表示的洞察十分深刻,且這篇文章的數學方法并不算難而且對FL和IOU loss 提出的針對性的優化思路非常清晰明了,很適合入門后的進階,隨后作者還推出了GFLv2的版本,感興趣自行搜索閱讀,
如果覺得筆者寫得還不錯,點個贊加個關注吧!
flag:本專欄今天開始一星期兩篇
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414019.html
標籤:其他
上一篇:python多執行緒方法總結
