Feature Pyramid Networks for Object Detection 总结
最近在閱讀FPN for object detection,看了網(wǎng)上的很多資料,有些認(rèn)識(shí)是有問(wèn)題的,當(dāng)然有些很有價(jià)值。下面我自己總結(jié)了一下,以供參考。
1. FPN解決了什么問(wèn)題?
答: 在以往的faster rcnn進(jìn)行目標(biāo)檢測(cè)時(shí),無(wú)論是rpn還是fast rcnn,roi 都作用在最后一層,這在大目標(biāo)的檢測(cè)沒(méi)有問(wèn)題,但是對(duì)于小目標(biāo)的檢測(cè)就有些問(wèn)題。因?yàn)閷?duì)于小目標(biāo)來(lái)說(shuō),當(dāng)進(jìn)行卷積池化到最后一層,實(shí)際上語(yǔ)義信息已經(jīng)沒(méi)有了,因?yàn)槲覀兌贾缹?duì)于一個(gè)roi映射到某個(gè)feature map的方法就是將底層坐標(biāo)直接除以stride,顯然越后,映射過(guò)去后就越小,甚至可能就沒(méi)有了。 所以為了解決多尺度檢測(cè)的問(wèn)題,引入了特征金字塔網(wǎng)絡(luò)。
下面我們介紹一下特征金字塔網(wǎng)絡(luò)。如下引用[1]
?
-
圖(a)是相當(dāng)常見(jiàn)的一種多尺度方法,稱為featurized image pyramid,這種方法在較早的人工設(shè)計(jì)特征(DPM)時(shí)被廣泛使用,在CNN中也有人使用過(guò)。就是對(duì)input iamge進(jìn)行multi scale,通過(guò)設(shè)置不同的縮放比例實(shí)現(xiàn)。這種可以解決多尺度,但是相當(dāng)于訓(xùn)練了多個(gè)模型(假設(shè)要求輸入大小固定),即便允許輸入大小不固定,但是也增加了存儲(chǔ)不同scale圖像的內(nèi)存空間。
-
圖(b)就是CNN了,cnn相比人工設(shè)計(jì)特征,能夠自己學(xué)習(xí)到更高級(jí)的語(yǔ)義特征,同時(shí)CNN對(duì)尺度變化魯棒,因此如圖,從單個(gè)尺度的輸入計(jì)算的特征也能用來(lái)識(shí)別,但是遇到明顯的多尺度目標(biāo)檢測(cè)時(shí),還是需要金字塔結(jié)構(gòu)來(lái)進(jìn)一步提升準(zhǔn)確率。
從現(xiàn)在在imageNet和COCO數(shù)據(jù)集上領(lǐng)先的的一些方法來(lái)看,在測(cè)試的時(shí)候都用到了featurized image pyramid方法,即結(jié)合(a),(b)。 說(shuō)明了特征化圖像金字塔的每一級(jí)的好處在于,產(chǎn)生了多尺度的特征表示,每一級(jí)的特征都有很強(qiáng)的語(yǔ)義(因?yàn)槎加胏nn生成的特征),包括高分辨率的一級(jí)(最大尺度的輸入圖像)。
但是這種模式有明顯的弊端,相比于原來(lái)方法,時(shí)間增長(zhǎng)了4倍,很難在實(shí)時(shí)應(yīng)用中使用,同樣,也增大了存儲(chǔ)代價(jià),這就是為什么只是在測(cè)試階段使用image pyramid。但是如果只在測(cè)試階段使用,那么訓(xùn)練和測(cè)試在推斷的時(shí)候會(huì)不一致。所以,最近的一些方法干脆舍棄了image pyramid。
但是image pyramid不是計(jì)算多尺度特征表示的唯一方法。deepCNN能夠?qū)哟位奶卣?#xff0c;而且因?yàn)槌鼗淖饔?#xff0c;會(huì)產(chǎn)生金字塔形的特征,具有一種內(nèi)在的多尺度。但是問(wèn)題在于,高分辨率的map(淺層)具有l(wèi)ow-level的特征,所以淺層的目標(biāo)識(shí)別性能較弱。這也是不同level融合的目的。
-
如圖(c),SSD較早嘗試了使用CNN金字塔形的層級(jí)特征。理想情況下,SSD風(fēng)格的金字塔 重利用了前向過(guò)程計(jì)算出的來(lái)自多層的多尺度特征圖,因此這種形式是不消耗額外的資源的。但是SSD為了避免使用low-level的特征,放棄了淺層的feature map,而是從conv4_3開(kāi)始建立金字塔,而且加入了一些新的層。因此SSD放棄了重利用更高分辨率的feature map,但是這些feature map對(duì)檢測(cè)小目標(biāo)非常重要。這就是SSD與FPN的區(qū)別。
-
圖(4)是FPN的結(jié)構(gòu),FPN是為了自然地利用CNN層級(jí)特征的金字塔形式,同時(shí)生成在所有尺度上都具有強(qiáng)語(yǔ)義信息的特征金字塔。所以FPN的結(jié)構(gòu)設(shè)計(jì)了top-down結(jié)構(gòu)和橫向連接,以此融合具有高分辨率的淺層layer和具有豐富語(yǔ)義信息的深層layer。這樣就實(shí)現(xiàn)了從單尺度的單張輸入圖像,快速構(gòu)建在所有尺度上都具有強(qiáng)語(yǔ)義信息的特征金字塔,同時(shí)不產(chǎn)生明顯的代價(jià)。
下面我們?cè)賮?lái)看一下相似的網(wǎng)絡(luò):
?
上面一個(gè)帶有skip connection的網(wǎng)絡(luò)結(jié)構(gòu)在預(yù)測(cè)的時(shí)候是在finest level(自頂向下的最后一層)進(jìn)行的,簡(jiǎn)單講就是經(jīng)過(guò)多次上采樣并融合特征到最后一步,拿最后一步生成的特征做預(yù)測(cè)。而FPN網(wǎng)絡(luò)結(jié)構(gòu)和上面的類似,區(qū)別在于預(yù)測(cè)是在每一層中獨(dú)立進(jìn)行的。后面的實(shí)驗(yàn)證明finest level的效果不如FPN好,原因在于FPN網(wǎng)絡(luò)是一個(gè)窗口大小固定的滑動(dòng)窗口檢測(cè)器,因此在金字塔的不同層滑動(dòng)可以增加其對(duì)尺度變化的魯棒性。另外雖然finest level有更多的anchor,但仍然效果不如FPN好,說(shuō)明增加anchor的數(shù)量并不能有效提高準(zhǔn)確率。
?
自下而上的路徑
CNN的前饋計(jì)算就是自下而上的路徑,特征圖經(jīng)過(guò)卷積核計(jì)算,通常是越變?cè)叫〉?#xff0c;也有一些特征層的輸出和原來(lái)大小一樣,稱為“相同網(wǎng)絡(luò)階段”(same network stage )。對(duì)于本文的特征金字塔,作者為每個(gè)階段定義一個(gè)金字塔級(jí)別, 然后選擇每個(gè)階段的最后一層的輸出作為特征圖的參考集。 這種選擇是很自然的,因?yàn)槊總€(gè)階段的最深層應(yīng)該具有最強(qiáng)的特征。具體來(lái)說(shuō),對(duì)于ResNets,作者使用了每個(gè)階段的最后一個(gè)殘差結(jié)構(gòu)的特征激活輸出。將這些殘差模塊輸出表示為{C2, C3, C4, C5},對(duì)應(yīng)于conv2,conv3,conv4和conv5的輸出,并且注意它們相對(duì)于輸入圖像具有{4, 8, 16, 32}像素的步長(zhǎng)。考慮到內(nèi)存占用,沒(méi)有將conv1包含在金字塔中。
自上而下的路徑和橫向連接
自上而下的路徑(the top-down pathway )是如何去結(jié)合低層高分辨率的特征呢?方法就是,把更抽象,語(yǔ)義更強(qiáng)的高層特征圖進(jìn)行上取樣,然后把該特征橫向連接(lateral connections )至前一層特征,因此高層特征得到加強(qiáng)。值得注意的是,橫向連接的兩層特征在空間尺寸上要相同。這樣做應(yīng)該主要是為了利用底層的定位細(xì)節(jié)信息。
下圖顯示連接細(xì)節(jié)。把高層特征做2倍上采樣(最鄰近上采樣法,可以參考反卷積),然后將其和對(duì)應(yīng)的前一層特征結(jié)合(前一層要經(jīng)過(guò)1 * 1的卷積核才能用,目的是改變channels,應(yīng)該是要和后一層的channels相同),結(jié)合方式就是做像素間的加法。重復(fù)迭代該過(guò)程,直至生成最精細(xì)的特征圖。迭代開(kāi)始階段,作者在C5層后面加了一個(gè)1 * 1的卷積核來(lái)產(chǎn)生最粗略的特征圖,最后,作者用3 * 3的卷積核去處理已經(jīng)融合的特征圖(為了消除上采樣的混疊效應(yīng)),以生成最后需要的特征圖。為了后面的應(yīng)用能夠在所有層級(jí)共享分類層,這里坐著固定了3*3卷積后的輸出通道為d,這里設(shè)為256.因此所有額外的卷積層(比如P2)具有256通道輸出。這些額外層沒(méi)有用非線性。
{C2, C3, C4, C5}層對(duì)應(yīng)的融合特征層為{P2, P3, P4, P5},對(duì)應(yīng)的層空間尺寸是相通的。
?
?
2. 應(yīng)用
Faster R-CNN+Resnet-101
本部分來(lái)源自:http://www.voidcn.com/article/p-xtjooucw-dx.html
要想明白FPN如何應(yīng)用在RPN和Fast R-CNN(合起來(lái)就是Faster R-CNN),首先要明白Faster R-CNN+Resnet-101的結(jié)構(gòu),這部分在是論文中沒(méi)有的,博主試著用自己的理解說(shuō)一下。
直接理解就是把Faster-RCNN中原有的VGG網(wǎng)絡(luò)換成ResNet-101,ResNet-101結(jié)構(gòu)如下圖:
?
Faster-RCNN利用conv1到conv4-x的91層為共享卷積層,然后從conv4-x的輸出開(kāi)始分叉,一路經(jīng)過(guò)RPN網(wǎng)絡(luò)進(jìn)行區(qū)域選擇,另一路直接連一個(gè)ROI Pooling層,把RPN的結(jié)果輸入ROI Pooling層,映射成7 * 7的特征。然后所有輸出經(jīng)過(guò)conv5-x的計(jì)算,這里conv5-x起到原來(lái)全連接層(fc)的作用。最后再經(jīng)分類器和邊框回歸得到最終結(jié)果。整體框架用下圖表示:
?
RPN中的特征金字塔網(wǎng)絡(luò)
本部分來(lái)源自:http://www.voidcn.com/article/p-xtjooucw-dx.html
RPN是Faster R-CNN中用于區(qū)域選擇的子網(wǎng)絡(luò),RPN是在一個(gè)13 * 13 * 256的特征圖上應(yīng)用9種不同尺度的anchor,本篇論文另辟蹊徑,把特征圖弄成多尺度的,然后固定每種特征圖對(duì)應(yīng)的anchor尺寸,很有意思。也就是說(shuō),作者在每一個(gè)金字塔層級(jí)應(yīng)用了單尺度的anchor,{P2, P3, P4, P5, P6}分別對(duì)應(yīng)的anchor尺度為{32^2, 64^2, 128^2, 256^2, 512^2 },當(dāng)然目標(biāo)不可能都是正方形,本文仍然使用三種比例{1:2, 1:1, 2:1},所以金字塔結(jié)構(gòu)中共有15種anchors。這里,博主嘗試畫(huà)一下修改后的RPN結(jié)構(gòu):
從圖上看出各階層共享后面的分類網(wǎng)絡(luò)。這也是強(qiáng)調(diào)為什么各階層輸出的channel必須一致的原因,這樣才能使用相同的參數(shù),達(dá)到共享的目的。
?
注意上面的p6,根據(jù)論文中所指添加:
正負(fù)樣本的界定和Faster RCNN差不多:如果某個(gè)anchor和一個(gè)給定的ground truth有最高的IOU或者和任意一個(gè)Ground truth的IOU都大于0.7,則是正樣本。如果一個(gè)anchor和任意一個(gè)ground truth的IOU都小于0.3,則為負(fù)樣本。
Fast R-CNN 中的特征金字塔網(wǎng)絡(luò)
Fast R-CNN 中很重要的是ROI Pooling層,需要對(duì)不同層級(jí)的金字塔制定不同尺度的ROI。
ROI Pooling層使用region proposal的結(jié)果和中間的某一特征圖作為輸入,得到的結(jié)果經(jīng)過(guò)分解后分別用于分類結(jié)果和邊框回歸。
然后作者想的是,不同尺度的ROI使用不同特征層作為ROI pooling層的輸入,大尺度ROI就用后面一些的金字塔層,比如P5;小尺度ROI就用前面一點(diǎn)的特征層,比如P4。那怎么判斷ROI改用那個(gè)層的輸出呢?這里作者定義了一個(gè)系數(shù)Pk,其定義為:
224是ImageNet的標(biāo)準(zhǔn)輸入,k0是基準(zhǔn)值,設(shè)置為5,代表P5層的輸出(原圖大小就用P5層),w和h是ROI區(qū)域的長(zhǎng)和寬,假設(shè)ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味著該ROI應(yīng)該使用P4的特征層。k值應(yīng)該會(huì)做取整處理,防止結(jié)果不是整數(shù)。
然后,因?yàn)樽髡甙裞onv5也作為了金字塔結(jié)構(gòu)的一部分,那么從前全連接層的那個(gè)作用怎么辦呢?這里采取的方法是增加兩個(gè)1024維的輕量級(jí)全連接層,然后再跟上分類器和邊框回歸,認(rèn)為這樣還能使速度更快一些。
最后,博主根據(jù)自己的理解畫(huà)了一張草圖,猜想整個(gè)網(wǎng)絡(luò)經(jīng)FPN修改后的樣子,也就是Faster R-CNN with FPN。
?
總結(jié)
作者提出的FPN(Feature Pyramid Network)算法同時(shí)利用低層特征高分辨率和高層特征的高語(yǔ)義信息,通過(guò)融合這些不同層的特征達(dá)到預(yù)測(cè)的效果。并且預(yù)測(cè)是在每個(gè)融合后的特征層上單獨(dú)進(jìn)行的,這和常規(guī)的特征融合方式不同。
目前官方開(kāi)源代碼尚未公布,網(wǎng)上有一部分開(kāi)源代碼,如unsky/FPN-caffe:Feature Pyramid Network on caffe
參考文獻(xiàn)
--------------------- 作者:xiamentingtao 來(lái)源:CSDN 原文:https://blog.csdn.net/xiamentingtao/article/details/78598027?utm_source=copy 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的Feature Pyramid Networks for Object Detection 总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Feature Pyramid Netw
- 下一篇: 关于hard-negative mini