目標(biāo)檢測之FPN網(wǎng)絡(luò)詳解


低層的特征語義信息比較少,但是目標(biāo)位置準(zhǔn)確;高層的特征語義信息比較豐富,但是目標(biāo)位置比較粗略。另外雖然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做預(yù)測,而本文FPN不一樣的地方在于預(yù)測是在不同特征層獨(dú)立進(jìn)行的。?
???一、各種網(wǎng)絡(luò)結(jié)構(gòu)對比
1、通常的CNN網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
圖1上圖網(wǎng)絡(luò)是自底向上卷積,然后使用最后一層特征圖進(jìn)行預(yù)測,像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)過網(wǎng)絡(luò)后最深一層的特征圖大小是60*40,可理解為特征圖上一像素點(diǎn)映射原圖中一個(gè)16*16的區(qū)域;那原圖中有一個(gè)小于16*16大小的小物體,是不是就會被忽略掉,檢測不到了呢?
所以上圖中的網(wǎng)絡(luò)的缺點(diǎn)就是會造成檢測小物體的性能急劇下降。
2、圖片金字塔生成特征金字塔鑒于上面的單層檢測會丟失細(xì)節(jié)特征;就會想到利用圖像的各個(gè)尺度進(jìn)行訓(xùn)練和測試,比如下圖所展示,將圖像做成不同的scale,然后不同scale的圖像生成對應(yīng)的不同scale的特征
圖2將圖片縮放成多個(gè)比例,每個(gè)比例單獨(dú)提取特征圖進(jìn)行預(yù)測,這樣,可以得到比較理想的結(jié)果,但是比較耗時(shí),不太適合運(yùn)用到實(shí)際當(dāng)中。有些算法僅會在測試時(shí)候采用圖像金字塔。
3、多尺度特征融合的方式
圖3像SSD(Single Shot Detector)就是采用這種多尺度特征融合的方式,沒有上采樣過程,即從網(wǎng)絡(luò)不同層抽取不同尺度的特征做預(yù)測,這種方式不會增加額外的計(jì)算量。作者認(rèn)為SSD算法中沒有用到足夠低層的特征(在SSD中,最低層的特征是VGG網(wǎng)絡(luò)的conv4_3),而在作者看來足夠低層的特征對于檢測小物體是很有幫助的。
4、FPN(Feature Pyramid Networks)
圖4這是本文要講的網(wǎng)絡(luò),F(xiàn)PN主要解決的是物體檢測中的多尺度問題,通過簡單的網(wǎng)絡(luò)連接改變,在基本不增加原有模型計(jì)算量的情況下,大幅度提升了小物體檢測的性能。通過高層特征進(jìn)行上采樣和低層特征進(jìn)行自頂向下的連接,而且每一層都會進(jìn)行預(yù)測。后面再詳細(xì)介紹,下面先來看看另外兩種
5、top-down pyramid w/o lateral
圖5上圖該網(wǎng)絡(luò)有自頂向下的過程,但是沒有橫向連接,即向下過程沒有融合原來的特征。實(shí)驗(yàn)發(fā)現(xiàn)這樣效果比圖1的網(wǎng)絡(luò)效果更差。
6、only finest nevel
圖6上圖帶有skip connection的網(wǎng)絡(luò)結(jié)構(gòu)在預(yù)測的時(shí)候是在finest level(自頂向下的最后一層)進(jìn)行的,簡單講就是經(jīng)過多次上采樣并融合特征到最后一步,拿最后一步生成的特征做預(yù)測,跟FPN的區(qū)別是它僅在最后一層預(yù)測。
???二、FPN詳解
作者的主網(wǎng)絡(luò)采用了ResNet。
算法大致結(jié)構(gòu)如下:一個(gè)自底向上的線路,一個(gè)自頂向下的線路,橫向連接(lateral connection)。圖中放大的區(qū)域就是橫向連接,這里1*1的卷積核的主要作用是減少卷積核的個(gè)數(shù),也就是減少了feature map的個(gè)數(shù),并不改變feature map的尺寸大小。

