Object Detection · RCNN論文解讀

轉載請註明做者:夢裏茶git

Object Detection,顧名思義就是從圖像中檢測出目標對象,具體而言是找到對象的位置,常見的數據集是PASCAL VOC系列。2010年-2012年,Object Detection進展緩慢,在DPM以後沒有大的進展,直到CVPR2014,RBG大神(Ross Girshick)把當時爆火的CNN結合到Detection中,將PASCAL VOC上的準確率提升到53.7%,本文爲你解讀RBG的CVPR2014 paper:github

Rich feature hierarchies for accurate object detection and semantic segmentation算法

Key insights

  • 能夠用CNN對圖片局部區域作識別,從而判斷這個局部是否是目標對象
  • 在標記數據稀缺的狀況下,能夠用其餘數據集預訓練,再對模型進行fine tune

RCNN Overview

RCNN Overview

  1. 輸入圖片
  2. 經過selective search給出2k個推薦區域(region proposal)網絡

    檢測問題的一個特色是,咱們不只須要知道一張圖片中是否包含目標對象,並且須要知道目標對象所處位置,有幾種方式,一種是迴歸圖中檢測框的位置[38],可是準確率很低,一種是用滑動窗口的方法將圖片切割成不少小塊,再對小塊作分析,可是對於CNN來講,每通過一層pooling,感覺野就會變小,RCNN採用了一個五層卷積的結構,要求輸入至少是195x195的尺寸,用滑窗不能保證這個輸入大小。框架

Weight learning on regions

Selective search是一種比較好的數據篩選方式,首先對圖像進行過度割切成不少不少小塊,而後根據小塊之間的顏色直方圖、梯度直方圖、面積和位置等基本特徵,把相近的相鄰對象進行拼接,從而選出畫面中有必定語義的區域。關於Selective Search的更多信息能夠查閱這篇論文:Recognition using Regions(CVPR2009)dom

  1. 將每一個推薦區域傳入CNN提取特徵
  2. 爲每一個類訓練一個SVM,用SVM判斷推薦區域屬於哪一個類
  3. 用NMS對同個類的region proposals進行合併
  4. 用bounding box regressor對預測位置進行精細的修正,進一步提升精度

非極大值抑制(NMS)顧名思義就是抑制不是極大值的元素,搜索局部的極大值。這個局部表明的是一個鄰域,鄰域有兩個參數可變,一是鄰域的維數,二是鄰域的大小。這裏不討論通用的NMS算法,而是用於在目標檢測中用於提取分數最高的窗口的。例如在行人檢測中,滑動窗口經提取特徵,經分類器分類識別後,每一個窗口都會獲得一個分數。可是滑動窗口會致使不少窗口與其餘窗口存在包含或者大部分交叉的狀況。這時就須要用到NMS來選取那些鄰域裏分數最高(是行人的機率最大),而且抑制那些分數低的窗口。(轉自知乎專欄:曉雷的機器學習筆記)機器學習

訓練

從上面的Overview能夠看出,須要訓練的主要有兩個部分,各個類共用的CNN和各個類單獨的SVM。函數

Network Structure

RCNN試了兩種CNN框架,一種是Hinton他們在NIPS2012上發表的AlexNet:ImageNet Classification with Deep Convolutional Neural Networks學習

AlexNet

這是一個五層卷積+三層全鏈接的結構,輸入是224x224的圖片,輸出是1000維one-hot的類別,測試

一種是VGG16(Very Deep Convolu-
tional Networks for Large-Scale Image Recognition)

VGG16

這是兩個網絡的檢測結果:

RCNN Result with AlexNet(T) and VGG16(O)

VGG16精度更高一些,可是計算量比較大,實時性不如AlexNet,方便起見咱們下面都以AlexNet爲基礎進行分析。

Supervised Pretraining

首先用ImageNet預訓練,輸入圖片,輸出爲這張圖片包含的目標對象的類別,而不涉及具體位置,由於ImageNet中沒有bounding box信息。訓練到AlexNet可以在分類任務上達到Hinton他們的精度以後,開始用檢測數據作Fine tune。

Domain Specific Fine Tuning

直接用ImageNet預訓練獲得的CNN在PASCAL VOC上表現確定是不如人意的,接下來,用PASCAL VOC 的檢測數據進行fine tune。 由於VOC有20個分類,在ILSVR2013的檢測任務中,最後有200個分類,而ImageNet有1000個分類,首先要把最後的全鏈接分類層替換成目標任務輸出個數+1(加一個背景類)的全鏈接層。輸入數據用的是Selective Search獲得的Region Proposals對應的bounding box,

在這裏的Fine tune中,須要斷定Region Proposal屬於哪一種目標分類,在VOC的訓練集中,有bounding box和對應的分類標註,RBG他們是檢查每一個Region Proposal與訓練集中bounding box的重疊率,若是Region Proposal和bounding box重疊率大於閾值(通過實驗,選了0.5),則認爲這個Region Proposal的分類爲bounding box對應的分類,而且用這個對應的bounding box做爲Fine tune的輸入。

可是這些輸入大小不一,須要調整到目標輸入尺寸224x224,在附錄A中討論了不少的預處理方法,

Preprocess

A. 原圖
B. 等比例縮放,空缺部分用原圖填充
C. 等比例縮放,空缺部分填充bounding box均值
D. 不等比例縮放到224x224
實驗結果代表B的效果最好,但實際上還有不少的預處理方法能夠用,好比空缺部分用區域重複。

