目標檢測(object detection)擴展系列(二) OHEM:在線難例挖掘
- 2019 年 10 月 4 日
- 筆記
目標檢測系列: 目標檢測(object detection)系列(一) R-CNN:CNN目標檢測的開山之作 目標檢測(object detection)系列(二) SPP-Net:讓卷積計算可以共享 目標檢測(object detection)系列(三) Fast R-CNN:end-to-end的愉快訓練 目標檢測(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN 目標檢測(object detection)系列(五) YOLO:目標檢測的另一種打開方式 目標檢測(object detection)系列(六) SSD:兼顧效率和準確性 目標檢測(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN 目標檢測(object detection)系列(八) YOLOv2:更好,更快,更強 目標檢測(object detection)系列(九) YOLOv3:取百家所長成一家之言 目標檢測(object detection)系列(十) FPN:用特徵金字塔引入多尺度 目標檢測(object detection)系列(十一) RetinaNet:one-stage檢測器巔峰之作 目標檢測(object detection)系列(十二) CornerNet:anchor free的開端
目標檢測擴展系列: 目標檢測(object detection)擴展系列(一) Selective Search:選擇性搜索演算法 目標檢測(object detection)擴展系列(二) OHEM:在線難例挖掘
簡介
OHEM(Online Hard Example Mining)是一種在線的難例挖掘方法,它的論文是《Training Region-based Object Detectors with Online Hard Example Mining》,從時間上看它在Faster R-CNN的後面,但是文中沒有在Faster R-CNN的基礎上實驗,而是選擇了Fast R-CNN,將Fast R-CNN中的mini-batch sampling策略替換為OHEM,得到了不錯的效果。
OHEM原理
設計理念
我們先回歸一下Fast R-CNN的 mini-batch sampling:

Fast R-CNN要依賴SS演算法生成的區域建議框,然後組合mini-batch。如果batch size是128的話,那麼這128個RoI由2張圖片,各生產64個區域。並且,128個ROI中,正負樣本的比例是1:3,即25%的目標ROI和75%的背景ROI。正例的判定條件是,SS演算法給出的區域建議與Ground Truth的IOU要大於等於0.5。負例的判定條件是IOU要在[0.1,0.5)之間。這個IOU最小到了0.1是為了一種類似啟發式的難例挖掘策略。 OHEM通過實驗得到,這個mini-batch sampling中的1:3的比例對於訓練Fast R-CNN來說是個非常重要的超參數,如果不是這個值,都會使mAP降低三個點左右。 但是OHEM認為,mini-batch sampling並不具有高效和最優的狀態,因為Fast R-CNN中的mini-batch sampling還只是一種啟發式的難例挖掘策略,它是在SGD演算法優化之前就先驗的組合好了mini-batch。而OHEM可以在每一次迭代中在線的從大量區域建議框中挖掘難例,它更加適合SGD這種迭代式的訓練方式。OHEM可以取得更低的training loss和更高 mAP。
OHEM結構

上圖就是OHEM結構,可以發現OHEM中有兩套ROI Network,其中(a)是綠的部分,它是一個只讀(read-only)的ROI Network,每次只讀取權重後進行forward,不參與反向傳播和梯度更新,(b)是紅色的部分,它是一個正常功能的ROI Network。 對於給定影像,經過ss演算法生成ROIs,同樣計算出卷積特徵圖,在(a)中會對所有的ROI區域全部計算forward,並計算出oss,loss的大小可以反映出對於當前的模型,這些樣本的難易程度。隨後會對loss進行排序,選擇前batch size個樣本送入(b)中,進行forward和backward。 需要注意的是,在排序前要進行NMS,否則導致挖掘出的難例overlap會過高,影響訓練效果。
OHEM和Focal loss
Focal loss是在RetinaNet中提出的一種損失函數,和OHEM作用相似,卻又有些區別。 OHEM和Focal loss都做了兩件事,一是正負樣本的平衡,二是難例挖掘:
- OHEM本身用在了一個two-stage的模型上,那麼正負樣本就是可控的,OHEM做的事情是難例挖掘的過程;
- Focal loss應用在one-stage模型上,無論如何正負樣本都不能自由組合,所以只能靠最後計算損失的時候抑制負樣本,抑制簡單樣本,挖掘難例。Focal loss有兩個部分,一個是平衡交叉熵係數ata_{t}at和Focal loss新增的係數(1−pt)γ(1-p_{t})^{gamma }(1−pt)γ。個人感覺,這兩個係數對於上述的兩件事都是有作用的,並且這兩個係數本身會相互影響,RetinaNet通過實驗得到at=0.25a_{t}=0.25at=0.25和γ=2gamma=2γ=2時效果最好。
OHEM性能評價
首先是一個消融實驗:

- 對比11和13行、9行和10行,證明batch size是由一張圖還是兩張圖的ROI組合得到,對OHEM影響很小,但是對Fast R-CNN卻不是這樣
- 對比2行和4行,在Fast R-CNN的啟發式sampling中,如果把負樣本的IOU範圍調整到[0,0.5),結果還更好了些。
- 對比2行13行,就能看出來,OHEM比Fast R-CNN的mAP漲了2.7個點。
下面是總的實驗結合,分別在每一個已有方法上加上OHEM,效果都有提升。兩個表分別是VOC 2007和 VOC 2012: VOC 2007

VOC 2012
