一、前言
- 目前的深度學習目標檢測器中,One-stage的精度始終落後於two-stage
- 本文發現其中心原因爲訓練過程中前景與背景類別極端的不平衡
- 爲解決該問題,本文重塑了標準交叉熵損失函數,即減少易分類樣本的權重來進行平衡,提出了Focal Loss
- 爲評估所提出的損失函數的有效性,本文設計並訓練了一個簡單的目標檢測器——RetinaNet
1.1 類別不平衡
1.1.1 類別不平衡問題是什麼?
目標檢測算法在訓練過程中,會生成成千上萬個候選區域,這些候選區域是用於確定輸入圖像中目標的位置的,但是一張圖像中目標物體頂多也就只有幾個,所以,這就意味有大量的候選區域屬於背景,只有極少量的候選區域屬於目標物體,這就是所謂的前景-背景類別極端不平衡問題。
注意:
- 屬於背景的候選區域爲負樣本,屬於前景的候選區域爲正樣本
- 這裏的類別不平衡既有正負樣本的不平衡,也包括易分類負樣本和難分類負樣本的不平衡。
1.1.2 爲什麼類別不平衡會導致精度降低?
因爲負樣本的數量佔據了總樣本中的絕大部分,這就會造成最終算出的training loss爲佔絕對多數但包含信息量卻很少的負樣本所支配,少樣正樣本提供的關鍵信息卻不能在training loss中發揮正常作用,從而無法得出一個能對模型訓練提供正確指導的loss。
換句話說,就是類別不平衡問題的出現,導致了模型更多地學習了背景的特徵而沒有很好的學習要檢測的目標的特徵
1.2 One-stage VS Two-stage
1.2.1 結構對比
基於深度學習的目標檢測算法有兩類經典的結構:Two Stage 和 One Stage
Two Stage: 例如Faster-RCNN算法。
第一級專注於proposal的提取,第二級對提取出的proposal進行分類和精確座標迴歸。兩級結構準確度較高,但因爲第二級需要單獨對每個proposal進行分類/迴歸,速度上就打了折扣
One Stage: 例如SSD,YOLO算法。
此類算法摒棄了提取proposal的過程,只用一級就完成了識別/迴歸,雖然速度較快但準確率遠遠比不上兩級結構
1.2.2 精度差異分析
由上述可知,One-stage和Two-stage的目標檢測算法,其精度差異是由正負樣本類別不平衡問題所造成的,下面來進行詳細分析:
Two Stage:
該系列算法在生成候選區域的階段,使用的Selective Search, EdgeBoxes, RPN的結構極大的減少了背景框的數量,最終得到的候選區域大約爲1k~2k。在分類階段,使用一些策略,如使前景背景的比例爲1:3,或者OHEM算法,這樣就使得正負樣本達到了一個平衡
One Stage:
One-Stage算法在進行下采樣的同時產生預選框,在實際中經常會產生很多框,如SSD300產生了8732個預選框,SSD512產生了2萬多個,但是真正的正樣本的框卻很少,就造成了樣本間的類別極度不平衡,雖然有時會使用bootstrapping和hard example mining,但是效率很低
二、模型與方法
2.1 設計思路
- 爲了解決類別不平衡問題——提出了Focal Loss
- 爲了評估Focal Loss的有效性——提出了RetinaNet
2.2 Focal Loss
2.2.1 CE(cross-entropy) loss
作者從標準交叉熵損失函數出發,其公式爲:
其中:
- ,y=1表示正樣本,y=-1表示負樣本
- ,p表示模型預測的正樣本屬於不同類別的概率
爲方便標記,將交叉熵二分類損失函數定義如下:
其中:
2.2.2 Balanced CE loss
考慮到上述提到的正負樣本類別不平衡問題對最終的損失函數的影響,自然能想到通過在loss公式中使用與目標存在概率成反比的權重係數對其進行較正,從而得到改進的損失函數Balanced CE loss,公式如下:
其中:
- ,爲超參,通過交叉驗證來設置
- 正樣本使用權重係數,負樣本使用
2.2.3 Focal Loss
由上述的定義可知,Balanced CE loss能平衡正負樣本的重要性,但無法區分易分類樣本和難分類樣本,因此作者提出提出在交叉熵損失函數前增加一個調節因子,從而得到Focal Loss,其公式如下:
其中:
- ,爲可調節的超參,用來降低易分類樣本的權重
- 時,
當 趨於1的時候,說明該樣本爲易分類樣本,則調節因子趨於0,對Loss的貢獻就會很小
當 趨於0的時候,說明該樣本爲難分類樣本,則調節因子趨於1,對Loss的貢獻相對來說就會更大,從而有效地易分類樣本和難分類樣本
舉例:
設定,假設現在有一個樣本
若其=0.9,則其FL損失項要比原來的CE損失項100多倍
若其=0.968,則會小1000多倍
爲觀察不同的的取值對FL的影響,作者進行一系列的實驗,如下圖所示
結果:
- 隨着值的增加,調節因子所帶的影響也隨之增加
- 當 時,產生的效果最佳
- 當 時,Focal Loss的效果與CE Loss一致
在後續的實驗中,作者將添加到Focal Loss中,得到的Focal Loss的另外一種形式:
實驗結果表明:
- 它比原始的Focal Loss效果更好,產生了輕微的精度提升
- 時,ResNet-101+FPN作爲backbone的結構具有最佳的性能
2.3 RetinaNet
RetinaNet的總體結構: ResNet + FPN + 分類和迴歸的Subnet
2.3.1 BackBone
RetinaNet採用構建在ResNet基礎上的FPN作爲主幹網絡,提取得到的特徵金字塔有5個level——,其中:
- 是從相應的ResNet的 經過自上而下和橫向連接的結構得到的
- 是經過步長爲2、卷積核大小爲3x3的卷積操作得到的
- 是經過ReLU激活函數後,再經過步長爲2、卷積核大小爲3x3的卷積操作得到的
- 中的下標l表示level,每個level意味着對原圖進行了的縮放,且每個level通道均爲256
與FPN原文中的不同點:
- 介於計算量的考慮,本文沒有使用FPN原文中得到的特徵金字塔總高分辨率的
- 通過步長爲2的卷積操作得到的,沒有用FPN原文中的下采樣方法
- 爲了提升對大目標的檢測性能,本文將納入使用,而FPN原文中沒有用
2.3.2 Anchors
Anchors的設置:
- level 到 對應的anchor尺寸爲到,
- 每個level的的長寬比均爲
- 爲了能夠預測出更密集的目標,每個長寬比的anchor添加原設定尺寸的大小的尺寸,所以每個level總共有9個anchor
- 每個anchor賦予長度爲K的one-hot向量和長度爲4的向量,K爲類別數,4爲box的座標,與RPN類似
- IoU大於等於0.5的anchor視爲正樣本,設定其one-hot向量的對應值爲1
- [0, 0.4)的anchor視爲背景,[0.4, 0.5)的anchor不參與訓練
2.3.3 分類和迴歸的Subnet
Classification Subnet:
- 分類子網是一個FCN連接FPN的每一level,分類子網是權值共享的,即共用一個FPN
- 四層3x3xC的卷積,最後一層的卷積3x3xKA,其中C=256,A=9,K爲類別數
- 最後經過Sigmoid激活函數,輸出的feature map上的每一個點對應的一個KA維的預測向量
Box Regression Subnet
- 定位子網結構與分類子網類似,只是將最後的卷積大小改爲4xAx3x3
- 每個anchor學習4個參數,代表當前Anchor box與Ground Truth間的偏移量,這個與R-CNN類似
- 這裏的定位子網是類不可知的(class-agnostic),它參數量更少,但是一樣有效
三、總結
3.1 解決的問題
問題:
- 目標檢測模型訓練過程中前景與背景類別極端不平衡問題
解決:
- 重塑了標準交叉熵損失函數,即減少易分類樣本的權重來進行平衡,提出了Focal Loss
3.2 主要創新點
- 提出了能解決類別不平衡問題的損失函數——Focal Loss
- 結合了並應用了FPN和Focal Loss,設計出了一個精度可以媲美Two Stage算法的One Stage算法模型–RetinaNet
四、參考文獻
[1] https://zhuanlan.zhihu.com/p/98913633
[2] https://zhuanlan.zhihu.com/p/59910080
[3] https://zhuanlan.zhihu.com/p/53259174
[4] https://www.jianshu.com/p/8e501a159b28
[5] https://blog.csdn.net/JNingWei/article/details/80038594