OHEM-Training Region-based Object Detectors with Online Hard Example Mining - cvpr 2016 oral

轉載自http://blog.csdn.net/zimenglan_sysu/article/details/51318058

這是rbg大神的又一神作,cvpr 2016的oral paper,論文地址here

  給rbg大神發郵件問了下問題,想不打大神居然回我,還給了開源的代碼:https://github.com/abhi2610/ohem,(太開心了)

====

題外話,說下自己的implementation(主要基於rbg開源的OHEM代碼,把OHEM的相關代碼嵌入到faster-rcnn裏面去)

  主要是roi_data_layer/裏面的layer.py and minibatch.py和fast_rcnn裏面的config.py裏的ohem代碼加入到自己faster-rcnn的對應文件裏

  還要修改下select_hard_examples函數裏的BATCH_SIZE變量,用新的OHEM_BATCH_SIZE變量表示

附件是自己摸索出來的prototxt文件,至於實驗還在跑。

嗯今天跑完,效果爲70.4% (發現用不用nms,效果相差不到0.1%)

按自己的方式實現ohem的話,效果爲70.6%左右。

覺得應該是proposals的生成(end2end方式)的coverage不夠好導致的)

附件見:https://github.com/abhi2610/ohem/files/440512/my_ohem.tar.gz

最近論文作者把它的prototxts,yml等文件也公開了,和筆者的相差不大。

====

  這裏主要說下該論文的hard mining過程:

  先上圖,如Figure2所示:

  從圖中可以看出,本文的亮點在於在每次迭代中,較少訓練樣本下,如何hard negative mining,來提升效果。

  即針對Fast-RCNN框架,在每次minibatch(1張或者2張)訓練時加入在線篩選hard region的策略,達到新的SoA。

需要注意的是,這個OHEM適合於batch size(images)較少,但每張image的examples很多的情況。

(thousands of candidate examples,這裏的example可以理解爲instance、region或者proposal)

  這是一次ML經典算法bootstrapping在DL中的完美“嵌入”。


  具體來說:

1 將Fast RCNN分成兩個components:ConvNet和RoINet. ConvNet爲共享的底層卷積層,RoINet爲RoI Pooling後的層,包括全連接層;

2 對於每張輸入圖像,經前向傳播,用ConvNet獲得feature maps(這裏爲RoI Pooling層的輸入);

3 將事先計算好的proposals,經RoI Pooling層投影到feature maps上,獲取固定的特徵輸出作爲全連接層的輸入;

         需要注意的是,論文說,爲了減少顯存以及後向傳播的時間,這裏的RoINet是有兩個的,它們共享權重,

         RoINet1是隻讀(只進行forward),RoINet2進行forward和backward:

a 將原圖的所有props扔到RoINet1,計算它們的loss(這裏有兩個loss:cls和det);

b 根據loss從高到低排序,以及利用NMS,來選出前K個props(K由論文裏的N和B參數決定)

   爲什麼要用NMS? 顯然對於那些高度overlap的props經RoI的投影后,

     其在feature maps上的位置和大小是差不多一樣的,容易導致loss double counting問題

c 將選出的K個props(可以理解成hard examples)扔到RoINet2,

         這時的RoINet2和Fast RCNN的RoINet一樣,計算K個props的loss,並回傳梯度/殘差給ConvNet,來更新整個網絡


  論文提及到可以用一種簡單的方式來完成hard mining:

在原有的Fast-RCNN裏的loss layer裏面對所有的props計算其loss,根據loss對其進行排序,(這裏可以選用NMS),選出K個hard examples(即props),

反向傳播時,只對這K個props的梯度/殘差回傳,而其他的props的梯度/殘差設爲0即可。

  由於這樣做,容易導致顯存顯著增加,迭代時間增加,這對顯卡容量少的童鞋來說,簡直是噩夢。


  爲什麼說是online?

論文的任務是region-based object detection,其examples是對props來說的,即使每次迭代的圖像數爲1,它的props還是會很多,即使hard mining後


  爲什麼要hard mining:

1 減少fg和bg的ratio,而且不需要人爲設計這個ratio;

2 加速收斂,減少顯存需要這些硬件的條件依賴;

3 hard mining已經證實了是一種booststrapping的方式, 尤其當數據集較大而且較難的時候;

4 eliminates several heuristics and hyperparameters in common use by automatically selecting hard examples, thus simplifying training。

放寬了定義negative example的bg_lo threshold,即從[0.1, 0.5)變化到[0, 0.5)。

取消了正負樣本在mini-batch裏的ratio(原Fast-RCNN的ratio爲1:3)


===

  除了OHEM外,在訓練過程中,論文用到了multi-scale的train&test、iterative bounding box regression這兩種策略。具體參考fast-rcnn和sppnet這兩篇論文。

===


  還是看效果說話,效果屌屌的。



  


  的確很佩服rbg的,用簡單的方法來優雅的完成這麼難的任務,而且這些方法可以通用到其他任務上。

  優雅,簡單且不簡單。


其實有點好奇,爲啥不直接用到Faster RCNN上,這樣不是更叼麼?


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