讀論文系列:Object Detection · 干貨滿滿的RCNN

轉(zhuǎn)載請注明作者:夢里茶

Object Detection,顧名思義就是從圖像中檢測出目標(biāo)對象,具體而言是找到對象的位置,常見的數(shù)據(jù)集是PASCAL VOC系列。2010年-2012年,Object Detection進(jìn)展緩慢,在DPM之后沒有大的進(jìn)展,直到CVPR2014,RBG大神(Ross Girshick)把當(dāng)時爆火的CNN結(jié)合到Detection中,將PASCAL VOC上的準(zhǔn)確率提高到53.7%,本文為你解讀RBG的CVPR2014 paper:

Rich feature hierarchies for accurate object detection and semantic segmentation

Key insights

  • 可以用CNN對圖片局部區(qū)域做識別,從而判斷這個局部是不是目標(biāo)對象
  • 在標(biāo)記數(shù)據(jù)稀缺的情況下,可以用其他數(shù)據(jù)集預(yù)訓(xùn)練,再對模型進(jìn)行fine tune

RCNN Overview

RCNN Overview
  1. 輸入圖片
  2. 通過selective search給出2k個推薦區(qū)域(region proposal)

檢測問題的一個特點(diǎn)是,我們不僅需要知道一張圖片中是否包含目標(biāo)對象,而且需要知道目標(biāo)對象所處位置,有幾種方式,一種是回歸圖中檢測框的位置[38],但是準(zhǔn)確率很低,一種是用滑動窗口的方法將圖片切割成很多小塊,再對小塊做分析,但是對于CNN來說,每經(jīng)過一層pooling,感受野就會變小,RCNN采用了一個五層卷積的結(jié)構(gòu),要求輸入至少是195x195的尺寸,用滑窗不能保證這個輸入大小。

Weight learning on regions

Selective search是一種比較好的數(shù)據(jù)篩選方式,首先對圖像進(jìn)行過分割切成很多很多小塊,然后根據(jù)小塊之間的顏色直方圖、梯度直方圖、面積和位置等基本特征,把相近的相鄰對象進(jìn)行拼接,從而選出畫面中有一定語義的區(qū)域。關(guān)于Selective Search的更多信息可以查閱這篇論文:Recognition using Regions(CVPR2009)

  1. 將每個推薦區(qū)域傳入CNN提取特征
  2. 為每個類訓(xùn)練一個SVM,用SVM判斷推薦區(qū)域?qū)儆谀膫€類
  3. 用NMS對同個類的region proposals進(jìn)行合并
  4. 用bounding box regressor對預(yù)測位置進(jìn)行精細(xì)的修正,進(jìn)一步提高精度

非極大值抑制(NMS)顧名思義就是抑制不是極大值的元素,搜索局部的極大值。這個局部代表的是一個鄰域,鄰域有兩個參數(shù)可變,一是鄰域的維數(shù),二是鄰域的大小。這里不討論通用的NMS算法,而是用于在目標(biāo)檢測中用于提取分?jǐn)?shù)最高的窗口的。例如在行人檢測中,滑動窗口經(jīng)提取特征,經(jīng)分類器分類識別后,每個窗口都會得到一個分?jǐn)?shù)。但是滑動窗口會導(dǎo)致很多窗口與其他窗口存在包含或者大部分交叉的情況。這時就需要用到NMS來選取那些鄰域里分?jǐn)?shù)最高(是行人的概率最大),并且抑制那些分?jǐn)?shù)低的窗口。(轉(zhuǎn)自知乎專欄:曉雷的機(jī)器學(xué)習(xí)筆記)


訓(xùn)練

從上面的Overview可以看出,需要訓(xùn)練的主要有兩個部分,各個類共用的CNN和各個類單獨(dú)的SVM。

Network Structure

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

AlexNet

這是一個五層卷積+三層全連接的結(jié)構(gòu),輸入是224x224的圖片,輸出是1000維one-hot的類別,

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

VGG16

這是兩個網(wǎng)絡(luò)的檢測結(jié)果:

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

VGG16精度更高一些,但是計算量比較大,實時性不如AlexNet,方便起見我們下面都以AlexNet為基礎(chǔ)進(jìn)行分析。

Supervised Pretraining

首先用ImageNet預(yù)訓(xùn)練,輸入圖片,輸出為這張圖片包含的目標(biāo)對象的類別,而不涉及具體位置,因為ImageNet中沒有bounding box信息。訓(xùn)練到AlexNet能夠在分類任務(wù)上達(dá)到Hinton他們的精度之后,開始用檢測數(shù)據(jù)做Fine tune。

Domain Specific Fine Tuning

直接用ImageNet預(yù)訓(xùn)練得到的CNN在PASCAL VOC上表現(xiàn)肯定是不如人意的,接下來,用PASCAL VOC 的檢測數(shù)據(jù)進(jìn)行fine tune。 因為VOC有20個分類,在ILSVR2013的檢測任務(wù)中,最后有200個分類,而ImageNet有1000個分類,首先要把最后的全連接分類層替換成目標(biāo)任務(wù)輸出個數(shù)+1(加一個背景類)的全連接層。輸入數(shù)據(jù)用的是Selective Search得到的Region Proposals對應(yīng)的bounding box,

在這里的Fine tune中,需要判定Region Proposal屬于哪種目標(biāo)分類,在VOC的訓(xùn)練集中,有bounding box和對應(yīng)的分類標(biāo)注,RBG他們是檢查每個Region Proposal與訓(xùn)練集中bounding box的重疊率,如果Region Proposal和bounding box重疊率大于閾值(經(jīng)過實驗,選了0.5),則認(rèn)為這個Region Proposal的分類為bounding box對應(yīng)的分類,并且用這個對應(yīng)的bounding box作為Fine tune的輸入。

但是這些輸入大小不一,需要調(diào)整到目標(biāo)輸入尺寸224x224,在附錄A中討論了很多的預(yù)處理方法,

Preprocess

A. 原圖
B. 等比例縮放,空缺部分用原圖填充
C. 等比例縮放,空缺部分填充bounding box均值
D. 不等比例縮放到224x224
實驗結(jié)果表明B的效果最好,但實際上還有很多的預(yù)處理方法可以用,比如空缺部分用區(qū)域重復(fù)。

訓(xùn)練時,采用0.001的初始學(xué)習(xí)率(是上一步預(yù)訓(xùn)練的1/10),采用mini-batch SGD,每個batch有32個正樣本(各種類混在一起),96個負(fù)樣本進(jìn)行訓(xùn)練。

Object category classifiers

每個類對應(yīng)一個Linear SVM二分類器(恩,很簡單的一個SVM,沒有復(fù)雜的kernel),輸入是CNN倒數(shù)第二層的輸出,是一個長度為4096的向量,SVM根據(jù)這個特征向量和標(biāo)簽進(jìn)行學(xué)習(xí),調(diào)整權(quán)重,學(xué)習(xí)到特征向量中哪些變量對當(dāng)前這個類的區(qū)分最為有效。

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

附錄B中解釋,其實一開始RBG他們是用SVM的正負(fù)樣本定義來Fine tune CNN的,發(fā)現(xiàn)效果很差。SVM可以在小樣本上就達(dá)到比較好的效果,但CNN不行,所以需要用上更多的數(shù)據(jù)來Fine tune,重疊率大于0.5的Region Proposals的數(shù)據(jù)作為正樣本,可以帶來30倍的數(shù)據(jù),但是加入這些不精準(zhǔn)的數(shù)據(jù)的代價是,檢測時位置不夠準(zhǔn)確了(因為位置有些偏差的樣本也被當(dāng)做了正樣本)。

