1. 程式人生 > >【論文筆記】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

【論文筆記】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

寫在前面:

     我看的paper大多為Computer Vision、Deep Learning相關的paper,現在基本也處於入門階段,一些理解可能不太正確。說到底,小女子才疏學淺,如果有錯誤及理解不透徹的地方,歡迎各位大神批評指正!

E-mail:[email protected]

————————————————————————————————————————————————

        Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks收錄於Neural Information Processing Systems (NIPS

), 2015( Meachine Learning領域的頂會)。R-CNN和Fast R-CNN引領了近兩年目標檢測的潮流,Fast R-CNN對R-CNN進行了加速,而這篇Faster R-CNN則進一步對Fast R-CNN進行了加速,使得這種基於CNN的目標檢測方法在real-time上看到了希望,使之運用到工程上成為了可能。

       在作者的主頁上提供了論文下載連結、Python程式碼、MATLAB程式碼以及相關文件,這樣一絲不苟的科研精神令人敬佩。這篇paper實驗部分相當充分,實驗結果強有力地證明了文中方法的有效性,非常不錯,值得學習。

        相關參考文獻如下:

        【1】R-CNN: Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic   segmentation[C], CVPR, 2014.

        【2】SPPNET: He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[C], ECCV, 2014.

        【3】Fast-RCNN: Girshick R. Fast R-CNN[C]. ICCV, 2015.


《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

論文架構:

Abstract

1.Introduction

2.Related Work

3.Faster R-CNN

     3.1 Region Proposal Networks

             3.1.1 Anchors

             3.1.2 Loss Function

             3.1.3 Training RPNs

     3.2 Sharing Feature for RPN and Fast R-CNN

     3.3 Implementation Details

4.Experiments

     4.1 Experiments on PASCAL VOC

     4.2 Experiments on MS COCO

     4.3 From MS COCO toPASCAL VOC

5.Conclusion

1.內容概述

        目前的目標檢測網路依靠region proposal演算法來假設目標的位置,諸如SPPnet和Fast R-CNN所取得的進步已經減少了這些檢測網路的執行時間,但也揭露了region proposal的計算是一個瓶頸。

        作者發現用於基於region的detector(如Fast R-CNN)的卷積feature map也可以用於生成region proposals。於是在這些卷積特徵的頂部,通過新增一些額外的卷積層來構建一個Region Proposal Network(RPN)(與檢測網路共享整幅影象的卷積特徵,由此使得可以進行幾乎無代價的region proposal),對每一位置同時輸出region bounds以及objectness score。因此RPN是一個全卷積網路(full convolutional network,FCN),可以進行端到端訓練,生成高質量的region proposals,然後送入Fast R-CNN進行檢測。

       RPNs可以預測尺度和長寬比變化很大的regionproposal。相對於使用影象金字塔(圖1(a))和filters金字塔(圖1(b))的方法,文中提出一種新穎的“anchor” boxes來作為多尺度和多長寬比的參照。可將其視為一個迴歸參照(regression reference)金字塔(圖1(c)),從而避免列舉多尺度和多長寬比的圖片或者filters。

      文中的方法通過共享卷積特徵進一步將RPN和Fast R-CNN整合成一個網路,並提出了一種訓練機制:在保持proposal固定的情況下,交替微調region proposal和object detection。文中的方法使用了deep VGG-16模型,並且該檢測系統在GPU上獲得了每秒5張影象的速度,在PASCAL VOC 2007、2012以及MS COCO資料集中獲得了最佳的目標檢測準確率。

圖1.處理多尺度的不同機制。(a)建立影象和feature map的金字塔,classifier在所有尺度上工作。(b)在feature map上建立多尺度/大小的filters金字塔。(c)文中在迴歸函式上reference boxes金字塔。

2.方法

文中的物件檢測系統,稱之為Faster RCNN,主要由兩個模組組成:第一層是深度全卷積網路來提取區域,第二層為Fast R-CNN檢測器。整個系統是一個物件檢測的獨立、統一的網路,如圖2所示。

圖2.Faster R-CNN是一個物件檢測的獨立、統一的網路。RPN模組作為這個統一的“attention”。

(1)Region Proposal Networks

