FPN网络详解
特征圖金字塔網(wǎng)絡(luò)FPN(Feature Pyramid Networks)是2017年提出的一種網(wǎng)絡(luò),F(xiàn)PN主要解決的是物體檢測(cè)中的多尺度問(wèn)題,通過(guò)簡(jiǎn)單的網(wǎng)絡(luò)連接改變,在基本不增加原有模型計(jì)算量的情況下,大幅度提升了小物體檢測(cè)的性能。
低層的特征語(yǔ)義信息比較少,但是目標(biāo)位置準(zhǔn)確;高層的特征語(yǔ)義信息比較豐富,但是目標(biāo)位置比較粗略。另外雖然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做預(yù)測(cè),而本文FPN不一樣的地方在于預(yù)測(cè)是在不同特征層獨(dú)立進(jìn)行的。
一、各種網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比
1、通常的CNN網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
圖1
上圖網(wǎng)絡(luò)是自底向上卷積,然后使用最后一層特征圖進(jìn)行預(yù)測(cè),像SPP-Net,F(xiàn)ast R-CNN,F(xiàn)aster R-CNN就是采用這種方式,即僅采用網(wǎng)絡(luò)最后一層的特征。
以VGG16為例子,假如feat_stride=16,表示若原圖大小是1000*600,經(jīng)過(guò)網(wǎng)絡(luò)后最深一層的特征圖大小是60*40,可理解為特征圖上一像素點(diǎn)映射原圖中一個(gè)16*16的區(qū)域;那原圖中有一個(gè)小于16*16大小的小物體,是不是就會(huì)被忽略掉,檢測(cè)不到了呢?
所以上圖中的網(wǎng)絡(luò)的缺點(diǎn)就是會(huì)造成檢測(cè)小物體的性能急劇下降。
2、圖片金字塔生成特征金字塔
鑒于上面的單層檢測(cè)會(huì)丟失細(xì)節(jié)特征;就會(huì)想到利用圖像的各個(gè)尺度進(jìn)行訓(xùn)練和測(cè)試,比如下圖所展示,將圖像做成不同的scale,然后不同scale的圖像生成對(duì)應(yīng)的不同scale的特征
圖二
將圖片縮放成多個(gè)比例,每個(gè)比例單獨(dú)提取特征圖進(jìn)行預(yù)測(cè),這樣,可以得到比較理想的結(jié)果,但是比較耗時(shí),不太適合運(yùn)用到實(shí)際當(dāng)中。有些算法僅會(huì)在測(cè)試時(shí)候采用圖像金字塔。
3、多尺度特征融合的方式
圖3
像SSD(Single Shot Detector)就是采用這種多尺度特征融合的方式,沒(méi)有上采樣過(guò)程,即從網(wǎng)絡(luò)不同層抽取不同尺度的特征做預(yù)測(cè),這種方式不會(huì)增加額外的計(jì)算量。作者認(rèn)為SSD算法中沒(méi)有用到足夠低層的特征(在SSD中,最低層的特征是VGG網(wǎng)絡(luò)的conv4_3),而在作者看來(lái)足夠低層的特征對(duì)于檢測(cè)小物體是很有幫助的。
4、FPN(Feature Pyramid Networks)
圖4
這是本文要講的網(wǎng)絡(luò),F(xiàn)PN主要解決的是物體檢測(cè)中的多尺度問(wèn)題,通過(guò)簡(jiǎn)單的網(wǎng)絡(luò)連接改變,在基本不增加原有模型計(jì)算量的情況下,大幅度提升了小物體檢測(cè)的性能。通過(guò)高層特征進(jìn)行上采樣和低層特征進(jìn)行自頂向下的連接,而且每一層都會(huì)進(jìn)行預(yù)測(cè)。后面再詳細(xì)介紹,下面先來(lái)看看另外兩種
5、top-down pyramid w/o lateral
圖5
上圖該網(wǎng)絡(luò)有自頂向下的過(guò)程,但是沒(méi)有橫向連接,即向下過(guò)程沒(méi)有融合原來(lái)的特征。實(shí)驗(yàn)發(fā)現(xiàn)這樣效果比圖1的網(wǎng)絡(luò)效果更差。
6、only finest nevel
圖6
上圖帶有skip connection的網(wǎng)絡(luò)結(jié)構(gòu)在預(yù)測(cè)的時(shí)候是在finest level(自頂向下的最后一層)進(jìn)行的,簡(jiǎn)單講就是經(jīng)過(guò)多次上采樣并融合特征到最后一步,拿最后一步生成的特征做預(yù)測(cè),跟FPN的區(qū)別是它僅在最后一層預(yù)測(cè)。
二、FPN詳解
作者的主網(wǎng)絡(luò)采用了ResNet。
算法大致結(jié)構(gòu)如下:一個(gè)自底向上的線路,一個(gè)自頂向下的線路,橫向連接(lateral connection)。圖中放大的區(qū)域就是橫向連接,這里1*1的卷積核的主要作用是減少卷積核的個(gè)數(shù),也就是減少了feature map的個(gè)數(shù),并不改變feature map的尺寸大小。
①自底向上:
自底向上的過(guò)程就是神經(jīng)網(wǎng)絡(luò)普通的前向傳播過(guò)程,特征圖經(jīng)過(guò)卷積核計(jì)算,通常會(huì)越變?cè)叫 ?/p>
具體而言,對(duì)于ResNets,我們使用每個(gè)階段的最后一個(gè)residual block輸出的特征激活輸出。 對(duì)于conv2,conv3,conv4和conv5輸出,我們將這些最后residual block的輸出表示為{C2,C3,C4,C5},并且它們相對(duì)于輸入圖像具有{4, 8, 16, 32} 的步長(zhǎng)。 由于其龐大的內(nèi)存占用,我們不會(huì)將conv1納入金字塔中。
②自上而下:
自上而下的過(guò)程是把更抽象、語(yǔ)義更強(qiáng)的高層特征圖進(jìn)行上采樣(upsampling),而橫向連接則是將上采樣的結(jié)果和自底向上生成的相同大小的feature map進(jìn)行融合(merge)。橫向連接的兩層特征在空間尺寸相同,這樣做可以利用底層定位細(xì)節(jié)信息。將低分辨率的特征圖做2倍上采樣(為了簡(jiǎn)單起見(jiàn),使用最近鄰上采樣)。然后通過(guò)按元素相加,將上采樣映射與相應(yīng)的自底而上映射合并。這個(gè)過(guò)程是迭代的,直到生成最終的分辨率圖。
為了開(kāi)始迭代,我們只需在C5上附加一個(gè)1×1卷積層來(lái)生成低分辨率圖P5。最后,我們?cè)诿總€(gè)合并的圖上附加一個(gè)3×3卷積來(lái)生成最終的特征映射,這是為了減少上采樣的混疊效應(yīng)。這個(gè)最終的特征映射集稱為{P2,P3,P4,P5},分別對(duì)應(yīng)于{C2,C3,C4,C5},它們具有相同的尺寸。
由于金字塔的所有層次都像傳統(tǒng)的特征化圖像金字塔一樣使用共享分類器/回歸器,因此我們?cè)谒刑卣鲌D中固定特征維度(通道數(shù),記為d)。我們?cè)诒疚闹性O(shè)置d = 256,因此所有額外的卷積層都有256個(gè)通道的輸出。
③橫向連接:
采用1×1的卷積核進(jìn)行連接(減少特征圖數(shù)量)。
三、FPN加入到各種網(wǎng)絡(luò)的實(shí)驗(yàn)效果表
作者一方面將FPN放在RPN網(wǎng)絡(luò)中用于生成proposal,原來(lái)的RPN網(wǎng)絡(luò)是以主網(wǎng)絡(luò)的某個(gè)卷積層輸出的feature map作為輸入,簡(jiǎn)單講就是只用這一個(gè)尺度的feature map。但是現(xiàn)在要將FPN嵌在RPN網(wǎng)絡(luò)中,生成不同尺度特征并融合作為RPN網(wǎng)絡(luò)的輸入。在每一個(gè)scale層,都定義了不同大小的anchor,對(duì)于P2,P3,P4,P5,P6這些層,定義anchor的大小為32^2,64^2,128^2,256^2,512^2,另外每個(gè)scale層都有3個(gè)長(zhǎng)寬對(duì)比度:1:2,1:1,2:1。所以整個(gè)特征金字塔有15種anchor。
正負(fù)樣本的界定和Faster RCNN差不多:如果某個(gè)anchor和一個(gè)給定的ground truth有最高的IOU或者和任意一個(gè)Ground truth的IOU都大于0.7,則是正樣本。如果一個(gè)anchor和任意一個(gè)ground truth的IOU都小于0.3,則為負(fù)樣本。
加入FPN的RPN網(wǎng)絡(luò)的有效性如下表Table1。網(wǎng)絡(luò)這些結(jié)果都是基于ResNet-50的。評(píng)價(jià)標(biāo)準(zhǔn)采用AR(Average Recall),AR右上角的100或1K表示每張圖像有100或1000個(gè)anchor,AR的右下角s,m,l表示COCO數(shù)據(jù)集中object的大小分別是小,中,大。feature列的大括號(hào){}表示每層獨(dú)立預(yù)測(cè)。
Table1
從(a)(b)(c)的對(duì)比可以看出FRN的作用確實(shí)很明顯。另外(a)和(b)的對(duì)比可以看出高層特征并非比低一層的特征有效。
 (d)表示只有橫向連接,而沒(méi)有自頂向下的過(guò)程,也就是僅僅對(duì)自底向上的每一層結(jié)果做一個(gè)1*1的橫向連接和3*3的卷積得到最終的結(jié)果,從feature列可以看出預(yù)測(cè)還是分層獨(dú)立的,如上面圖3的結(jié)構(gòu)。作者推測(cè)(d)的結(jié)果并不好的原因在于在自底向上的不同層之間的semantic gaps比較大。
 (e)表示有自頂向下的過(guò)程,但是沒(méi)有橫向連接,即向下過(guò)程沒(méi)有融合原來(lái)的特征,如上面圖5的結(jié)構(gòu)。這樣效果也不好的原因在于目標(biāo)的location特征在經(jīng)過(guò)多次降采樣和上采樣過(guò)程后變得更加不準(zhǔn)確。
 (f)采用finest level層做預(yù)測(cè)(如上圖6的結(jié)構(gòu)),即經(jīng)過(guò)多次特征上采樣和融合到最后一步生成的特征用于預(yù)測(cè),主要是證明金字塔分層獨(dú)立預(yù)測(cè)的表達(dá)能力。顯然finest level的效果不如FPN好,原因在于PRN網(wǎng)絡(luò)是一個(gè)窗口大小固定的滑動(dòng)窗口檢測(cè)器,因此在金字塔的不同層滑動(dòng)可以增加其對(duì)尺度變化的魯棒性。另外(f)有更多的anchor,說(shuō)明增加anchor的數(shù)量并不能有效提高準(zhǔn)確率。
