Is Faster R-CNN Doing Well for Pedestrian Detection?
ECCV 2016 Liliang Zhang & Kaiming He
原文鏈接:http://arxiv.org/pdf/1607.07032v2.pdf
Code : https://github.com/zhangliliang/RPN_BF/tree/RPN-pedestrian
摘要:行人檢測被人 argue 說是特定課題,而不是general 的物體檢測。雖然最近的深度物體檢測方法 如: Fast/Faster RCNN 在general 的物體檢測中,展現了強大的性能,但是對於行人檢測卻不太成功。本文研究了 Faster RCNN 在行人檢測中存在的問題,發現 RPN 在單獨的行人檢測器中表現良好,但是隨后的分類器卻降低了該結果。我們猜想可能是如下兩個原因導致的:
1. 對於處理小物體,feature maps 的分辨率較低;
2. 缺乏任何 bootstrapping strategy 來挖掘 hard negative examples。
基於這些觀察,我們提出了一個簡單但是非常有效的 baseline,利用 RPN后 通過 boosted forests 在共享的,高分辨率的卷積特征映射(using an RPN followed by boosted forests on shared, high-resolution convolutional feature maps)。在4個數據機上做了實驗,得到了相當的精度和較好的速度。

動機:隨着近來自動駕駛,智能監控中對於行人檢測越來越重視,但當前效果較好的行人 detectors 一般采用 hybrid 方法,結合傳統手工設計的feature 和 深度卷積feature。另一方面,Faster RCNN 在 general 的物體檢測上效果很好,而且僅僅利用了深度卷積特征,而沒有傳統手工設計的 feature,而且在行人檢測數據集上效果不好!
究其原因,可能有兩點:
首先,卷積feature maps 對於檢測小物體來說是低分辨率的。常規場景下的行人檢測,如自動駕駛和智能監控,行人的尺寸都是很小的。對於小物體而言,RoI pooling layer 在低分辨率的 feature map 上可能導致 “plain”features 。這些 feature 在小物體上不具有區分性,所以降低了分類器的性能。我們對比此處,可以發現,手工設計的feature 有較好的分辨率。我們通過從更淺層的但是分辨率高的層上來進行 feature 的采樣,利用 the hole algorithm 來增加 feature map 的尺寸。
其次,在行人檢測問題上,錯誤的預測,一般都是由於 hard background instances 的混淆導致的。與此對應的是 general object detection 的混淆來源是 multiple categories。為了解決這些樣本導致的問題,采用了級聯的 Boosted Forest (BF),執行有效的 hard negative mining(bootstrapping)和 樣本的 re-weight,來分類 RPN proposals。不像之前的方法利用手工設計的features 來訓練 forest,我們重新利用 RPN 的卷積特征來訓練。這種策略不但通過共享feature 降低了分類器的計算代價,也探索了深度學習到的features。
本文在此觀察的基礎上,提出了特別簡單但是有效的baseline,基於 RPN and BF 的機制進行行人檢測。我們的方法克服了上述兩種困難,而且擺脫了傳統手工設計 feature。
所提出的方法:本文的方法包括兩個部分:RPN 用來產生 candidate boxes 和 卷積特征maps,以及 Boosted Forest 利用這些卷積特征進行分類。
1. RPN for Pedestrian Detection
這個和 Faster RCNN 貌似是一樣的,咱不解釋;
2. Feature Extraction:
根據 RPN 產生的 proposals,我們采用 RoI pooling 來區域中提取固定長度的 feature。這些 feature 可以用來訓練 BF。不像 Faster RCNN 需要將這些 features 送到 originally fully-connected (fc)layers,所以就限制了其維度,BF 分類器 對於特征的維度沒有限制。
令人印象深刻的是,由於沒有特征維度的限制,對於我們來說,就可以利用這些來增強分辨率。具體的是,給定微調后的 RPN 的 layer,我們可以用一種 trick 來計算高分辨率的卷積特征映射。例如,我們設置 pool3 的 stride 為 1,將 Conv4 filter dilate 2,使得 Conv4 的步長從 8 變成了 4. 不像之前的方法,微調 dilated filters,在我們的方法中,我們僅僅用來特征提取,而不會再去微調新的 RPN。
雖然采用了和 Faster RCNN 類似的 RoI resolution,這些 RoIs 實在更高的分辨率上進行的。如果 RoI 的輸入分辨率 比 輸出小,那么 the pooling bins collapse and the feature become "flat" and not discriminative. 這個問題在我們的方法中被消除,因為在我們的 downstream classifier 用 Conv5_3 是不受約束的。
3. Boosted Forest :
根據 RPN 產生的 region proposals,confidence scores,以及 features,所有的這些都用來產生級聯的 Boosted Forest classifier。我們采用 RealBoost algorithm, we bootstrap the training by 6 times, and the forest in each stage has {64, 128, 256, 512, 1024, 1536} trees。初始的時刻,訓練集合包含所有的正樣本,以及同樣個數的隨機采樣出來的負樣本。在每一個階段,額外的 hard negative examples 被挖掘出來,並且添加到 training set 中。最終,在所有的 bootstrapping stages 完畢之后訓練一個 2048 trees 的森林。最終的 forest classifier 用來做 inference。
注意到,其實沒有必要同等的處理初始的 proposals,因為我們的 proposals 在 RPN 之后得到了初始的 score。換句話說, the RPN 可以被當作是 stage-0 的分類器 f0。
這里只是粗略的講解了后續分類的流程,具體細節還要參考原始文章。

實驗結果:

本文的實驗,可謂相當的充分啦,在4個數據集上做了實驗,與上圖許多種方法做了對比,又充分分析了自己算法各個成分對最終精度的影響,額,想想自己的實驗設計,額,差距不小。。。
評價:
本文是中山大學的師兄李亮哥的畢業之作,能在微軟實習並且和大神 Kaiming He 合作搞出頂會,是一種怎樣的體驗?額 又扯遠了,哈哈
說重點,總體而言,本文在做實驗的基礎上,發現了 faster RCNN 在行人檢測方面的不足,在實踐中發現科研問題,深度挖掘身體背后的原因,並且結合已有的技術,完美的將其解決,本身就為我們提供了一個很好的科研思路和科研案例,值得我們學習!
就其流程設計來看,並不花哨,也滅有各種裝逼的公式,但是很好的發現了問題,分析了背后的原因,並且將其解決的很漂亮,這一點難能可貴!從問題出發,在路上 。。。

