one-stage的檢測精度比不上two-stage,一個主要原因是訓練過程樣本不均衡造成。樣本不均衡主要包括兩方面,一是正負樣本的不均衡;二是難易樣本的不均衡。目前主要的解決方法包括OHEM,S-OHEM,Focal Loss,A-fast-RCNN,GHM(梯度均衡化)。
1. 樣本不均衡問題
1.1 正負樣本不均衡(負樣本主導loss)
在一張圖片中,檢測目標只占少部分,其他部分都是背景。實際訓練過程中,往往會選擇與檢測目標box的IOU超過0.5的box作為正樣本,與檢測目標box的IOU少於0.5的作為負樣本,必然會造成一張圖片中分負樣本數量遠遠超過正樣本,即所謂的正負樣本不平衡問題。訓練過程中一般會控制一個batch中正負樣本的比例保持在1:3
1.2. 難易樣本不均衡(易樣本主導loss)
根據難易和正負樣本,可以將樣本分成如下四類。難樣本的loss大,但數量少,易樣本的loss小,但數量多,loss被易樣本主導,從難樣本上學習的少。
A、易分正樣本:容易正確分類的正樣本,單個loss小,數量多,累計Loss大。 B、易分負樣本:容易正確分類的負樣本,單個loss小,數量多,累計Loss大。 C、難分正樣本:錯分成負樣本的正樣本,單個loss大,數量少,累計Loss小。 D、難分負樣本:錯分成正樣本的負樣本,單個loss大,數量少,累計Loss小
2.樣本不均衡解決方案
2.1 OHEM (Online hard example mining, 在線難例挖掘)
OHEM是2016 年的文章Training Region-based Object Detectors with Online Hard Example Mining 提出,在每次產生的所有樣本的loss,OHEM將所有負樣本按loss大小進行排序,然后根據正負樣本1:3的比例去選取loss最大的負樣本。比如某個batch中共有1000個樣本,正樣本有50個,負樣本有950個,OHEM會將這從這950個負樣本挑150個loss最大的樣本做為負樣本,其他800個負樣本的loss重置為0。這樣這個batch的loss由50個正樣本和150個負樣本組成,維持了正負樣本比例, 另外OHEM挑選的是loss最大的150個負樣本,150個負樣本大部分是難負樣本,少部分是易負樣本,解決了負樣本中易負樣本loss主導問題。
簡單總結下OHEM的優點:
A. 控制了正負樣本的比例為1:3
B. 負樣本中難樣本loss主導
實際使用中注意點:
A. 正負樣本比例設置,1:3是否合適?
B. OHEM將大部分易負樣本的loss設置為0,是否過於粗暴?
(S-OHEM)
2.2 Focal Loss
Focal loss是2017年的文章Focal Loss for Dense Object Detection中提出,Focal loss主要對交叉熵損失函數進行了改進,解決難負樣本不平衡問題。
交叉熵公式如下:
首先,為了解決難負樣本不均衡,focal loss的思想是引入一個表達式,使難樣本的loss進一步增加,負樣本的loss進一步降低,其表達式如下:
難分正樣本預測概率值p較小,假設p=0.1, -log(p)=2.3026; 當γ=2時,-(1-p)γlog(p) =1.8651
易分正樣本預測概率值p較大, 假設p=0.9, -log(p)=0.1054; 當γ=2時,-(1-p)γlog(p) =0.001054
對比可以發現,難正樣本loss減小很少,負正樣本loss降低100倍;對於負樣本的難易樣本也類似,從而起到了解決難易樣本不平衡時,易樣本loss主導的問題。
其次,為了解決正負樣本不均衡,focal loss還引入了一個系數來平衡正負樣本不均衡,其表達式如下:
需要注意的是,如果只看這個表達式,α應該設置為0.75, 這樣α/(1-α)近似為1:3,能起到平衡作用;但由於-(1-p)γ的影響,實際設置並不是如此。
綜合表達式(2)和表達式(3), focal loss的綜合表達式是:
論文中表明 γ=2, α=0.25時效果最好,因為γ太大,使負樣本的loss降低太多了,所以 α設置的較小,使正樣本的loss相對降低一點。可以仔細體味下下面這個表格,通過focal loss,使訓練過程關注對象的排序為正難>負難>正易>負易
2.3 Gradient Harmonizing mechanism(梯度均衡機制)
Focal Loss雖然有很好的效果,但是存在兩個問題:
A. Focal loss中的兩個超參需要精細的調整,除此之外,它也是一個不會隨着數據分布變化的靜態loss
B. 如果樣本中有離群點(outliers),可能模型已經收斂了但是這些離群點還是會被判斷錯誤,讓模型去關注這樣的樣本,會影響模型的魯棒性
Gradient Harmonizing mechanism是2019年的論文Gradient Harmonized Single-stage Detector中提出的,解決了上述兩個問題。
難易樣本的loss差別較大,其實質是訓練過程中梯度大小的差別,因此作者對樣本梯度的分布進行了統計,定義了一個梯度模長g, 其中p是模型預測的概率,p*是ground-truth的標簽。
由表達式可以發現,g正比於檢測樣本的難易程度,g越大則檢測難度越大。(如對於正樣本,p*=1, 若樣本越難,預測概率p越小,其模長g越大)
其推導如下:
我們在計算分類損失時:假設模型輸出x,對其進行sigmoid得到預測概率p,再計算交叉熵。因此梯度模長就是交叉熵梯度的絕對值,如下表達式:
注意sigmoind函數的導數公式:
梯度模長g和樣本數量之間的分布統計圖如下:
可以看到,梯度模長接近於0的樣本數量最多,隨着梯度模長的增長,樣本數量迅速減少,但是在梯度模長接近於1時,樣本數量也挺多。
GHM的想法是,我們確實不應該過多關注易分樣本,但是特別難分的樣本(outliers,離群點)也不該關注!這些離群點的梯度模長d要比一般的樣本大很多,如果模型被迫去關注這些樣本,反而有可能 降低模型的准確度!況且,這些樣本的數量也很多!那怎么同時衰減易分樣本和特別難分的樣本呢? 太簡單了,誰的數量多衰減誰唄!那怎么衰減數量多的呢?簡單啊,定義一個變量,讓這個變量能衡量出一定梯度范圍內的樣本數量——這不就是物理上密度的概念嗎?於是,作者定義了梯度密度:
表明了樣本1~N中,梯度模長分布在
范圍內的樣本個數,
代表了
區間的長度。因此梯度密度的含義:單位梯度模長g部分的樣本個數。
最終,GHM得出進行分類的損失函數如下:
即交叉熵除以梯度密度,梯度密度大的loss會被抑制,易分樣本和特別難的樣本都被抑制了,從而起到了樣本均衡的作用。下圖中左邊是交叉熵CE,focal loss(FL) 和GHM的單個樣本梯度修正,右圖是整體樣本對於模型訓練梯度的貢獻。可以發現:候選樣本中的簡單負樣本和非常困難的異常樣本的權重都會被降低,即loss會被降低,對於模型訓練的影響也會被大大減小。正常困難樣本的權重得到提升,這樣模型就會更加專注於那些更為有效的正常困難樣本,以提升模型的性能
上述GHM用於分類損失,論文中作者還將其用於坐標回歸損失,坐標回歸loss常用smooth_l1,如下所示
其中 表示模型預測坐標偏移量,
表示anchor實際坐標偏移量,
表示
的函數分界點,常取1/2。定義
,則
的梯度求導為:
其中sgn表示符號函數。可以看出對於 的所有樣本梯度絕對值都為1,這使我們無法通過梯度來區分樣本,同時d理論上可以到無窮大。所以論文對
進行變形,計算方法及梯度求導如下所示:
與
的性質很相似,當d較大時都近似為L1 loss,d較小是都近似為L2 loss,而且
的范圍在[0,1),適合采用RU方法,在實際使用中,采用μ=0.02。定義梯度的絕對值gr為
於是我們可以基於gr統計樣本坐標回歸偏移量的梯度分布情況如下圖四所示。由於坐標回歸都是正樣本,所以簡單樣本的數量相對並不是很多。而且不同於簡單負樣本的分類對模型起反作用,簡單正樣本的回歸梯度對模型十分重要。下圖左邊是梯度統計,可以看出存在相當數量的異常樣本的回歸梯度值很大。下圖右邊是修正后梯度,可以看出,GHM-R loss加大了簡單樣本和正常困難樣本的權重,大大降低了異常樣本的權重,使模型的訓練更加合理
所以使用GHM的思想來修正loss函數,可以得到
參考:
https://www.cnblogs.com/king-lps/p/9497836.html
https://zhuanlan.zhihu.com/p/80594704
https://www.cnblogs.com/leebxo/p/11299697.html
https://zhuanlan.zhihu.com/p/71654647