1. 程式人生 > >Rich feature hierarchies for accurate object detection and semantic segmentation (RCNN)筆記

Rich feature hierarchies for accurate object detection and semantic segmentation (RCNN)筆記

RCNN系列對比圖,來源

1、本文主要是記錄RCNN。論文相對於以前的傳統方法的改進有:

  • 速度,經典的目標檢測演算法使用滑動視窗依次判斷所有可能的區域。本文則(採用selective Search方法)預先提取一系列較可能是物體的候選區域,之後僅僅在這些候選區域上進行feature extraction,進行判斷。
  • 訓練集,經典的目標檢測演算法在區域中提取人工設定的特徵。本文則採用深度網路進行特徵提取。使用兩個資料庫,一個較大的識別庫(ImageNet ILSVC 2012):標定每張圖片中物體的類別。一千萬張影象,1000類。一個較小的檢測庫(PASCAL VOC2007):標定每張圖片中,物體的類別和位置,一萬影象,20類。本文使用是別人進行與訓練得到CNN(有監督預訓練),而後用檢測庫調優引數,最後在檢測庫上評測。

2、RCNN的主要步驟

  • 候選區域的提取:一張影象生成1k~2k的候選區域,使用的Selective Search方法
  • 特徵提取:對每個候選區域,使用深度網路提取特徵(CNN),將提取到的feature map儲存到磁碟
  • 類別判斷:將特徵送入到每一類的SVM分類器,判斷是否屬於該類。【利用feature map訓練SVM來對目標和背景進行分類,每個類一個二進位制SVM
  • 位置精修:使用迴歸去精細修正候選框的位置

3、步驟細節

  • 候選框的選取:要搜尋出圖片中所有可能是物體的區域,搜出的候選框是矩形的,而且大小各有不同。然後CNN對輸入圖片的大小是固定的。因此需要對每個候選框進行大小預處理。在paper裡有兩種不同的處理方法:
    • 各向異性縮放:不管圖片的長寬比例,直接進行縮放,變為CNN的nxn的大小。
    • 各向同性縮放:solution_A,先擴充再裁剪,直接在原始圖片中,把候選框的邊界進行擴充套件延伸成正方形,然後進行裁剪;如果已經延伸到了原始圖片的外邊界,那麼就用候選框的中的顏色均值來填充。solution_B,先裁剪後擴充,把候選框的圖片裁剪出來,然後用固定的背景顏色填充成正方形圖片(背景顏色也是採用候選框的畫素顏色均值)。【對於A,B方法,paper中還有個padding處理,作者發現採用各向異性縮放、padding=16的精度最高。】
  • 特徵提取:Alexnet的精度為58.5%,VGG16精度為66%,但是AlexNet計算量比較小。Alexnet包含5個卷積層、2個全連線層,pool5層的神經元個數為9216、f6和f7的神經元個數都是4096個,最終提取特徵每個輸入候選框圖片都能得到一個4096維的特徵向量,那麼如果是2000個候選框,則有2000x4096維度。
    • 這裡,初始化的引數也是直接選取已經訓練好的Alexnet的引數作為初始化引數,然後fine-tuning訓練。
    • 我們在將候選框放入到CNN訓練的前,需要先將框標註好為正、負樣本與ground-truth box的IOU>0.5則認為是正樣本【正樣本在這裡應該有對應的ground-truth box類別,這樣在back-propagation時才能得到對於的loss來進行梯度下降】,否則是負樣本,即背景。
    • 假設要檢測的物體種類是N個,那麼我們需要將上面預訓練的CNN(AlexNet)最後一層給替換掉,替換成N+1個輸出的神經元(加1是background),然後這一層採用引數隨機初始化的方法。其他的網路層引數不變。接著就可以使用SGD訓練了,learning rate=0.001。每次訓練時,batch size=128,其中32個是正樣本,96個是負樣本。【這裡注意了,這裡的分類,不用做最後的分類,因為我們這裡主要是為了進行fine-tuning,所以在IOU選擇時(IOU>0.5就當作正樣本,是為了增加CNN訓練的資料量)並不嚴格,故精度會比較低。
