Hard Negative Mining Method 思想
hard是困難樣本,negative是負樣本,hard negative就是說在對負樣本分類時候,loss比較大(label與prediction相差較大)的那些樣本,也可以說是容易將負樣本看成正樣本的那些樣本。
- 例如roi里沒有物體,全是背景,這時候分類器很容易正確分類成背景,這個就叫easy negative;
- 如果roi里有二分之一個物體,標簽仍是負樣本,這時候分類器就容易把他看成正樣本,即假陽性(false positive),這時候就是hard negative。
hard negative mining就是多找一些hard negative加入負樣本集,進行訓練,這樣會比easy negative組成的負樣本集效果更好。主要體現在虛警率更低一些(也就是false positive少)。因為它相當于一個錯題集。
如何判斷它為困難負樣本呢?也很簡單,我們先用初始樣本集去訓練網絡,再用訓練好的網絡去預測負樣本集中剩余的負樣本,選擇其中得分最高,即最容易被判斷為正樣本的負樣本為困難樣本,加入負樣本集中,重新訓練網絡,循環往復,然后我們會發現:咦!我們的網絡的分類性能越來越強了!假陽性負樣本與正樣本間也越來越相似了!(因為此時只有這些妖怪區域能迷惑我們的分類器了)。
Hard Negative Mining Method 使用
通常 使用 Hard Negative Mining Method 的方法為:
迭代地交替訓練,用樣本集更新模型,然后再固定模型來選擇分辨錯的目標框并加入到樣本集中繼續訓練。傳統,我們會使用 SVM + Hard Negative Mining Method 進行訓練
Hard Negative Mining Method 缺點
那么傳統的 Hard Negative Mining Method 有什么 缺點 呢?
Hard Negative Mining Method 很難應用到 end-to-end 的檢測模型。 因為 Hard Negative Mining Method 需要迭代訓練,如果我們將他使用到 end-to-end 的卷積神經網絡,需要每次將網絡凍結一段時間用來生成 hard negative。而這對于使用線上優化的算法來說是不可能的,例如 SGD (隨機梯度下降算法)。使用 SGD 來訓練網絡需要上萬次更新網絡,如果每迭代幾次就固定模型一次,這樣的速度會慢得不可想象。
我們可以觀察到在 fast rcnn 和 faster rcnn 中都沒有用到 Hard Negative Mining Method。這就是因為如上的原因,一般使用 SVM 分類器才能使用此方法(SVM 分類器和 Hard Negative Mining Method 交替訓練)