另一方面將FPN用于Fast R-CNN的檢測(cè)部分。除了(a)以外,分類層和卷積層之前添加了2個(gè)1024維的全連接層。
 實(shí)驗(yàn)結(jié)果如下表Table2,這里是測(cè)試Fast R-CNN的檢測(cè)效果,所以proposal是固定的(采用Table1(c)的做法)。與Table1的比較類似,(a)(b)(c)的對(duì)比證明在基于區(qū)域的目標(biāo)卷積問(wèn)題中,特征金字塔比單尺度特征更有效。(c)(f)的差距很小,作者認(rèn)為原因是ROI pooling對(duì)于region的尺度并不敏感。因此并不能一概認(rèn)為(f)這種特征融合的方式不好,博主個(gè)人認(rèn)為要針對(duì)具體問(wèn)題來(lái)看待,像上面在RPN網(wǎng)絡(luò)中,可能(f)這種方式不大好,但是在Fast RCNN中就沒(méi)那么明顯。
Table2
同理,將FPN用于Faster RCNN的實(shí)驗(yàn)結(jié)果如下表Table3。
Table3
下表Table4是和近幾年在COCO比賽上排名靠前的算法的對(duì)比。注意到本文算法在小物體檢測(cè)上的提升是比較明顯的。
Table4
四、總結(jié)
作者提出的FPN(Feature Pyramid Network)算法同時(shí)利用低層特征高分辨率和高層特征的高語(yǔ)義信息,通過(guò)融合這些不同層的特征達(dá)到預(yù)測(cè)的效果。并且預(yù)測(cè)是在每個(gè)融合后的特征層上單獨(dú)進(jìn)行的,效果甚佳。
總結(jié)
 
                            
                        - 上一篇: protel99se基本教程及使用教程
- 下一篇: Linux自学笔记——Centos系统安
