Focal Loss for Dense Object Detection解讀
論文鏈接: https://arxiv.org/pdf/1708.02002.pdf
目標識別有兩大經典結構: 第一類是以Faster RCNN為代表的兩級識別方法,這種結構的第一級專註於proposal的提取,第二級則對提取出的proposal進行分類和精確坐標回歸。兩級結構準確度較高,但因為第二級需要單獨對每個proposal進行分類/回歸,速度就打了折扣;目標識別的第二類結構是以YOLO和SSD為代表的單級結構,它們摒棄了提取proposal的過程,只用一級就完成了識別/回歸,雖然速度較快但準確率遠遠比不上兩級結構。那有沒有辦法在單級結構中也能實現較高的準確度呢?Focal Loss就是要解決這個問題。
一、為什麼單級結構的識別準確度低
作者認為單級結構準確度低是由類別失衡(class imbalance)引起的。在深入理解這個概念前我們先來強化下「類別」這個概念:計算Loss的bbox可以分為positive和negative兩類。當bbox(由anchor加上偏移量得到)與ground truth間的IOU大於上門限時(一般是0.5),會認為該bbox屬於positive example,如果IOU小於下門限就認為該bbox屬於negative example。在一張輸入image中,目標占的比例一般都遠小於背景占的比例,所以兩類example中以negative為主,這引發了兩個問題:
1、negative example過多造成它的loss太大,以至於把positive的loss都淹沒掉了,不利於目標的收斂;
2、大多negative example不在前景和背景的過渡區域上,分類很明確(這種易分類的negative稱為easy negative),訓練時對應的背景類score會很大,換個角度看就是單個example的loss很小,反向計算時梯度小。梯度小造成easy negative example對參數的收斂作用很有限,我們更需要loss大的對參數收斂影響也更大的example,即hard positive/negative example。
這裡要注意的是前一點我們說了negative的loss很大,是因為negative的絕對數量多,所以總loss大;後一點說easy negative的loss小,是針對單個example而言。Faster RCNN的兩級結構可以很好的規避上述兩個問題。具體來說它有兩大法寶:1、會根據前景score的高低過濾出最有可能是前景的example (1K~2K個),因為依據的是前景概率的高低,就能把大量背景概率高的easy negative給過濾掉,這就解決了前面的第2個問題;2、會根據IOU的大小來調整positive和negative example的比例,比如設置成1:3,這樣防止了negative過多的情況(同時防止了easy negative和hard negative),就解決了前面的第1個問題。所以Faster RCNN的準確率高。
OHEM是近年興起的另一種篩選example的方法,它通過對loss排序,選出loss最大的example來進行訓練,這樣就能保證訓練的區域都是hard example。這個方法有個缺陷,它把所有的easy example都去除掉了,造成easy positive example無法進一步提升訓練的精度。
圖1是hard positive、hard negative、easy positive、easy negative四種example的示意圖,可以直觀的感受到easy negative佔了大多數。二、Focal Loss的解決方法
Focal Loss通過調整loss的計算公式使單級結構達到和Faster RCNN一樣的準確度,公式1是Focal Loss的計算方法。pt是不同類別的分類概率,r是個大於0的值,at是個[0,1]間的小數,r和at都是固定值,不參與訓練。從表達式可以看出:
1、無論是前景類還是背景類,pt越大,權重(1-pt)r就越小。也就是說easy example可以通過權重進行抑制;
2、at用於調節positive和negative的比例,前景類別使用at時,對應的背景類別使用1-at;
3、r和at的最優值是相互影響的,所以在評估準確度時需要把兩者組合起來調節。作者在論文中給出r=2、at=0.25時,ResNet-101+FPN作為backbone的結構有最優的性能。
此外作者還給了幾個實驗結果:
1、在計算pt時用sigmoid方法比softmax準確度更高;2、Focal Loss的公式並不是固定的,也可以有其它形式,性能差異不大,所以說Focal Loss的表達式並不crucial。
3、在訓練初始階段因為positivie和negative的分類概率基本一致,會造成公式1起不到抑制easy example的作用,為了打破這種情況,作者對最後一級用於分類的卷積的bias(具體位置見圖2)作了下小修改,把它初始化成一個特殊的值b=-log((1-π)/π)。π在論文中取0.01,這樣做能在訓練初始階段提高positive的分類概率。三、RetinaNet的結構
作者提出了一種使用Focal Loss的全新結構RetinaNet,使用ResNet+FPN作為backbone,再利用單級的目標識別法+Focal Loss。這個結構在COCO數據集上達到了39.1的mAP。圖2是它的基本結構:
這個結構要注意幾點:
1、訓練時FPN每一級的所有example都被用於計算Focal Loss,loss值加到一起用來訓練;
2、測試時FPN每一級只選取score最大的1000個example來做nms;
3、整個結構不同層的head部分(圖2的c和d部分)共享參數,但分類和回歸分支間的參數不共享;
4、分類分支的最後一級卷積的bias初始化成前面提到的-log((1-π)/π);
推薦閱讀:
※【小林的OpenCV基礎課 番外】卷積與濾波
※Rethinking ICCV 2017 [Part 1]
※《論文研讀系列》SSD-Single Shot Multibox Detector
※brox近期論文
TAG:計算機視覺 |