Hard Negtive Mining

先要明確:
OHEM是Hard Negtive Mining的一種方法。通過loss判斷難易程度。

在目標檢測中,多用效果差的樣本進行訓練,那提高了整個網絡的短板,總體的效果也會有提升。

難例挖掘:

難例挖掘是指,針對模型訓練過程中導致損失值很大的一些樣本(使模型很大概率分類錯誤的樣本),重新訓練它們。
維護一個錯誤分類樣本池, 把每個batch訓練數據中的出錯率很大的樣本放入該樣本池中,當積累到一個batch以後,將這些樣本放回網絡重新訓練。

2種難例挖掘技術

1.將easy的sample剔除:

一種是用於優化SVM的。通過一個working-set,訓練一個收斂於該working-set的SVM,然後使用該SVM,將一些easy的sample剔除(這些sample通常是遠離SVM分類邊界的),增加hard example到working-set中(這些hard-example是超出模型邊界的錯誤分類樣本)。注意,working-set只是整個訓練集的一個子集。

2.將false positives(FP)添加到訓練集中再繼續訓練:

另一種是用於優化non-SVM的。如被應用於淺層神經網絡,boosted decision tree等,這種方法首先開始訓練模型,訓練的數據集開始是由所有的positive example和隨機的negative samples組成的,訓練出來一個模型後,將該模型應用於一個更大的數據集,將model檢測錯誤的樣本(false positives)添加到訓練集中再繼續訓練。不斷迭代訓練。但是論文中提到這個過程通常只迭代一次,且沒有收斂的跡象。

已有的方法大多是基於loss來確定是否是hard的,比如OHEM,可以看下我博客中的代碼詳解 OHEM代碼詳解,根據分類和迴歸的loss進行判斷,強行保留loss比較大的。

別人的總結:
CNN目標檢測類的文章中,hard negative mining一般是,有正負樣本,然後分類器分出來一些分錯的負樣本(容易將負樣本看成正樣本的那些樣本),即假陽性(false positive),也就是說在對負樣本分類時候,loss比較大(label與prediction相差較大)的那些樣本,這些就是hard negative/困難樣本。
hard negative mining就是多找一些hard negative加入負樣本集,重新進行訓練,這樣會比easy negative(例如roi裏沒有物體,全是背景,這時候分類器很容易正確分類成背景,這個就叫easy negative;如果roi裏有二分之一個物體,標籤仍是負樣本,這時候分類器就容易把他看成正樣本,這時候就是hard negative)組成的負樣本集效果更好。主要體現在虛警率更低一些(也就是false positive少)。
如何判斷困難負樣本呢?先用初始樣本集(即第一幀隨機選擇的正負樣本)去訓練網絡,再用訓練好的網絡去預測負樣本集中剩餘的負樣本,選擇其中得分最高,即最容易被判斷爲正樣本的負樣本爲困難樣本,加入負樣本集中,重新訓練網絡,循環往復。

已有的方法大多是基於loss來確定是否是hard的,參考https://blog.csdn.net/u013608402/article/details/51275486文中的方法是,用兩個網絡,一個只用來前向傳播,另一個則根據選擇的ROI進行反向傳播。
類似的實現在https://blog.csdn.net/jiyangsb/article/details/77802941這篇文章中有implementation details也是一樣的
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章