訓練時,採用0.001的初始學習率(是上一步預訓練的1/10),採用mini-batch SGD,每一個batch有32個正樣本(各類類混在一塊兒),96個負樣本進行訓練。

Object category classifiers

每一個類對應一個Linear SVM二分類器(恩,很簡單的一個SVM,沒有複雜的kernel),輸入是CNN倒數第二層的輸出,是一個長度爲4096的向量,SVM根據這個特徵向量和標籤進行學習,調整權重,學習到特徵向量中哪些變量對當前這個類的區分最爲有效。

訓練SVM的數據和Fine tuning訓練CNN的數據有所不一樣,直接使用將PASCAL VOC訓練集中的正樣本,將與bounding box重疊率小於0.3的Region Proposals做爲背景(負樣本),這個重疊率也是調參比較出來的;另外一方面,因爲負樣本極多,論文采用了hard mining技術篩選出了難分類負樣本進行訓練。不過這樣的話,SVM和CNN的正負樣本定義就不一樣了,SVM的正樣本會少不少(那些重疊率大於0.5的bounding box就沒用上了)。

附錄B中解釋,其實一開始RBG他們是用SVM的正負樣本定義來Fine tune CNN的,發現效果不好。SVM能夠在小樣本上就達到比較好的效果,但CNN不行,因此須要用上更多的數據來Fine tune,重疊率大於0.5的Region Proposals的數據做爲正樣本,能夠帶來30倍的數據,可是加入這些不精準的數據的代價是,檢測時位置不夠準確了(由於位置有些誤差的樣本也被當作了正樣本)。

因而會有一個很天然的想法,若是有不少的精確數據,是否是能夠直接用CNN加softmax輸出21個分類,不用SVM作分類?RBG他們直接在這個分類方式上fine tune,發現這樣作的準確率也很高(50.9%),可是不如用SVM作分類的結果(54.2%),一方面是由於正樣本不夠精確,另外一方面是由於負樣本沒有通過hard mining,但至少證實,是有可能直接經過訓練CNN來達到比較好的檢測效果的,能夠加快訓練速度,而且也更加簡潔優雅。

Bounding-box regression

這部分是在附錄C展開闡述的(CVPR篇幅限制)。首先,爲每一個類訓練一個bounding box regressor,相似DPM中的bounding box regression,每一個類的regressor能夠爲每一個圖輸出一個響應圖,表明圖中各個部分對這個類的響應度。DPM中的Regressor則是用圖像的幾何特徵(HOG)計算的;不一樣於DPM,RCNN-BB中這種響應度(activation)是用CNN來計算的,輸入也有所不一樣,DPM輸入是原圖,輸出是響應圖(從而獲得bbox的位置),RCNN-BB的Regressor輸入是Region Proposals的位置和原圖,輸出是bounding box的位置。

定義一個region proposal的位置爲P=(Px, Py, Pw, Ph),x,y爲region prosal的中心點,w,h爲region proposal的寬高,對應的bounding box的位置爲G=(Gx,Gy,Gw,Gh),Regressor的訓練目標就是學習一個P->G的映射,將這個映射拆解爲四個部分:
P->G

其中,dx(P),dy(P), dw(P), dh(P)是四個線性函數,輸入爲P通過前面說的fine tune過的CNN後獲得的pool5特徵,輸出爲一個實數

訓練就是解一個最優化問題,求出四個w向量,使得預測的G和真實的G相差最小,用差平方之和表明距離,化簡後的形式爲:
Train Regressor

其中,
Target variable

跟前邊的四個映射是對應的,
同時加上了對w的l2正則約束,抑制過擬合

訓練獲得四個映射關係後,測試時用這四個映射就可以對預測的Region Proposals位置作精細的修正,提高檢測框的位置準確率了。

至此,整個訓練和測試過程就介紹完畢了。

玄學時間

在論文中還打開RCNN中卷積層分析它們的功能,在AlexNet的論文中,Hinton已經用可視化的方式爲咱們展現了第一層卷積描述的是對象的輪廓和顏色,但後面的層由於已經不能表示成圖像,因此不能直接可視化,RBG的方法是,輸入一張圖片的各個區域,看pool5(最後一層卷積層的max pooling輸出)中每一個單元的響應度,將響應程度高的區域框出來:
Top regions for six pool5 units

pool5的feature map大小爲6x6x256,圖中每行的16張圖表明一個unit響應度最高的16張圖,將每張圖響應度較高的區域用白色框框出來了,這裏只挑了6個unit進行展現(因此只有6行)。一個unit是6x6x256的張量中的一個實數,這個數越大,意味着對輸入的響應越高。

能夠看到不一樣的unit有不一樣的分工,第一行的unit對person響應度比較高,第二行的unit對dog和dot array(點陣)的響應度比較高,能夠從這個角度出發,用每一個unit充當單獨的一種object detector。

附錄D中還有更多的可視化結果
activation

之因此說是玄學是由於,雖然這種可視化必定程度上體現了CNN學習到的東西,可是仍然沒有說明白爲何是這個單元學習到這種信息。

Summary

RCNN第一次把CNN結合Region proposal用到了detection任務中,取得了很好的效果,在這篇論文裏,還體現了不少視覺深度學習的流行技巧,好比Pretrain,Fine tune,傳統方法與深度學習結合(分割+檢測,CNN+SVM,Bounding box regression),能夠說是至關值得一讀的好paper了。

相關文章
相關標籤/搜索