① 自底向上:自底向上的過程就是神經(jīng)網(wǎng)絡(luò)普通的前向傳播過程,特征圖經(jīng)過卷積核計(jì)算,通常會越變越小。
具體而言,對于ResNets,我們使用每個(gè)階段的最后一個(gè)residual block輸出的特征激活輸出。對于conv2,conv3,conv4和conv5輸出,我們將這些最后residual block的輸出表示為{C2,C3,C4,C5},并且它們相對于輸入圖像具有{4, 8, 16, 32} 的步長。由于其龐大的內(nèi)存占用,我們不會將conv1納入金字塔中。
② 自上而下:自上而下的過程是把更抽象、語義更強(qiáng)的高層特征圖進(jìn)行上采樣(upsampling),而橫向連接則是將上采樣的結(jié)果和自底向上生成的相同大小的feature map進(jìn)行融合(merge)。橫向連接的兩層特征在空間尺寸相同,這樣做可以利用底層定位細(xì)節(jié)信息。將低分辨率的特征圖做2倍上采樣(為了簡單起見,使用最近鄰上采樣)。然后通過按元素相加,將上采樣映射與相應(yīng)的自底而上映射合并。這個(gè)過程是迭代的,直到生成最終的分辨率圖。?
為了開始迭代,我們只需在C5上附加一個(gè)1×1卷積層來生成低分辨率圖P5。最后,我們在每個(gè)合并的圖上附加一個(gè)3×3卷積來生成最終的特征映射,這是為了減少上采樣的混疊效應(yīng)。這個(gè)最終的特征映射集稱為{P2,P3,P4,P5},分別對應(yīng)于{C2,C3,C4,C5},它們具有相同的尺寸。?
由于金字塔的所有層次都像傳統(tǒng)的特征化圖像金字塔一樣使用共享分類器/回歸器,因此我們在所有特征圖中固定特征維度(通道數(shù),記為d)。我們在本文中設(shè)置d = 256,因此所有額外的卷積層都有256個(gè)通道的輸出。
③ 橫向連接:采用1×1的卷積核進(jìn)行連接(減少特征圖數(shù)量)。
???三、FPN加入到各種網(wǎng)絡(luò)的實(shí)驗(yàn)效果表
作者一方面將FPN放在RPN網(wǎng)絡(luò)中用于生成proposal,原來的RPN網(wǎng)絡(luò)是以主網(wǎng)絡(luò)的某個(gè)卷積層輸出的feature map作為輸入,簡單講就是只用這一個(gè)尺度的feature map。但是現(xiàn)在要將FPN嵌在RPN網(wǎng)絡(luò)中,生成不同尺度特征并融合作為RPN網(wǎng)絡(luò)的輸入。在每一個(gè)scale層,都定義了不同大小的anchor,對于P2,P3,P4,P5,P6這些層,定義anchor的大小為32^2,64^2,128^2,256^2,512^2,另外每個(gè)scale層都有3個(gè)長寬對比度: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的。評價(jià)標(biāo)準(zhǔn)采用AR(Average Recall),AR右上角的100或1K表示每張圖像有100或1000個(gè)anchor,AR的右下角s,m,l表示COCO數(shù)據(jù)集中object的大小分別是小,中,大。feature列的大括號{}表示每層獨(dú)立預(yù)測。
Table1從(a)(b)(c)的對比可以看出FRN的作用確實(shí)很明顯。另外(a)和(b)的對比可以看出高層特征并非比低一層的特征有效。?
(d)表示只有橫向連接,而沒有自頂向下的過程,也就是僅僅對自底向上的每一層結(jié)果做一個(gè)1*1的橫向連接和3*3的卷積得到最終的結(jié)果,從feature列可以看出預(yù)測還是分層獨(dú)立的,如上面圖3的結(jié)構(gòu)。作者推測(d)的結(jié)果并不好的原因在于在自底向上的不同層之間的semantic gaps比較大。?
(e)表示有自頂向下的過程,但是沒有橫向連接,即向下過程沒有融合原來的特征,如上面圖5的結(jié)構(gòu)。這樣效果也不好的原因在于目標(biāo)的location特征在經(jīng)過多次降采樣和上采樣過程后變得更加不準(zhǔn)確。?
(f)采用finest level層做預(yù)測(如上圖6的結(jié)構(gòu)),即經(jīng)過多次特征上采樣和融合到最后一步生成的特征用于預(yù)測,主要是證明金字塔分層獨(dú)立預(yù)測的表達(dá)能力。顯然finest level的效果不如FPN好,原因在于PRN網(wǎng)絡(luò)是一個(gè)窗口大小固定的滑動窗口檢測器,因此在金字塔的不同層滑動可以增加其對尺度變化的魯棒性。另外(f)有更多的anchor,說明增加anchor的數(shù)量并不能有效提高準(zhǔn)確率。
另一方面將FPN用于Fast R-CNN的檢測部分。除了(a)以外,分類層和卷積層之前添加了2個(gè)1024維的全連接層。?
實(shí)驗(yàn)結(jié)果如下表Table2,這里是測試Fast R-CNN的檢測效果,所以proposal是固定的(采用Table1(c)的做法)。與Table1的比較類似,(a)(b)(c)的對比證明在基于區(qū)域的目標(biāo)卷積問題中,特征金字塔比單尺度特征更有效。(c)(f)的差距很小,作者認(rèn)為原因是ROI pooling對于region的尺度并不敏感。因此并不能一概認(rèn)為(f)這種特征融合的方式不好,博主個(gè)人認(rèn)為要針對具體問題來看待,像上面在RPN網(wǎng)絡(luò)中,可能(f)這種方式不大好,但是在Fast RCNN中就沒那么明顯。
Table2同理,將FPN用于Faster RCNN的實(shí)驗(yàn)結(jié)果如下表Table3。
Table3下表Table4是和近幾年在COCO比賽上排名靠前的算法的對比。注意到本文算法在小物體檢測上的提升是比較明顯的。
Table4?? ?四、總結(jié)作者提出的FPN(Feature Pyramid Network)算法同時(shí)利用低層特征高分辨率和高層特征的高語義信息,通過融合這些不同層的特征達(dá)到預(yù)測的效果。并且預(yù)測是在每個(gè)融合后的特征層上單獨(dú)進(jìn)行的,效果甚佳。
—完—

評論
圖片
表情