于是會有一個很自然的想法,如果有很多的精確數(shù)據(jù),是不是可以直接用CNN加softmax輸出21個分類,不用SVM做分類?RBG他們直接在這個分類方式上fine tune,發(fā)現(xiàn)這樣做的準(zhǔn)確率也很高(50.9%),但是不如用SVM做分類的結(jié)果(54.2%),一方面是因為正樣本不夠精確,另一方面是因為負(fù)樣本沒有經(jīng)過hard mining,但至少證明,是有可能直接通過訓(xùn)練CNN來達(dá)到比較好的檢測效果的,可以加快訓(xùn)練速度,并且也更加簡潔優(yōu)雅。

Bounding-box regression

這部分是在附錄C展開闡述的(CVPR篇幅限制)。首先,為每個類訓(xùn)練一個bounding box regressor,類似DPM中的bounding box regression,每個類的regressor可以為每個圖輸出一個響應(yīng)圖,代表圖中各個部分對這個類的響應(yīng)度。DPM中的Regressor則是用圖像的幾何特征(HOG)計算的;不同于DPM,RCNN-BB中這種響應(yīng)度(activation)是用CNN來計算的,輸入也有所不同,DPM輸入是原圖,輸出是響應(yīng)圖(從而得到bbox的位置),RCNN-BB的Regressor輸入是Region Proposals的位置和原圖,輸出是bounding box的位置。

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


P->G

其中,dx(P),dy(P), dw(P), dh(P)是四個線性函數(shù),輸入為P經(jīng)過前面說的fine tune過的CNN后得到的pool5特征,輸出為一個實數(shù)


訓(xùn)練就是解一個最優(yōu)化問題,求出四個w向量,使得預(yù)測的G和真實的G相差最小,用差平方之和代表距離,化簡后的形式為:


Train Regressor

其中,


Target variable

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

訓(xùn)練得到四個映射關(guān)系后,測試時用這四個映射就能夠?qū)︻A(yù)測的Region Proposals位置做精細(xì)的修正,提升檢測框的位置準(zhǔn)確率了。

至此,整個訓(xùn)練和測試過程就介紹完畢了。

玄學(xué)時間

在論文中還打開RCNN中卷積層分析它們的功能,在AlexNet的論文中,Hinton已經(jīng)用可視化的方式為我們展示了第一層卷積描述的是對象的輪廓和顏色,但后面的層因為已經(jīng)不能表示成圖像,所以不能直接可視化,RBG的方法是,輸入一張圖片的各個區(qū)域,看pool5(最后一層卷積層的max pooling輸出)中每個單元的響應(yīng)度,將響應(yīng)程度高的區(qū)域框出來:


Top regions for six pool5 units

pool5的feature map大小為6x6x256,圖中每行的16張圖代表一個unit響應(yīng)度最高的16張圖,將每張圖響應(yīng)度較高的區(qū)域用白色框框出來了,這里只挑了6個unit進(jìn)行展示(所以只有6行)。一個unit是6x6x256的張量中的一個實數(shù),這個數(shù)越大,意味著對輸入的響應(yīng)越高。

可以看到不同的unit有不同的分工,第一行的unit對person響應(yīng)度比較高,第二行的unit對dog和dot array(點(diǎn)陣)的響應(yīng)度比較高,可以從這個角度出發(fā),用每個unit充當(dāng)單獨(dú)的一種object detector。

附錄D中還有更多的可視化結(jié)果


activation

之所以說是玄學(xué)是因為,雖然這種可視化一定程度上體現(xiàn)了CNN學(xué)習(xí)到的東西,但是仍然沒有說明白為什么是這個單元學(xué)習(xí)到這種信息。

Summary

RCNN第一次把CNN結(jié)合Region proposal用到了detection任務(wù)中,取得了很好的效果,在這篇論文里,還體現(xiàn)了很多視覺深度學(xué)習(xí)的流行技巧,比如Pretrain,F(xiàn)ine tune,傳統(tǒng)方法與深度學(xué)習(xí)結(jié)合(分割+檢測,CNN+SVM,Bounding box regression),可以說是相當(dāng)值得一讀的好paper了。

這里有一個object detection相關(guān)的資料夾,收藏起來慢慢看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容