參考網址:
-
RetinaNet——《Focal Loss for Dense Object Detection》論文翻譯(這篇文章基本上完全翻譯了論文內容,還是比較詳細的,我再閱讀時主要參考了這篇)
-
RetinaNet翻譯+解析(主要是介紹了論文中的損失函數:CE、FL,其實這些在原作中都有提到)
-
目標檢測(object detection)系列(十一) RetinaNet:one-stage檢測器巔峯之作(這篇有助於整體理解這篇論文,且Focal Loss部分介紹的很詳細)
作者首次注意到one stage模型精度低的原因是類別不均衡的問題,所以提出FL解決正負樣本不均衡問題 ,由此構建了RetinaNet.。
1、FL相對於CE(cross entropy)的優勢
在候選區域生成的候選框中,大類的不平衡會主導交叉熵損失,所以大量的負樣本會主導損失並主導梯度。FL的計算公式如下,其中爲平衡因子,爲調節因子,的取值範圍爲。作者在文中做實驗分析了和取不同值的效果,發現越大時,應該越小,效果最好的組合爲
,其中,注意,只是符號不一樣。
那爲啥這樣的形式就比平衡交叉熵好呢?我們假設爲1,係數就變成了,在這個基礎上,我們按照上面的方式展開其實就是這樣子:
由於交叉熵前做了softmax,所以p一定是個正數,這個因子加上不會改變原有損失的符號,然後我們舉例說明它怎麼區分難易樣本,p是正樣本的預測值:
- 對於一個正例,模型認爲它簡單,那麼p會趨近於1,1−p會趨近於0,損失就會變小,相反的就會變大。
- 對於一個負例,模型認爲它簡單,那麼p會趨近於0,損失就會變小,相反的就會變大。
這就對模型的難易做出了不同的loss值,此外Focal loss還有一個超參數,它起到了對因子成冪次,由於底數一定是一個小於1的數,冪次會拉大原有的線性倍率。比如原本是0.1和0.9,時,會變成0.01和0.81,9倍變成了81倍。這種抑制簡單樣本,促進難樣本的方式,其實和IOU>0.7和IOU<0.3有異曲同工之妙。
加了這東西之後,難易樣本區分開了,但是負樣本多的問題好像並沒有解決掉,所以Focal loss最後又把平衡交叉熵中的平衡因子加了回來。
參考文章:目標檢測(object detection)系列(十一) RetinaNet:one-stage檢測器巔峯之作,這篇文章的Focal Loss部分介紹的很詳細
2、RetinaNet的網絡結構
RetinaNet是一個統一的網絡,由骨幹網(backbone)和兩個特定於任務的子網組成。骨幹負責計算整個輸入圖像上的卷積特徵圖,並且是一種自卷積網絡。第一個子網在主幹的輸出上執行卷積對象分類;第二個子網執行卷積邊界框迴歸。這兩個子網具是一個簡單的設計,我們專門爲one-stage、dense detection提供這種設計,網絡結構如下所示。通過FPN可以提取出多尺度的候選框,每一個金字塔層的輸出通道都是256,
Anchor Box
RetinaNet選取Anchor Box的策略和FPN相似,一共有5個不同尺度的特徵圖,分別是,每一層會有三種比例:1:1、1:2、2:1,所以FPN有15種Anchor,但是RetinaNet在這個基礎上又加了一個因素,就是每一層特徵圖上有三種尺度,它分別是該層特徵圖尺度的,而比例不變仍爲1:1、1:2、2:1,於是RetinaNet的Anchor變成了45個。因爲Focal loss的引入,讓Anchor的選取變得爲所欲爲,就是不怕多。