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