來源

 

AlexNet
  • svm訓練,類別判斷:對於svm,我們只有當bounding box把整個物體包含在內才叫正樣本。沒有包含到的,且IOU<0.3的都是負樣本。【作者測試了IOU閾值各種方案,最終採用了IOU閾值為0.3效果最好,即當重疊率小於0.3時,我們就將其標註為負樣本。】一旦CNN f7層的特徵被提取出來,那麼我們將為每個物體類別訓練一個svm分類器。當我們用CNN提取2000個候選框,可以得到2000x4096這樣的特徵向量矩陣,然後我們只需要把這樣的一個矩陣跟svm權值矩陣4096*N點乘(N為分類類別數目,因為我們訓練了N個svm,每個svm包含了4096個權值w。【那這個不就相當於一個全連線層麼,f7與分類FC層之間的w為4096xN,即svm,而在fine-tuning裡,使用的是N+1】),就可以得到結果。
  • 位置精修:對每一類目標,使用一個線性迴歸器進行精修。輸入為pool5層的4096維特徵,輸出為x,y方向的縮放和平移。訓練樣本:判定為本類的候選框中和真值重疊面積大於0.6的候選框。

4、測試階段

  • 對影象進行Selective search得到2000個region proposals,並歸一化到227x227
  • 在CNN中提取特徵,然後使用最後的層(SVM,20個神經單元??)對特徵向量進行打分,得到一個2000x20的矩陣,其中20是類別。
  • 對2000x20的每一列進行排序,然後對每一列進行NMS【將score最大的bounding box作為選定框,計算其餘的bounding box與當前最大score與box的IOU,去除IOU大於設定閾值的bounding box。重複上面步驟,直至候選bounding box為空,在將score小於一定閾值的選定狂刪除得到這一類的結果。然後繼續下一個分類的NMS,即下一列】。

 

來源

問題解釋:

  • Selective Search:first使用一種過分割手段【過分割就是把本來屬於一個整體的目標分成多個,比如分割一朵花,結果把花瓣、莖葉全分到不同的區域,這就是過分割】,將影象分割成小區域(1K~2K個)。second檢視現在的小區域,按照合併規則合併可能性最高的兩個相鄰區域。重複知道整張圖合併成一個區域位置。third輸出所有曾經存在過的區域,所謂候選區域。                              其中合併的規則如下:優先合併顏色(顏色直方圖)相近、紋理(梯度直方圖)相近的、合併後總面積小的、合併後,總面積在其BBox中所佔比例最大的(保證合併後的形狀規則)。
  • 超畫素【參考】:為了在不犧牲太大精確度的情況下降維。超畫素最直觀的解釋就是把一些具有相似特性的畫素“聚合”起來,形成一個更具有代表性的大“元素”。而這個新的元素,將作為其他影象處理演算法的基本單位。一來可以大大降低了維度,二來可以剔除一些異常畫素點。至於根據什麼特性把一個個畫素點聚集起來,可以是顏色、紋理、類別等。

  • 對於目標檢測問題:圖片分類標註好的訓練資料非常多,但是物體檢測的標註資料卻很少,如何用少量的標註資料,訓練高質量的模型,這就是文獻最大的特點,這篇論文采用了遷移學習的思想:先用了ILSVRC2012這個訓練資料庫(這是一個圖片分類訓練資料庫),先進行圖片分類訓練【預訓練CNN】。這個資料庫有大量的標註資料,共包含了1000種類別物體,因此預訓練階段CNN模型的輸出是1000個神經元(當然也直接可以採用Alexnet訓練的模型引數)。再在小型目標資料集PASCAL_VOC上微調(fine-tuning)CNN。

 

 

參考:https://zhuanlan.zhihu.com/p/23006190

            https://zhuanlan.zhihu.com/p/38946391

            https://zhuanlan.zhihu.com/p/23341500