1. 程式人生 > >深度學習之物體檢測(一)R-CNN

深度學習之物體檢測(一)R-CNN

作者Rgb

在這之前大部分物體檢測演算法都是基於傳統的影象處理方法,這是第一篇將深度學習用到物體檢測上的文章,直接影響是2012年ALEXNET在比賽中的重大成功。

簡單來說,RCNN使用以下四步實現目標檢測:

a. 在影象中用slective search 方法 確定約1000-2000個候選框

具體為什麼使用這個方法,原文在第三頁中有說While R-CNN is agnostic to the particular region proposal method, we use selective search to enable a controlled comparison with prior detection work。意思是R-CNN和區域選擇方法並沒有聯絡,對任何選擇方法都是相容的,這裡選用SS目的是方便於同之前別人的工作進行對比。

b. 對於每個候選框內影象塊,使用深度網路提取特徵,得到一個固定長度的特徵向量

We extract a 4096-dimensional feature vector from each region proposal using the Caffe implementation of the CNN described by Krizhevsky etal.這裡很清楚的說了,作者就是用了AlexNet的網路結構最好提取4096維的一維向量,作為特徵向量。

輸入去均值化的227×227 RBG通道圖片,然後經過5個卷積2個全連線。因為經過SS得到的候選框大小不一,但是CNN要求的輸入必須是227×227的。這裡就涉及到幾種歸一化方法。原論文在第11頁給出了幾種填充和縮放方法。這裡方法的選擇會影響3-5mAP。作者這裡使用了在得到原始的proposal region之後,再在原始圖片中選取p=16的畫素作為背景擴充,即向外擴充套件BBX的邊界,然後進行wrap到227*227。

這裡設計到CNN模型的訓練問題。

論文中採用的辦法是直接使用alexnet之前訓練好的模型引數,去掉最後一層1000個分類,換成你想要的分類數量+1,因為背景也要算是一類。這裡使用了遷移學習,在alexnet的基礎上進行finetune。訓練資料使用的是進行wrap之後得到的proposal region,對於某個類別,認為iou大於0.5為正樣本,否則為負樣本,每個batch為128,32個正樣本(包含20個類別),96個負樣本。然後使用SGD進行訓練。這樣我們就完成了對CNN的調優,這樣得到的CNN模型,可以用於提取特徵。將提取到的特徵在用於SVM訓練。這裡論文中提到了一句說訓練SVM時,樣本很大記憶體無法容納,使用了一種hard negative mining method的方法,這裡還沒有搞清楚

c. 對候選框中提取出的特徵,使用SVM二分類器判別是否屬於一個特定類

這裡對SVM進行訓練也涉及到正負樣本的問題,這裡的對於負樣本的判斷同CNN不同,從0-0.5,間距為0.1,發現0.3的效果最好,即IOU低於0.3則為負樣本。正樣本的定義也不一樣,當BBX把整個物體都包括進去的時候,才認為是正樣本。

論文的附錄B討論了,為什麼這裡CNN的finetune和SVM的訓練使用不同的正負樣本標準?

因為作者最初訓練SVM的時候,並沒有使用cnn上進行 finetune之後的特徵,而是直接使用ImageNet pre-trained CNN,發現論文中現在使用的SVM的訓練樣本標準是最優的;然後後來又考慮使用finetune之後,發現使用同樣的正負樣本標準,結果很差。

還討論了最後為什麼要用SVM,而不是直接使用softmax分類迴歸?因為這樣mAP下降了。

對於每個類別的物體,將提取的特徵使用SVM進行打分。對於所有打分超過閾值的區域進行極大值抑制演算法再次進行篩選,排除同一個物體出現多個迴歸框的問題。

d. 對於屬於某一特徵的候選框,用迴歸器進一步調整其位置

給定了一個目標函式,好像用了嶺迴歸和權值的L2範數,來確定BBX的對映結果。

遺留問題:

1 SVM具體訓練實現細節

2 迴歸框的訓練方法