RPN以一張任意大小的圖片作為輸入,輸出一組矩形object proposals,每一個帶有一個objectness score。文中使用全連線網路(full convelutional network)對這一過程進行建模,由於最終目的是與一個Fast R-CNN物件檢測網路共享計算,假定兩個網路共享一組卷積網路。本文中使用了Zeiler and Fergus(ZF)模型(帶5層可共享的卷積層)和Simonyan and Zisserman (VGG-16)模型(帶13層可共享的卷積層)。

        文中通過在最後一層共享卷積層輸出的卷積feature map上滑動一個小網路(視窗)來生成region proposals。這個小網路將輸入卷積feature map的n*n spacial window作為輸入。每個滑窗對映到低維特徵(ZF為256維,VGG為512維,後面跟著ReLU)。這個特徵被送入到兩個兄弟全連線層——box-regreesion層(reg)和一個box-classification層(cls)。在這篇文章中n=3,注意輸入圖片的有效接受域(ZF為171個畫素點,VGG為228個畫素點)。這個迷你網路如圖3左所示。由於迷你網路是以滑窗的方式來進行的,全連線層是通過所有空間位置來共享的。這個架構通過n*n卷積層後面跟著兩個1*1卷積層(分別為reg和cls)實現的。

      A. Anchor

       對於每個滑窗位置,同時預測多個region  proposal,每個位置最大可能的proposal數目定義為k。因此,reg層有4k個輸出來編碼k個box的座標,cls層會輸出2k個score來估計每個proposal是物件或者不是物件的可能性。我們對k個proposal進行引數化,相對應於k個參照box,我們稱之為anchor。每個anchor集中於滑窗中心,關聯一個尺度(scale)和一個長寬比(aspect ratio)(圖3左)。我們預設使用3中scale和3個 aspect ratio,因此對於每個滑窗位置,產生k=9個anchor對於一個大小為W*H的卷積feature map,總共會產生WHk個anchor。

圖3.左邊:Region Proposal Network(RPN)。右邊:使用RPN proposalzai PASCAL VOC 2007測試集上進行樣本檢測。文中方法檢測的物件在尺度和長寬比上變化範圍很大。

       平移不變anchor(Translation-Invariant Anchors)

       這種方法的一大主要特徵是平移不變性(translation invariant),而類似於MultiBox之類的方法使用K-means來生成800個anchor,不具有平移不變性

       同時平移不變性降低了模型的大小。MultiBox有(4+1)*800維的全連線輸出層,論文中的方法在k=9時僅有(4+2)*9維卷積輸出層。因此,這種方法的引數遠遠少於MultiBox的引數。

      多尺度anchor作為迴歸引用

      我們對anchor的設計使用了一種新穎的機制來處理多尺度(以及長寬比)。圖1展示了兩種流行的多尺度預測(multi-scale prediction)方法。一種是基於影象/特徵金字塔(image/feature pyramid)。這種方法將影象resize到多種尺度,然後為針對於一種尺度計算feature map或者深度卷積特徵(deep convelotional feature),有效但是耗時。第二種方法是在feature map上使用多尺度(和/或長寬比)的滑窗。例如,DPM分別使用不同大小的filter來訓練不同長寬比的模型。若這種方法用來解決多尺度問題,可以認為是“filter金字塔(pyramid of filters)”。第二種方法通常與第一種方法一起使用。

       我們基於anchor的方法建立了一個anchor的金字塔(pyramid of anchors),更加高效。我們的方法對與多尺度和多長寬比的anchor box相關聯的bounding boxes進行分類和迴歸。他僅僅依賴於單一尺度的圖片和feature map,並且使用單一大小的filter(feature map上的滑窗)。

       B. 損失函式(Loss function)

        為了訓練RPNs,我們為每個anchor設定了一個二值分類標籤(是一個object或者不是)。我們給以下兩類anchor標定一個正標籤(positive label):(i)與ground-truth box有最高Intersection-over-Union (IoU)的anchor;(ii)與任意ground-truth box的IoU重疊超過0.7的anchor。並且給與所有ground-truth boxes的IoU比例小於0.3的非正anchor標定一個負標籤(negative label)。

       一張圖片的損失函式定義為:

        式(1)

       其中,i為一個anchor在一個mini-batch中的下標,pi是anchor i為一個object的預測可能性。如果這個anchor是positive的,則ground-truth標籤pi*為1,否則為0。ti表示預測bounding box的4個引數化座標,ti*是這個positive anchor對應的ground-truth  box。分類的損失(classification loss)Lcls是一個二值分類器(是object或者不是)的softmax loss。迴歸損失(regression loss),其中R是Fast R-CNN中定義的robust ross function (smooth L1)。pi*Lreg表示迴歸損失只有在positive anchor(pi*=1)的時候才會被啟用。cls與reg層的輸出分別包含{pi}和{ti}。

       這裡還有一個平衡引數λ來權衡Ncls和Nreg。cls term標準化為mini-batch的大小(Ncls256),reg term標準化為anchor位置的數目(Nreg~2400)。預設λ=10。

         對於bounding box的迴歸,我們應用了以下4個座標的引數化:

x、y、w、h表示box中心的座標以及它的寬度和高度。變數x、xa和x*分別針對於預測的box、anchor boxhe ground-truth box(y、w、h也是一樣的)。可以認為是從一個anchor box到一個附近的ground-truth box的bouding box迴歸。

       然而,相對於之前基於感興趣區域的(RoI-based)的方法,我們的方式通過一種不同的方式來獲取bounding-box迴歸。在feature map上,我們用於迴歸的feature具有相同的空間大小(3×3)。為了解決變化大小的問題,讓其學習k個bouding box迴歸量。每個迴歸量對應一個尺度和一個長寬比,並且k個迴歸量並沒有共享權值。因此,儘管feature是固定的大小,仍能預測不同大小的box,多虧了anchor的設計。

      C. 訓練RPNs

      RPN可以由反向傳播(back-propagation)和隨機梯度下降(stochastic gradient descent, SGD)來進行端到端訓練。我們使用“image-centric”取樣策略來訓練這個網路。每個mini-batch來自於一張圖片,包含許多positive樣本anchor和negative樣本anchor。可以對所有anchor的損失函式進行優化,但是這樣會偏袒negative樣本。取而代之,我們在一張圖片中隨機取樣256個anchor來計算一個mini-batch的損失函式,取樣的positive anchor和negative anchor的比例在1:1之上。若一張影象沒有128個positive樣本,則用negative樣本來補充。

      使用便準偏差為0.01的零均值高斯分佈來對新增的兩層進行隨機初始化,其餘使用ImageNet的模型來進行初始化。我們使用0.001的學利率來學習60k個mini-batches,以及0.001的學習率來學習後面PASCAL VOC資料集的20k個mini-batch。momentum=0.9,weight-decay=0.0005,使用了Caffe框架。

    (2)RPN與Fast R-CNN共享特徵

      下面將介紹由RPN以及Fast R-CNN共享卷積層構成的統一網路的學習演算法(圖2)。通過交替優化來學習共享特徵,訓練演算法包含4步:

step1:使用3.1.3節的方法來訓練RPN。使用提前訓練好的ImageNet模型來初始化,然後對region proposal task進行微調。

step2:使用step1中得到的proposal和Fast R-CNN來訓練一個單獨的detector network。這個detector network也是使用提前訓練好的ImageNet模型來初始化。到這個時候兩個網路還沒有共享卷積層。

      step3:我們step2中訓練好的detector network來初始化RPN,然後訓練。這裡訓練的使用固定共享卷積網路,只微調RPN部分的網路層。這個時候兩個網路共享卷積層。

      step4:保持共享卷積層固定,只微調Fast R-CNN部分的網路層。

      這樣,兩個網路共享了相同的網路層,形成了一個統一的網路。

    (3)實現細節

       我們使用單一尺度的圖片來對region proposal  和object detection network進行訓練和測試。我們歸一化圖片使得它的較短邊s=600畫素。

        對於anchor,使用三種scale,box的面積分別為128*128、256*256、和512*512,高寬比分別為1:1、1:2和2:1。這些引數不需要針對某一資料集進行謹慎選擇(作者在下一章中對他們的影響進行了脫離實驗)。文中的方法不需要一個影象金字塔或者filter金字塔來預測多尺度區域,節省了許多執行時間。圖3右展示了文中方法處理大範圍變化的尺度和長寬比的能力。表1展示了使用ZFnet學習的每個anchor的平均proposal大小。文中的演算法允許與潛在接收域(underlying receptive field)大的預測。這樣的預測不是不可能——即便只有object的中間部分是可見的,它仍然能粗糙地推斷object的位置。

表1.對於每個anchor,使用ZF net學習的平均proposal大小(s=600)


        穿過圖片邊界的anchor boxes應該小心處理。在訓練的時候,忽略所有穿過邊界的anchors。對一張1000*60的影象,大概總共有2000(≈60*40*9)個anchor。忽略穿過邊界的anchor後,每張圖片大概有6000個anchor來進行訓練。然而,在測試的時候,將全卷積RPN應用到整張圖片中。這有可能產生穿過邊界的proposal boxes,作為圖片邊界減掉(文中寫的是which we clip to the image boundary)。

        一些RPN proposal彼此高度重合。為了減少冗餘,在它們的cls  score的基礎上在proposal區域應用非極大抑制(non-maximum suppression,NMS)。NMS的IoU閾值固定為0.7,使得每張圖片留下大概2000個proposal region。NMS並未降低最終的檢測準確率。然後,使用2000個RPN proposal來訓練Fast R-CNN,但是在測試的時候評估不同數目的proposal。

3.實驗及結果

(1)PASCAL VOC中上的實驗

         數 據  集:PASCAL VOC 2007、2012 (包含5K張訓練影象和5K張測試影象,超過20個object種類)

         網       絡:ZF net的“fast"版本(5個卷積層+3個全連線層) 和  VGG-16(13個卷積層+3個全連線層)

         衡量標準:檢測平均準確率(mean Average Precision,mAP)

       A.一般實驗及RPN消融實驗

      表2展示了當訓練和測試使用不同的region proposal方法時Fast R-CNN的結果,使用了ZF net,其中 SS表示Selective Search [4]EB表示EdgeBoxes [6]

表2.在PASCAL VOC 2007測試集上的檢測結果(使用VOC 2007訓練集進行訓練),detector為Fast R-CNN+ZF,使用了不同的proposal方面進行測試和訓練。

       

         下面對上面表格中的6組實驗進行一些說明:

        a.第1組實驗

            目的:驗證region proposal生成方法的影響。

            做法:在訓練和測試中分別使用SS、EB和RPN+ZF(文中方法)這三種方法來生成region proposal進行實驗。

            結果:RPN+ZF獲得了最佳結果,由於共享卷積計算,RPN+ZF速度也更快。

        b.第2組實驗

            目的:驗證RPN與Fast R-CNN檢測網路之間共享卷積層的影響。

            做法:在4步訓練法進行到第2步後停止。

            結果:正是因為第3步使用了detector-tuned特徵來很好地調整RPN,使得proposal的質量提升。

       c.第3組實驗

           目的:驗證RPN對Fast R-CNN detector 網路的影響

          做法:使用2000個SS proposals及ZF net來進行訓練,固定detector,變化測試時候使用的proposal regions。在這組實驗中,RPN並未與detector共享特徵。

          結果:SS+300 RPN proposals獲得了最優結果,56.8%;測試時僅使用排在最前面的(top-ranked)100個proposal,仍能獲得55.1%的mAP(第3組實驗的第1個實驗),說明排在前面的RPN proposal是準確的;在另一方面,極端地使用排在前面的6000個RPN  proposals(不帶NMS)獲得了55.2%的mAP(第3組實驗的第4個實驗),說明NMS並未影響的mAP,並且可能降低虛警。

      d.第4組實驗

          目的:驗證cls層的影響。

          做法:移除cls層(因此沒有使用NMS/Ranking),從unscored regions中隨機取樣N個proposals。

          結果:結果顯示,cls scores影響排名最前面的proposals。

      e.第5組實驗

          目的:驗證reg層的影響。

          做法:移除reg層(proposals變成了anchor boxes)。

          結果:mAP驟降到52.1%;說明高質量的proposal主要歸功於regreesed box bounds。儘管anchor boxes具有多種尺度和長寬比,但對於準確檢測遠遠不夠。

       f.第6組實驗

          目的:驗證更加強大的網路對於RPN proposal質量的影響

          做法:使用VGG-16來訓練RPN,detector仍然用SS+ZF的detector(第3組實驗中的第2個實驗的detector)。

          結果:mAP從56.8%(RPN+ZF)上升到了59.2%(RPN+VGG)。

        B.VGG-16的效能

       表3展示了在proposal和detection時都使用VGG-16,並在PASCAL 2007測試集上進行測試的結果(使用不同訓練集或不同訓練集的組合巡警訓練)。“07”表示VOC 2007訓練集,“07+12”表示VOC 2007訓練集與VOC 2012訓練集的合集。shared和unshared分別表示共享特徵和不共享特徵。對於RPN,訓練Fast R-CNN的proposal數目為2000:

表3:在PASCAL 2007測試集上的測試結果

      表4展示了在PASCAL 2012測試集上進行測試的結果(跟上面的實驗的區別只是使用了不同的測試集,上表使用的是VOC 2007,這裡使用的VOC 2012):

表4:在PASCAL VOC 2012上的測試結果

           表5統計了統計了整個物件檢測系統的時間。

表5:整個物件檢測系統的時間。除了SS proposal是在CPU上進行測試的之外,其餘都是在K40 GPU上進行的。“Region-wise"包括NMS,pooling,full-connected,以及softmax層。

           表6表7分別對應表3、表4,分別展示了在PASCAL VOC 2007和PASCAL VOC 2012測試集上進行測試時每一類物件的檢測結果。

表6:PASCAL VOC 2007測試集上進行測試時每一類物件的檢測結果(對應於表3)

表7:PASCAL VOC 2012測試集上進行測試時每一類物件的檢測結果(對應於表4)

       C. Sensitivities to Hyper-parameters

       表8驗證anchor設定的影響。

表8.使用不同anchor設定時Faster R-CNN在PASCAL VOC2007測試集上的檢測結果,網路為VGG-16,訓練集為VOC 2007訓練集。使用3中尺度和3中長寬比(69.9%)的預設設定(表中最後一行的設定)與表3中的設定是一樣的。

      表9驗證式(1)中不同λ值的影響。

表9.式(1)中使用不同λ值時,Faster R-CNN在PASCAL VOC 2007上的測試結果。網路為VGG-16,訓練集為VOC 2007 訓練集。預設設定λ=10(同表3)


      D.ReCall-to-IoU分析

      接下來,文中計算了ground-truth bounding boxes具有不同IoU(Intersection-over-Union)比例的proposal的召回率。圖4展示了使用300、1000、2000個proposals的結果,對比了SS、EB、RPN+ZF及RPN+VGG的方法。結果顯示,當proposal的數目從2000降到300時,RPN的方法表現最佳。當proposal越少時,SS和 EB 相對於RPN下降得更快。

圖4.Racall vs. IoU重疊率(PASCAL VOC 2007測試集)

      E.One-stage vs.two-stage Proposal + Detection

      這一部分的實驗主要是對比了OverFat【9】的方法與本文的方法。

表10One-stage vs.two-stage Proposal + Detection。檢測結果為使用ZF模型及Fast R-CNN在VOC 2007測試集上的結果。RPN使用非共享特徵。


(2)MS COCO

         資料集:Microsoft COCO物件檢測資料集(包含80個object種類,訓練集有80K張圖片,驗證集有40K張圖片,測試集有20K張圖片)

         衡量標準:平均使IoU(COCO的度量標準,簡單表示為[email protected][.5, .95])和[email protected][0.5](PASCAL VOC的度量標準)。

         針對於這個資料集,系統有一些小小的改變。文中使用了8-GPU來對模型進行進行訓練,RPN有效的mini-batch大小變為8(每個GPU一個),Fast R-CNN的為16(每個GPU兩個)。RPN和Fast R-CNN在訓練中以0.003的學習率進行了240k次迭代,然後以0.0003的學習率進行了80k次迭代。由於mini-batch大小的改變,所以對學習率進行了修改(從0.003開始而不是從0.001開始)。對於anchor,使用了3種長寬比和4種尺度(增加了64*64),主要是為了處理這個資料集上小物件(ps:要使用文中的網路處理新問題,應該針對新問題對一些引數進行修改)。除此之外,在Fast R-CNN中,negative樣本定義為具有最大IoU,ground truth在[0,0.5)區間的樣本,而不是[0.1, 0.5)。

           表11展示了在MS COCO資料集上的結果。

表11.MS COCO資料集上的物件檢測結果(%),模型為VGG-16。


(2)從MS COCO到PASCAL VOC

        首先直接將MS COCO的檢測模型應用到PASCAL VOC資料集上,不針對於PASCAL VOC的資料集進行任何調整。表12展示了實驗結果(表中的前三行對應表3、表4中的三條相關資料),在這種設定下,在PASCAL VOC 2007上取得了76.1%的mAP(對應表中第4行結果)。

      然後針對VOC資料集,對COCO檢測模型進行調整,COCO模型取代了ImageBet-pre-trained模型(用於初始化網路權值),Faster R-CNN使用3.2節方法進行調整。最終獲得了78.8%的mAP(對應於表中第5行結果)。