1. 程式人生 > >正負樣本不平衡處理方法總結

正負樣本不平衡處理方法總結

1, Bootstrapping,hard negative mining  最原始的一種方法,主要使用在傳統的機器學習方法中。  比如,訓練cascade型別分類模型的時候,可以將每一級分類錯誤的樣本繼續新增進下一層進行訓練。  比如,SVM分類中去掉那些離分界線較遠的樣本,只保留離分界線較近的樣本。

2, heuristic sampling  標準的FRCN中,假設正樣本IOU(0.5~1.0)。負樣本IOU(0.1~0.4),hard 負樣本IOU(0.0~0.1)。比如實際的RPN網路中,實際最後的anchor經過NMS處理後的負樣本是很多的,假如有100000個。而實際訓練的正負樣本比例為1:3,負樣本大概只需要2000-3000個。這時就只選擇那些hard負樣本,這樣實際訓練出來的效果最好。

3, online hard example mining(OHEM)  出自,Training Region-based Object Detectors with Online Hard Example Mining這篇文章,

在faster RCNN這樣的框架下,在原始的網路基礎上,新接入了一個綠色的Read-only Layer,該網路對所有的ROI進行前向傳播,並計算最後的loss,然後紅色的網路對其中loss較大的ROI進行前向和後向傳播,可以說是一種動態的選擇性的傳播梯度。優勢也就顯而易見,比原始的faster RCNN可以節省很大的運算量,訓練速度回提升,最終模型準確性也提升。  其中,一個trick就是,在綠色的網路進行前向傳播完,其中出來的好多ROI會存在一些Loss較高,但是這些ROI有很大的IOU的情況,這樣就會使得梯度重複計算和傳播,因此,這裡,作者加入了NMS進行IOU的過濾。

4,Focal Loss  出自Focal Loss for Dense Object Detection這篇文章,  文章重點就是提出了focal loss這個cross entropy (CE) loss的改進版,實現了對於正負樣本不平衡的調整。具體思路就是其公式,

從這個公式就可以分析出,  假設r=2,pt分數為0.9,那麼這個easy example的loss將會被縮小0.01a倍  假設r=2,pt分數為0.968,那麼這個easy example的loss將會被縮小0.001a倍  假設r=2,pt分數為0.1,那麼這個hard example的loss將會被縮小0.81a倍  同樣所有樣本的loss都會縮小,但是hard example要不easy example縮小的小,從而取得好的訓練效果。

從上圖也可以反映出,r>0的曲線的loss要比r=0的曲線的更低,loss更小。

當然文章還提出了一個RetinaNet

RetinaNet以Resnet為基礎結構,通過Feature Pyramid Network (FPN)產生多尺度的輸出特徵圖,然後分別級聯一個分類和迴歸的子網路。這點和faster RCNN有點區別,在faster中是隻使用一個網路進行分類和迴歸操作,RetinaNet將2個任務分離後,也許會在精度上有一定提高吧,也更容易訓練。  這裡一個trick是RetinaNet的初始化,  (1)除了分類子網路的最後一層,其餘層w全部初始化為u=0, σ = 0:01的高斯分佈,b初始化為0。  (2)最後一個分類的卷積層,b初始化為- log((1 - π)/π),文中使用π = 0.01,這樣初始化使得每個anchor被標記為前景的概率為0.01,  這裡b的這個公式是怎麼得出的呢?  最終的分類得分是一個邏輯迴歸,公式為,

這裡的z=wx+b,由於w初始化為u=0, σ = 0:01的高斯分佈,所以,z=b,最終的概率設為π,從而得出公式,

從而解出,b=- log((1 -π)/π)

這個初始化對於focal loss的訓練很重要。

5,class balanced cross-entropy

出自Holistically-nested edge detection這篇文章, 主要用於FCN,U-net等分割,邊緣檢測的網路,用於對畫素級別的2分類樣本不平衡進行優化。

sigmoid_cross_entropy公式:

-y_hat* log(sigmoid(y)) - (1 - y_hat) * log(1 - sigmoid(y))

class_balanced_sigmoid_cross_entropy公式:

y_hat log(sigmoid(y)) -(1-β) * (1 - y_hat) * log(1 - sigmoid(y))

思想就是引入新的權值β,實現正負樣本loss的平衡,從而實現對不同正負樣本的平衡。