1.幾個重要的概念:
參考R-CNN的幾個重要概念
什么是R-CNN
? ? ? ? ? Since we combine region proposals?with CNNs, we call our method R-CNN: Regions with CNN
features.
R-CNN中的boundingbox回歸
下面先介紹R-CNN和Fast R-CNN中所用到的邊框回歸方法。
什么是IOU
為什么要做Bounding-box regression?
如上圖所示,綠色的框為飛機的Ground Truth,紅色的框是提取的Region Proposal。那么即便紅色的框被分類器識別為飛機,但是由于紅色的框定位不準(IoU<0.5),那么這張圖相當于沒有正確的檢測出飛機。如果我們能對紅色的框進行微調,使得經過微調后的窗口跟Ground Truth更接近,這樣豈不是定位會更準確。確實,Bounding-box regression 就是用來微調這個窗口的。
回歸/微調的對象是什么?
Bounding-box regression(邊框回歸)
那么經過何種變換才能從圖11中的窗口P變為窗口呢?比較簡單的思路就是:
注意:只有當Proposal和Ground Truth比較接近時(線性問題),我們才能將其作為訓練樣本訓練我們的線性回歸模型,否則會導致訓練的回歸模型不work(當Proposal跟GT離得較遠,就是復雜的非線性問題了,此時用線性回歸建模顯然不合理)。這個也是G-CNN: an Iterative Grid Based Object Detector多次迭代實現目標準確定位的關鍵。
PASCAL VOC數據集
PASCAL VOC為圖像識別和分類提供了一整套標準化的優秀的數據集,從2005年到2012年每年都會舉行一場圖像識別challenge。
2.R-CNN 模型
中心思想:
RCNN全程就是Regions with CNN features,從名字也可以看出,RCNN的檢測算法是基于傳統方法來找出一些可能是物體的區域,再把該區域的尺寸歸一化成卷積網絡輸入的尺寸,最后判斷該區域到底是不是物體,是哪個物體,以及對是物體的區域進行進一步回歸的微微調整(與深度學習里的finetune去分開,我想表達的就只是對框的位置進行微微調整)學習,使得框的更加準確。
? ? ? ?正如上面所說的,RCNN的核心思想就是把圖片區域內容送給深度網絡,然后提取出深度網絡某層的特征,并用這個特征來判斷是什么物體(文章把背景也當成一種類別,故如果是判斷是不是20個物體時,實際上在實現是判斷21個類。),最后再對是物體的區域進行微微調整。實際上文章內容也說過用我之前所說的方法(先學習分類器,然后sliding windows),不過論文用了更直觀的方式來說明這樣的消耗非常大。它說一個深度網絡(alexNet)在conv5上的感受野是195×195,按照我的理解,就是195×195的區域經過五層卷積后,才變成一個點,所以想在conv5上有一個區域性的大小(7×7)則需要原圖為227×227,這樣的滑窗每次都要對這么大尺度的內容進行計算,消耗可想而知,故論文得下結論,不能用sliding windows的方式去做檢測(消耗一次用的不恰當,望各位看官能說個更加準確的詞)。不過論文也沒有提為什么作者會使用先找可能區域,再進行判斷這種方式,只是說他們根據09年的另一篇論文[1],而做的。這也算是大神們與常人不同的積累量吧。中間的深度網絡通過ILSVRC分類問題來進行訓練,即利用訓練圖片和訓練的分類監督信號,來學習出這個網絡,再根據這個網絡提取的特征,來訓練21個分類器和其相應的回歸器,不過分類器和回歸器可以放在網絡中學習,
R-CNN 模型
如果要擬人化比喻,那 R-CNN 肯定是 Faster R-CNN 的祖父了。換句話說,R-CNN 是一切的開端。
R-CNN,或稱 Region-based Convolutional Neural Network,其工作包含了三個步驟:
1.借助一個可以生成約 2000 個 region proposal 的「選擇性搜索」(Selective Search)算法,R-CNN 可以對輸入圖像進行掃描,來獲取可能出現的目標。
2.在每個 region proposal 上都運行一個卷積神經網絡(CNN)。
3.將每個 CNN 的輸出都輸入進:a)一個支持向量機(SVM),以對上述區域進行分類。b)一個線性回歸器,以收縮目標周圍的邊界框,前提是這樣的目標存在。
下圖具體描繪了上述 3 個步驟:
3.論文通讀
Abstract:
? ? ? ? ? ? ? ? ?R-CNN的兩個貢獻:1.cnn卷積層的能力很強,可以遍歷候選區域達到精確的定位。2.當有標簽的數據很少的時候,我們可以事前進行有標簽(別的數據集上?)的預訓練作為輔助任務,然后對特定的區域進行微調。
Introduction:
? ? ? ? ? ? ? ?這篇文章最開始是在PASCAL VOC上在圖像分類和目標檢測方面取得了很好的效果。
? ? ? ? ? ? ? ?為了達到很好的效果,文章主要關注了兩個問題:1.用深層網絡進行目標的定位。2.如何用少量的帶標簽的檢測數據來訓練模型
? ? ? ? ? ? ? ? 對于對一個問題目標定位,通常有兩個思路可以走:
? ? ? ? ? ? ? ? ? ? ?1.把定位看成回歸問題。效果不是很好。
? ? ? ? ? ? ? ? ? ? ?2.建立劃窗檢測器。
? ? ? ? ? ? ? ? CNN一直采用建立劃窗這個方式,但是也只是局限于人臉和行人的檢測問題上。
? ? ? ? ? ? ? 本文使用了五個卷積層(感受野食195*195),在輸入時移動步長是32*32。
? ? ? ? ? ? ? 除此之外,對于定位問題,我們采用區域識別的策略。
? ? ? ? ? ? ? ? 在測試階段,本文的方法產生了大約2000個類別獨立的候選區域作為cnn的輸入。然? ? ? ? ? ?后得到一個修正后的特征向量。然后對于特定的類別用線性SVM分類器分類。我們用簡? ? ? ? ? ? ?單的方法(放射圖像變形)來將候選區域變成固定大小。
? ? ? ? ? ? ? ? ? 對于第二個缺少標簽數據的問題
? ? ? ? ? ? ? ? ? ?目前有一個思路就是無監督的預訓練,然后再加入有監督的微調。
? ? ? ? ? ? ? ? ? ?作為本文最大的貢獻之二:在ILSVRC數據集上,我們先進行有監督的預訓練。然? ? ? ? ? ? ? ? ? 后我們在PASCAL這個小數據集上我們進行特定區域的微調。在我們的實驗中,微調? ? ? ? ? ? ? ? ? 可以提升8%的mAP。
? ? ? ? ? ? ? ? ? ? 本文的貢獻;效率高
? ? ? ? ? ? ? ? ? ??僅僅是特別類別的計算是合乎情理的矩陣運算,和非極大值抑制算法。他們共享權? ? ? ? ? ? ? ? 值,并且都是低維特征向量。相比于直接將區域向量作為輸入,維數更低。
? ? ? ? ? ? ? ?本文方法處理能實現目標檢測,還以為實現語義分割。
2.用R-CNN進行目標檢測:
? ? ? ? ? ?有3個Model:
? ? ? ? ? ?(1)產生獨立的候選區域。
? ? ? ? ? ?(2)CNN產生固定長度的特征向量。
? ? ? ? ? ? (3)針對特別類別的一群svm分類器。
2.1 模塊的設計
候選區域:
? ? ? ? ? ? ? ? ?之前有大量的文章都提過如果產生候選區域。本文采用SS(selective search )方法。參考文獻【34】+【36】
特征抽取:
? ? ? ? ? ? ? ? 對于每個候選區域,我們采用cnn之后得到4096維向量。
2.2 測試階段的檢測
? ? ? ? ? ? ? 在測試階段,我們用選擇性搜素的方式在測試圖片上選取了2000個候選區域,如上圖所示的步驟進行。
運行時間分析:總之當時相比很快。
2.3訓練模型
有監督的預訓練:我們使用了大量的ILSVRC的數據集來進行預訓練CNN,但是這個標簽是圖片層的。換句話說沒有帶邊界這樣的標簽。
特定區域的微調:我們調整VOC數據集的候選區域的大小,并且我們把ImageNet上午1000類,變成了21類(20個類別+1個背景)。我們把候選區域(和真實區域重疊的)大于0.5的標記為正數,其他的標記為負數。然后用32個正窗口和96個負窗口組成128的mini-batch。
目標類別分類器:
? ? ? ? 對于區域緊緊的包括著目標的時候,這肯定就是正樣本。對于區域里面全部都是背景的,這也十分好區分就是負樣本。但是某個區域里面既有目標也有背景的時候,我們不知道如歌標記。本文為了解決這個,提出了一個閾值:IoU覆蓋閾值,小于這個閾值,我們標記為負樣本。大于這個閾值的我們標記為正樣本。我們設置為0.3。這個是一個超參數優化問題。我們使用驗證集的方法來優化這個參數。然而這個參數對于我們的最后的性能有很大的幫助。
? ? ? ? 一旦,我們得到特征向量。因為訓練數據太大了。我們采用standard hard negative mining method(標準難分樣本的挖掘)。這個策略也是的收斂更快。
2.4 Results on PASCAL VOC 201012
3.3. Visualization, ablation, and modes of error
3.1. Visualizing learned features
? ? ? 提出了一個非參數的方法,直接展現出我們的網絡學習到了什么。這個想法是將一個特定的單元(特性)放在其中使用它,就好像它自己是一個對象檢測器正確的。具體方法就是:我們在大量候選區域中,計算每個單元的激勵函數。按從最高到最低排序激活輸出,執行非最大值抑制,然后顯示得分最高的區域。我們的方法讓選定的單元“為自己說話”通過顯示它所觸發的輸入。我們避免平均為了看到不同的視覺模式和獲得洞察力為單位計算的不變性。我們可以看到來著第五個maxpooling返回的區域。第五層輸出的每一個單元的接受野對應輸出227*227的其中的195*195的像素區域。所以中心那個點單元有全局的視覺。
3.2. Ablation studies
實際上ablation study就是為了研究模型中所提出的一些結構是否有效而設計的實驗。比如你提出了某某結構,但是要想確定這個結構是否有利于最終的效果,那就要將去掉該結構的網絡與加上該結構的網絡所得到的結果進行對比,這就是ablation study。
Performance layer-by-layer, without fine-tuning.
我們只觀察了最后三層
Performance layer-by-layer, with fine-tuning.
微調之后,fc6和fc7的性能要比pool5大得多。從ImageNet中學習的pool5特性是一般的,而且大部分的提升都是從在它們之上的特定領域的非線性分類器學習中獲得的。
Comparison to recent feature learning methods.
? ? ? ? ? ? ?見上圖
3.3. Detection error analysis
? ? ? ? ? CNN的特征比HOG更加有區分。
3.4. Bounding box regression
有了對錯誤的分析,我們加入了一種方法來減少我們的定位錯誤。我們訓練了一個線性的回歸模型
4.相關文獻
HOG和SIFT很慢。但是我們可以由此得到啟發,利用有順序等級和多階段的處理方式,來實現特征的計算。
生物啟發的等級和移不變性,本文采用。但是缺少有監督學習的算法。
使得卷積訓練變得有效率。
第一層的卷積層可以可視化。
【23】本文采用這個模型,來得到特征向量
? ImageNet Large Scale Visual Recognition Competition
用了非線性的激勵函數,以及dropout的方法。
【34】直接將區域向量作為輸入,維數較高。IoU覆蓋閾值=0.5,而本文設置為0.3,能提高5個百分點。產生候選區域的方式:selective search 也是本文所采取的方式是結合【34】+【36】。
【5】產生候選區域的方式為:限制參數最小割
bounding box regression
HOG-based DPM文章3.2section中的對比試驗。
縮略圖概率。
[18][26][28]文章3.2section中的對比試驗。