[Paper:Focal Loss for Dense Object Detection]
[https://arxiv.org/abs/1708.02002]
關(guān)于目標檢測主要分為兩大類別:one stage压固,two stage
one stage 代表:yolo系列,ssd(特點:檢測精度低浙踢,但檢測速度快)
two stage 代表:R-CNN系列,SPPNet(特點:檢測精度高,但檢測速度慢)
在論文中作者去探討了造成one stage精度低的原因哺窄,發(fā)現(xiàn)在訓(xùn)練密集目標檢測器的過程中出現(xiàn)了嚴重的foreground-background類別不平衡笆檀。
首先,什么是“類別不平衡”呢露戒?
檢測算法在早期會生成很多bbox描验,而在一幅正常的圖像中需要檢測的object不會很多白嘁,這就意味著多數(shù)的bbox是屬于background,使得foreground-background類別不平衡膘流。
存在類別平衡問題為什么會導(dǎo)致檢測精度低呢絮缅?
因為bbox數(shù)量很多,而屬于background的bbox太多了呼股,假設(shè)分類器將所有的bbox全部歸為background耕魄,那么精度也會很高,而這樣的分類器是一個失敗的分類器彭谁,所以導(dǎo)致目標檢測的精度很低吸奴。
那么,為什么two stage機制的目標檢測器可以達到很高的精度呢?
因為two stage的第一個階段生成一個候選目標位置組成的稀疏樣本集则奥,即RPN簡單的對anchor進行二分類(只是區(qū)分是foreground和background考润,并不會區(qū)別細類),這樣读处,屬于background類別的bbox會大量減少糊治,雖然其數(shù)量依然遠大于foreground的bbox(例如3:1),但已不像最初生成anchor差別那么大了罚舱,這一階段最終結(jié)果是從“類別極不平衡”到“類別較不平衡”轉(zhuǎn)變井辜,也就是說two stage并不能完全解決類別不平衡問題,第二個階段使用一個卷積神經(jīng)網(wǎng)絡(luò)將各候選位置歸置foreground類別或者background類別管闷,即在初步篩選后的bbox上進行難度小得多的分類(細分類)粥脚,這樣分類器便得到了較好的訓(xùn)練,從而精度提高了包个。但因為是經(jīng)過了兩個階段的處理阿逃,操作復(fù)雜,使得檢測速度變慢了赃蛛。
為什么one stage系列無法避免這個問題呢?
因為one stage系列的檢測器直接在“類別極不平衡”的bbox中進行難度極大的細分類搀菩,直接輸出bbox和標簽呕臂,而原有的交叉熵損失(CE)作為分類任務(wù)的損失函數(shù),無法抗衡“類別極不平衡”(會在另一篇文章中詳細講解交叉熵損失)肪跋,容易導(dǎo)致分類器訓(xùn)練失敗歧蒋。因此,one stage檢測雖然速度快州既,但檢測精度低谜洽。
既然one stage中的交叉熵損失函數(shù)無法抗衡“類別極不平衡”,所以retinanet作者何愷明及其團隊提出Focal Loss替換交叉熵損失來提高檢測精度吴叶。
Focal Loss的形式是怎樣的阐虚,有什么含義?
首先介紹一下二分類的交叉熵損失:
公式(1)中蚌卤,y∈{±1} 指定了ground-true class实束,p∈[0,1] 是模型對于標簽y = 1的類的估計概率。為了方便逊彭,我們定義Pt:
公式(2)可以轉(zhuǎn)換為:
解決類別不平衡的常見方法是分別為class1和class-1加入加權(quán)因子α∈[0; 1]咸灿、1-α。所以α-balanced 的CE損耗可寫為:
鑒于以上的改進過程的思想侮叮,可以將交叉熵損失增加一個調(diào)節(jié)因子(1 - pt)γ避矢,其中γ≥0。這樣便出現(xiàn)了Focal Loss,其定義為:
在實踐過程中使用的Focal Loss形式為: