一 為什么讀這篇
大名鼎鼎的Faster R-CNN,二階段法的代表,屬于目標(biāo)檢測領(lǐng)域的必讀之作。
二 截止閱讀時(shí)這篇論文的引用次數(shù)
2019.2.9 6349次。在細(xì)分領(lǐng)域里能有這么多,可見影響之廣泛。
三 相關(guān)背景介紹
15年6月首次掛在arXiv上,就比Fast RCNN晚一個(gè)多月,比YOLO v1早幾天,比ResNet早半年。中了15年的NIPS。作者還是MSRA時(shí)那幾個(gè),一作任少卿當(dāng)時(shí)還是MSRA的實(shí)習(xí)生,現(xiàn)在在Momenta,二作何愷明不用多說了,三作Ross Girshick(rbg)是R-CNN和Fast R-CNN的一作,YOLO v1的三作,四作孫劍也不用多說。拿了2015年的ImageNet和COCO的冠軍。
四 關(guān)鍵詞
Faster R-CNN
RPN
anchor
五 論文的主要貢獻(xiàn)
1 比Fast R-CNN更快
2 提出RPN,統(tǒng)一了候選區(qū)域生成和最終的檢測為一體
六 詳細(xì)解讀
0 摘要
雖然SPPnet和Fast R-CNN減少了檢測網(wǎng)絡(luò)的運(yùn)行時(shí)間,不過候選區(qū)域的計(jì)算依舊是瓶頸。本文提出RPN(Region Proposal Network)網(wǎng)絡(luò),與檢測網(wǎng)絡(luò)共享整幅圖像的卷積特征,從而實(shí)現(xiàn)幾乎無成本的候選區(qū)域計(jì)算。RPN是全卷積網(wǎng)絡(luò),可以同時(shí)預(yù)測每個(gè)位置上的目標(biāo)框和目標(biāo)分?jǐn)?shù)。RPN生成高質(zhì)量的候選區(qū)域,用于Fast R-CNN的檢測。通過共享卷積特征將RPN和Fast R-CNN合并為一個(gè)網(wǎng)絡(luò),這些卷積特征相當(dāng)于通過"attention"機(jī)制,RPN部分告訴網(wǎng)絡(luò)應(yīng)該朝哪里看。用VGG16,能到5FPS,(測試時(shí))每張圖僅用300個(gè)候選區(qū)域就達(dá)到了VOC2007,2012和COCO的SOTA。
1 介紹
Selective Search是過去最流行的方法之一,它是基于低階特征貪心地合并超像素,每張圖在CPU上要運(yùn)行2秒。EdgeBoxes提供了候選質(zhì)量和速度的最佳權(quán)衡,每張圖要0.2秒。而本文提出的RPN每張圖10毫秒。
本文觀察到像Fast R-CNN這樣基于區(qū)域的檢測器使用的卷積特征圖也可以用來生成候選區(qū)域。在這些卷積特征之上,通過增加一些卷積層來構(gòu)建RPN,這些層可以在常規(guī)網(wǎng)格的每個(gè)位置處同時(shí)回歸候選框和目標(biāo)分?jǐn)?shù)。因此RPN是一種全卷積網(wǎng)絡(luò)(Fully Convolutional Network FCN),可以針對生成候選區(qū)域的任務(wù)進(jìn)行端到端的訓(xùn)練。
RPN旨在有效地預(yù)測具有各種尺度和縱橫比的候選區(qū)域。相比之前方法,如圖1a的圖像金字塔,圖1b的濾波器金字塔,本文引入一種全新的"anchor",作為多種尺度和縱橫比的參考(圖1c)。這種機(jī)制避免了大量的具有多個(gè)尺度或縱橫比的圖像(濾波器)。該模型在使用單尺度圖像進(jìn)行訓(xùn)練和測試時(shí)表現(xiàn)都很好,因此有利于提速。
2 相關(guān)工作
候選目標(biāo)
廣泛使用的候選目標(biāo)方法包括基于組超像素(如Selective Search,CPMC,MCG)和基于滑動窗口的方法(如EdgeBoxes)。候選目標(biāo)方法作為與檢測器獨(dú)立的外部模塊提供(如Selective Search,R-CNN,F(xiàn)ast R-CNN)
用于目標(biāo)檢測的深度網(wǎng)絡(luò)
OverFeat方法訓(xùn)練全連接層來預(yù)測框坐標(biāo),而這個(gè)任務(wù)是假設(shè)只有單個(gè)對象的定位,后面的全連接層轉(zhuǎn)為卷積層用于檢測多個(gè)類相關(guān)的目標(biāo)。MultiBox方法并沒有共享候選和檢測網(wǎng)絡(luò)之間的特征。
共享卷積計(jì)算受到了越來越多的關(guān)注。
3 Faster R-CNN
Faster R-CNN主要由兩個(gè)模塊組成,第一個(gè)是產(chǎn)生候選區(qū)域的全卷積網(wǎng)絡(luò),第二個(gè)是使用候選區(qū)域的Fast R-CNN。用流行詞"attention"來說就是RPN模塊告訴Fast R-CNN模塊應(yīng)該看哪里。
3.1 Region Proposal Network
RPN用任意大小的圖像作為輸入,輸出是一組矩形候選目標(biāo),每一個(gè)矩形都有是否為目標(biāo)的分?jǐn)?shù)。
為了生成候選區(qū)域,在最后一個(gè)共享卷積層輸出的特征圖上滑動一個(gè)小網(wǎng)絡(luò)。該小網(wǎng)絡(luò)將特征圖的n × n空間窗口作為輸入。每個(gè)滑動窗口映射為低維特征(ZF 256-d,VGG 512-d,后面跟著ReLU),之后將該特征輸入兩個(gè)并行的全連接層,一個(gè)為box回歸層(reg),一個(gè)為box分類層(cls)。本文設(shè)置n=3。這個(gè)mini網(wǎng)絡(luò)在一個(gè)位置上的示例如圖3左所示。注意該mini網(wǎng)絡(luò)以滑動窗口方式運(yùn)行,因此所有空間位置共享全連接層。該架構(gòu)很自然地用n x n卷積層實(shí)現(xiàn),后面跟著兩個(gè)并行的1 x 1卷積層(分別用于reg和cls)
3.1.1 Anchors
在每個(gè)滑動窗口位置,同時(shí)預(yù)測多個(gè)候選區(qū)域,其中每個(gè)位置最大可能侯選數(shù)定義為k。因此回歸層有4k個(gè)輸出,用于編碼k個(gè)box的坐標(biāo),分類層有2k個(gè)得分,用于估計(jì)每個(gè)候選是否為目標(biāo)的概率(本文為了簡化實(shí)現(xiàn)用了2分類的softmax層,其實(shí)也可以用邏輯回歸生成k個(gè)得分作為預(yù)測)k個(gè)候選相對于k個(gè)參考框(本文稱為anchors)參數(shù)化。anchor位于滑動窗口的中心,并且與尺度和縱橫比相關(guān)聯(lián)。默認(rèn)在每個(gè)滑動位置設(shè)置3個(gè)尺度和3個(gè)縱橫比,生成k=9個(gè)anchors。對于大小為W x H的卷積特征圖,總共有W x H x k個(gè)anchors(2400多個(gè))。
平移不變的Anchors
本文方法的一個(gè)重要屬性就是平移不變性,anchors和計(jì)算相對于anchors的候選都有這個(gè)特點(diǎn)。如果平移一幅圖像上的一個(gè)目標(biāo),候選也應(yīng)當(dāng)平移,在每個(gè)位置上預(yù)測候選的函數(shù)也應(yīng)一樣。這種平移不變性是由FCN的特點(diǎn)保證的。平移不變性也減小了模型的大小,當(dāng)k=9個(gè)anchors時(shí),有(4+2) x 9維的卷積輸出層。
作為回歸參考的多尺度Anchors
見圖1。本文方法僅僅依賴單尺度圖像和特征圖,單獨(dú)大小的濾波器(特征圖上的滑動窗口)。正是由于這種基于anchors的多尺度設(shè)計(jì),本文方法能簡單的在單尺度圖像上計(jì)算卷積特征。多尺度anchors的設(shè)計(jì)是共享特征的關(guān)鍵組件,而無需額外的成本去解決尺度問題。
3.1.2 Loss Function
為了訓(xùn)練RPNs,給每個(gè)anchor賦予一個(gè)二元標(biāo)簽(是否為目標(biāo))。當(dāng)符合以下條件之一時(shí),賦為正標(biāo)簽:
a. 與真實(shí)box有最高IoU的anchor
b. anchor與任意真實(shí)box的IoU>0.7
注意一個(gè)真實(shí)box可以給多個(gè)anchors賦予正標(biāo)簽。如果anchor和所有真實(shí)box的IoU都小于0.3則賦為負(fù)標(biāo)簽。如果Anchor即非正也非負(fù)則對訓(xùn)練目標(biāo)沒有貢獻(xiàn)。基于這些定義,一幅圖像的損失函數(shù)定義如下:
式中,i為mini-batch中一個(gè)anchor的索引,為anchor i是目標(biāo)的預(yù)測概率。如果anchor是正的,真實(shí)標(biāo)簽
為1,anchor是負(fù)的,則為0。
是預(yù)測的邊界框的4個(gè)參數(shù)化坐標(biāo)的向量表示,
是與正anchor關(guān)聯(lián)的真實(shí)box。分類損失
是兩個(gè)類的對數(shù)損失(是否為目標(biāo))。對于回歸損失,用
,其中R是Fast R-CNN定義的健壯損失函數(shù)(平滑L1)。
意味著僅當(dāng)用于正anchor時(shí)回歸損失是激活的。
(和mini-batch size一樣),
(anchor位置的數(shù)量),設(shè)置
,以使分類和回歸的權(quán)重大致相等。另外發(fā)現(xiàn)上式的規(guī)范化并不是必需的,也許可以簡化掉。。
對于邊界框回歸,采用R-CNN中的4個(gè)坐標(biāo)的參數(shù)化:
其中是box中間的坐標(biāo)及其寬高。變量
分別為預(yù)測box,anchor box,真實(shí)box。上面的式子可以理解為從anchor box到附近真實(shí)box的邊界框回歸。
然而,本文的邊界框回歸方法與之前的SPPnet,F(xiàn)ast R-CNN又有所不同。之前方法的邊界框回歸是對任意大小的RoIs執(zhí)行特征池化,并且回歸權(quán)重由所有區(qū)域大小共享。本文定義中,用于回歸的特征在特征圖上有同樣的空間大小(3 x 3)。為了考慮不同的大小,學(xué)習(xí)了一組k個(gè)邊界框回歸。每個(gè)回歸負(fù)責(zé)一種尺度和一種縱橫比,k個(gè)回歸不共享權(quán)重。
多虧了anchors的設(shè)計(jì),即使特征具有固定的尺寸/比例,仍然可以預(yù)測各種尺寸的boxes。
3.1.3 訓(xùn)練RPNs
每個(gè)mini-batch從一幅圖像上生成許多正負(fù)anchor樣本。對所有的anchor進(jìn)行優(yōu)化也是可以的,不過這樣會朝著負(fù)樣本偏移,因?yàn)樗鼈冋贾鲗?dǎo)地位。取而代之,本文從一張圖像上隨機(jī)采樣256個(gè)anchors,來計(jì)算一個(gè)mini-batch的損失函數(shù),其中正負(fù)anchors的比例為1:1。當(dāng)一幅圖像上的正樣本少于128個(gè)時(shí),才用負(fù)樣本補(bǔ)齊。
對所有新加的層用高斯分布做初始化,其余層用ImageNet預(yù)訓(xùn)練權(quán)重。基于Caffe實(shí)現(xiàn)。
3.2 用于RPN和Fast R-CNN的共享特征
有3種方式來訓(xùn)練共享特征的網(wǎng)絡(luò)
a. 交替訓(xùn)練
先訓(xùn)練RPN,然后用候選訓(xùn)練Fast R-CNN。通過Fast R-CNN調(diào)優(yōu)的網(wǎng)絡(luò)再初始化RPN,然后迭代這個(gè)過程。
b. 近似的聯(lián)合訓(xùn)練
如圖2所示,在訓(xùn)練期間RPN和Fast R-CNN合并為一個(gè)網(wǎng)絡(luò)。在每個(gè)迭代中,前向傳播生成的候選區(qū)域被視為就好像固定的,預(yù)先計(jì)算好的候選,用于訓(xùn)練后面的Fast R-CNN。
c. 非近似的聯(lián)合訓(xùn)練
RoI pooling
4步交替訓(xùn)練
本文采用4步訓(xùn)練算法來學(xué)習(xí)共享特征
1 如3.1.3節(jié)描述,訓(xùn)練RPN。用ImageNet預(yù)訓(xùn)練權(quán)重,并做基于候選區(qū)域任務(wù)的微調(diào)。
2 使用第一步RPN生成的候選訓(xùn)練Fast R-CNN。檢測網(wǎng)絡(luò)也用ImageNet預(yù)訓(xùn)練權(quán)重,此時(shí)兩個(gè)網(wǎng)絡(luò)還沒共享卷積層
3 用檢測網(wǎng)絡(luò)來初始化RPN訓(xùn)練,但是固定共享卷積層,僅微調(diào)RPN特有的層。此時(shí)兩個(gè)網(wǎng)絡(luò)共享卷積層
4 保持共享卷積層固定,微調(diào)Fast R-CNN特有的層
3.3 實(shí)現(xiàn)細(xì)節(jié)
對于anchors,使用3種尺度,3種縱橫比。
與圖像邊界交叉的anchors需要仔細(xì)處理。在訓(xùn)練時(shí),忽略了所有邊界交叉的anchors。測試時(shí)對邊界交叉anchor做圖像邊緣的裁剪就行了。
用IoU閾值為0.7的NMS,這樣每幅圖大約還剩2000個(gè)候選區(qū)域。再用這2000個(gè)候選區(qū)域訓(xùn)練Fast R-CNN。
4 實(shí)驗(yàn)
4.1 PASCAL VOC
VOC2007包含5千張訓(xùn)練集,5千張測試集,20類。
RPN的剝除實(shí)驗(yàn)
見表2下半部分。
盡管anchor有多種尺度和縱橫比,對于精確的檢測也是不夠的。
VGG-16的性能
對超參數(shù)的敏感性
見表8,表9。
Recall-to-IoU分析
如圖所示,當(dāng)候選數(shù)量從2000降到300時(shí),RPN方法表現(xiàn)得很好。這也解釋了為什么在使用少至300個(gè)候選時(shí)RPN仍然有很好的mAP。正如前面分析的,這要?dú)w功于RPN的cls。
一階段檢測 vs. 二階段候選 + 檢測
OverFeat是一階段,類相關(guān)的方法。
4.2 MS COCO
VOC2007包含8萬張訓(xùn)練集,4萬張驗(yàn)證集,2萬張測試集,80類。針對這個(gè)數(shù)據(jù)集也做了幾點(diǎn)輕微的修改。用8卡GPU實(shí)現(xiàn),RPN的batch size為8(每卡1個(gè)),F(xiàn)ast R-CNN的batch size為16(每卡2個(gè))。因?yàn)閎atch size改大了,學(xué)習(xí)率也跟著調(diào)大。對于anchors,用3個(gè)縱橫比4個(gè)尺度(加了64 x 64),主要目的是處理數(shù)據(jù)集中的小目標(biāo)。
將VGG-16用ResNet-101替換后,mAP從41.5%/21.2%提升到48.4%/27.2%(basenet的影響還是很明顯的)
4.3 從MS COCO到PASCAL VOC
COCO的類別是VOC的超集,所以預(yù)測VOC的訓(xùn)練數(shù)據(jù)可以加上COCO。從表12可以看出,數(shù)據(jù)集的影響還是很大的。
5 總結(jié)
提出RPN用于生成候選區(qū)域。通過與下游的檢測網(wǎng)絡(luò)共享卷積特征,生成候選區(qū)域這步幾乎沒有額外的代價(jià)。本文方法提供一個(gè)統(tǒng)一的,基于深度學(xué)習(xí)的目標(biāo)檢測系統(tǒng),可以近實(shí)時(shí)的運(yùn)行。因?yàn)閷W(xué)習(xí)到的RPN提升了候選區(qū)域的質(zhì)量,因此也改進(jìn)了整個(gè)目標(biāo)檢測的準(zhǔn)確率。
七 讀后感
這個(gè)論文是系列的,還是得看Fast R-CNN和R-CNN,它們分別遞進(jìn)的解決不同的問題。
素質(zhì)四連
要解決什么問題
生成候選區(qū)域和之后的檢測網(wǎng)絡(luò)是割裂的
用了什么方法解決
提出RPN,用一個(gè)網(wǎng)絡(luò)統(tǒng)一生成候選區(qū)域和Fast R-CNN
效果如何
共享卷積特征,在提速的同時(shí)檢測效果也有稍許提升
還存在什么問題
雖然已經(jīng)是Faster了,相比一階段還是不夠快。
八 補(bǔ)充
基于深度學(xué)習(xí)的目標(biāo)檢測技術(shù)演進(jìn):R-CNN、Fast R-CNN、Faster R-CNN
從編程實(shí)現(xiàn)角度學(xué)習(xí)Faster R-CNN(附極簡實(shí)現(xiàn))
RoI pooling/Spp和max pooling很像,除了在重疊區(qū)域的pooling。(rbg在ICCV15的slides第16頁)
因?yàn)樵紙D像上物體大小不一樣,所以需要將這些摳出來的Region想辦法resize到相同的尺寸,這一步方法很多(pooling或插值都可以,一般采用pooling,因?yàn)榉聪騻鞑r(shí)求導(dǎo)方便)
Regoin Proposal的作用:
如果沒有,會產(chǎn)生過多的不包含任何有用的類別的region,因?yàn)檫@些region數(shù)量龐大,不能為softmax帶來有用的性能提升(因?yàn)闊o論怎么預(yù)測,其類別都是背景,對于該識別的類別沒有貢獻(xiàn))。這些無用的Region都要單獨(dú)進(jìn)入分類網(wǎng)絡(luò),十分耗費(fèi)計(jì)算時(shí)間。
整張圖像上,所有的框,一開始就由anchor和網(wǎng)絡(luò)結(jié)構(gòu)確定了。所有后續(xù)的工作,RPN提取前景和背景,其實(shí)就是保留包含前景的框,丟掉包含背景的,包括后續(xù)的NMS,也是丟掉多余的,并非重新新建一個(gè)框。網(wǎng)絡(luò)輸出的兩個(gè)bbox回歸,都是輸出坐標(biāo)偏移量,也就是在初始錨點(diǎn)的基礎(chǔ)上做的偏移修正和縮放,并非輸出一個(gè)原圖上的絕對坐標(biāo)。
每個(gè)特征圖上的點(diǎn)都有9個(gè)anchor,對于下采樣16倍,生成(H/16) x (W/16) x 9個(gè)anchor,對于一個(gè)512x62x37的feature map,大約有2w個(gè)anchor,這種做法很像暴力窮舉,2w多個(gè)哪怕是蒙也能把ground truth蒙中。
SPP的第一個(gè)貢獻(xiàn)就是將金字塔思想加入到CNN,實(shí)現(xiàn)了數(shù)據(jù)的多尺度輸入。在卷積層和全連接層之間加入了SPP層,此時(shí)網(wǎng)絡(luò)的輸入可以是任意尺度的,在SPP層中每一個(gè)pooling的filter會根據(jù)輸入調(diào)整大小,而SPP的輸出尺度始終是固定的。
ROI pooling其實(shí)就是一個(gè)單層SPPNet
rbg自己在slide里說了,當(dāng)時(shí)用4步交替訓(xùn)練法并沒有任何基礎(chǔ)原則,只是僅僅為了在NIPS deadline前交稿。。。
R-CNN的3個(gè)問題:
1 測試時(shí)很慢:需要在每一個(gè)候選區(qū)域運(yùn)行完整的CNN
2 SVM和回歸是后處理:在響應(yīng)SVM和回歸時(shí)CNN特征沒有更新
3 復(fù)雜的多階段訓(xùn)練流程
Fast R-CNN如何解決的:
1 共享候選區(qū)域的卷積計(jì)算
2 3 端到端的訓(xùn)練整個(gè)系統(tǒng)(multi-task loss)
Fast R-CNN的問題:
測試時(shí)速度并不包括候選區(qū)域提取
Faster R-CNN如何解決的:
讓CNN也來做候選區(qū)域提取!