寫在前面:你們好!我是【AI 菌】,一枚愛彈吉他的程序員。我
熱愛AI、熱愛分享、熱愛開源
! 這博客是我對學習的一點總結與記錄。若是您也對深度學習、機器視覺、算法、Python、C++
感興趣,能夠關注個人動態,咱們一塊兒學習,一塊兒進步~
個人博客地址爲:【AI 菌】的博客
個人Github項目地址是:【AI 菌】的Githubhtml
文章目錄
2016年,何凱明大神、 Ross Girshick等人在CVPR上發表了《Feature Pyramid Networks for Object Detection》,提出了FPN的思想,爲卷積神經網絡檢測不一樣尺寸大小的目標提供了新的解決思路。git
想獲取原文,請先關注欄目左側公衆號:程序員
- 回覆【DL】,獲取計算機視覺、深度學習經典論文合集;
- 回覆【CVPR】,獲取2020年CV頂級會議最新論文合集。
摘要
特徵金字塔是目標檢測任務的基本組成部分,用於檢測不一樣尺度的目標。但最近的深度學習目標檢測器避免使用金字塔表示法,部分緣由是它們須要大量計算和存儲。github
在本文中,做者探索利用深層卷積網絡固有的多尺度、層次結構來構建特徵金字塔,它的好處是隻會帶來極小的額外消耗。提出了一種具備橫向鏈接的自上而下的體系結構,用於構建各類尺度的高層語義特徵圖。這種方法被稱爲Feature Pyramid Network,即特徵金字塔網絡。web
FPN做爲一種通用的特徵提取器,在一些應用上帶來了顯著的性能提高。在Faster R-CNN中使用FPN,能夠在COCO上達到了最佳的單模型性能,甚至是超過了COCO 2016挑戰賽的獲勝者。算法
此外,該方法在GPU上的運行速度能夠達到6FPS,是一種實用而準確的多尺度目標檢測解決方案,代碼將公之於衆。網絡
1、引言
檢測大小不一的目標是計算機視覺中的一項基本的挑戰。下圖展現了處理多尺度物體檢測問題的經常使用方法(a)(b)(c),以及本文提出的特徵金字塔網(d)架構
圖1中4幅圖表明不一樣的方法,具體解釋以下:svg
- (a) 使用圖像金字塔構建特徵金字塔。每一個圖像尺度上的特徵都是獨立計算的,速度很慢。
- (b) 只使用單一尺度的特徵,以加快檢測的速度。
- © 重複使用由ConvNet計算的金字塔特徵層次,就好像它是特徵化的圖像金字塔同樣。
- (d) 本文提出的特徵金字塔網絡(FPN)與(b)和©同樣快速,但更準確。
(a) 特徵化的圖像金字塔性能
在ImageNet和COCO檢測挑戰賽中,最近全部排名靠前的模型都使用了特徵化的圖像金字塔(如圖a)的多尺度測試。對圖像金字塔的每一層進行特徵化的主要優勢是,它產生了一種多尺度特徵表示,其中全部層次(包括高分辨率層級)在語義上都很強。一個極端的例子是DPM方法使用了接近10種不一樣尺度來取得不錯的效果。
然而,對圖像金字塔的每一層進行特點化都有明顯的侷限性。推理時間大大增長,使得這種方法在實際應用中不切實際。此外,在圖像金字塔上端到端地訓練深層網絡,在內存方面也是不可行的。
(b)單一尺度特徵
近年來,深度卷積網絡的提出幾乎徹底替代了傳統的基於手動設計特徵的方法。深度神經網絡自己對輸入的圖像具備較強的尺度魯棒性(圖1(b)),所以被普遍應用於各類物體檢測系統,好比Fast RCNN、FasterR-CNN和YOLOv1,它們僅僅採用最高層的低分辨率特徵圖進行預測。
然而,最近的ImageNet和COCO物體檢測比賽結果代表,經過採用測試時多尺度的圖像金字塔仍然能夠提高最終的性能。這說明當前基於單層特徵的檢測系統仍是具備必定的侷限性。
(c)金字塔型特徵層級
然而,圖像金字塔並非計算多尺度特徵表示的惟一方法。深度卷積神經網絡逐層計算特徵層次,對於子採樣層,特徵層次具備固有的多尺度、金字塔形狀。這種網絡內要素層次結構生成了不一樣空間分辨率的特徵圖,但因爲深度不一樣致使了較大的語義鴻溝。高分辨率地圖具備低級特徵,這損害了它們對目標識別的表徵能力。
SSD是使用ConvNet的金字塔特徵層次結構的首批嘗試之一,形式如圖(c)同樣。理想狀況下,SSD樣式的金字塔將重複使用在正向傳遞中計算的不一樣層的多比例特徵地圖,所以是耗時間的。可是爲了不使用低層特徵,SSD放棄了重用已計算的層,而是從網絡的高層開始構建金字塔(例如,VGG的卷積層4_3),而後經過添加幾個新層來構建金字塔。所以,它錯失了重用特徵層次的高分辨率圖的機會。做者證實了這些對於檢測小目標是很重要的。
(d)特徵金字塔網路
本文的目標是天然地利用卷積網絡特徵層次的金字塔形狀,同時建立一個在全部尺度上都具備較強語義的特徵金字塔。爲了實現這一目標,設計了一種結構,該結構經過自上而下的路徑和橫向鏈接將低分辨率、語義強的特徵與高分辨率、語義弱的特徵相結合(如圖1(d))。其結果是在全部級別上都具備豐富語義的特徵金字塔,而且能夠從單一的輸入圖像比例快速構建。換句話說,該方法在不犧牲性能、速度或內存的狀況下可用於替換標準的特徵化的圖像金字塔方法。
採用自頂向下和跳層鏈接的相似架構在最近的研究中很流行。他們的目標是製做一張高分辨率的單一高級特徵圖,在此基礎上進行預測(圖2,上圖)。相反,咱們的方法利用體系結構做爲一個特徵金字塔,其中預測(例如,目標檢測)是在每一個級別上獨立進行的(圖2 下圖)。咱們的模型呼應了一個特徵化的圖像金字塔,這在這些工做中沒有被探索過。
圖2 上圖:具備跳層鏈接的自上而下的體系結構,其中是在最精細的級別上進行預測。下圖:本文的模型具備相似的結構,但將其用特徵金字塔,在全部級別獨立進行預測。
本文提出一種合理利用深度卷積網絡各個層次特徵的方法(圖1(d)),它能較好的讓各個不一樣尺度的特徵都具備較強的語義信息。該方法稱爲Feature Pyramid Network (FPN),它能應用於物體識別、語義分割等任務中。FPN結合Faster RCNN能夠在COCO物體檢測比賽中取得當前單模型的最佳性能(SOTA)。另外,經過對比實驗發現,FPN能促使Faster RCNN中的RPN網絡的召回率提升8個點;不只如此,它也能使Fast RCNN的檢測性能提高2.3個點(COCO)和3.8個點(VOC)。
此外,本文的金字塔結構能夠用全部的尺度進行端到端的訓練,而且在訓練/測試時被一致地使用,這在使用圖像金字塔時是不可行的。所以,FPN可以達到比全部現有最早進方法更高的精確度。此外,這種改進是在不增長測試時間的狀況下實現的。咱們相信這些進展將促進將來的研究和應用。
2、相關研究
2.1 手工設計的特徵和早期的神經網絡
SIFT特徵最初是在尺度空間極值處提取的,並用於特徵點匹配。HOG特徵以及後來的SIFT特徵都是在整個圖像金字塔上密集計算的。這些HOG和SIFT金字塔已被用於圖像分類、目標檢測、人體姿態估計等衆多工做中。快速計算特徵圖像金字塔也引發了人們的極大興趣。多拉爾等人經過首先計算稀疏採樣(按比例)金字塔,而後插入缺失的層級,演繹了快速金字塔計算。
2.2 深度卷積目標檢測器
隨着現代深度卷積網絡的發展,OverFeat和R-CNN這樣的目標檢測器在準確度上有了顯著的提升。OverFeat採用了一種相似於早期神經網絡人臉檢測器的策略,將ConvNet用做圖像金字塔上的滑動窗口檢測器。R-CNN採用了基於候選區域的策略,在使用ConvNet對每一個候選框進行分類以前,每一個候選框都通過了BN。SPPnet證實了這種基於區域的檢測器能夠更有效地應用於在單一圖像尺度上提取的特徵地圖。最近更精確的檢測方法,如Fast R-CNN和Faster R-CNN使用單一尺度的特徵圖計算特徵,由於它在準確性和速度之間提供了很好的折衷。然而,多尺度檢測的性能仍然更好,特別是對於小目標。
2.3 使用多層次的方法
最近的一些方法經過在ConvNet中使用不一樣的層來改進檢測和分割。FCN在多個尺度上對每一個類別的部分分數求和,以計算語義分割。HyperColumns使用相似的方法進行目標實例分割。其餘幾種方法(HyperNet、ParseNet和ION)在計算預測以前將多層的特徵鏈接起來,這至關於對變換後的特徵求和。SSD和MS-CNN在沒有組合特徵或分數的狀況下預測特徵層次的多層上的目標。最近有利用橫向、跳層鏈接的方法,其將低級特徵圖關聯到分辨率和語義層上,包括用於分割的U-Net和SharpMask,用於面部檢測的重組網絡。Ghiasi等人爲FCN呈現拉普拉斯金字塔,以逐步細化分割。雖然這些方法採用金字塔形狀的體系結構,但它們不一樣於特徵圖像金字塔,在全部層次上都獨立地進行預測,見圖2。事實上,對於圖2(上圖)中的金字塔體系結構,仍然須要圖像金字塔來識別多個尺度上的目標。
3、 特徵金字塔網絡
FPN的目標是利用卷積網絡自己帶有的層次性語義特徵,來構建特徵金字塔。以下圖所示,FPN包含兩個部分:第一部分是自底向上的過程,第二部分是自頂向下和側向鏈接的融合過程。
3.1 自底向上的路徑
自底向上的過程和普通的CNN沒有區別。現代的CNN網絡通常都是按照特徵圖大小劃分爲不一樣的stage,每一個stage之間特徵圖的尺度比例相差爲2。
在FPN中,每一個stage對應了一個特徵金字塔的級別(level),而且每一個stage的最後一層特徵被選爲對應FPN中相應級別的特徵。由於每一個階段的最深層都應該有最強的特徵。
以ResNet爲例,選取conv二、conv三、conv四、conv5層的最後一個殘差block層特徵做爲FPN的特徵,記爲{C二、C三、C四、C5}。這幾個特徵層的長、寬相對於原圖的1/四、1/八、1/1六、1/32。
3.2 自上而下的路徑與橫向鏈接
自頂向下的過程經過上採樣(up-sampling)的方式將頂層的小特徵圖放大到上一個stage的特徵圖同樣的大小。這樣的好處是既利用了頂層較強的語義特徵(利於分類),又利用了底層的高分辨率信息(利於定位)。
上採樣的方法能夠用最近鄰差值實現。爲了將高層語義特徵和底層的精肯定位能力結合,做者提出相似於殘差網絡的側向鏈接結構。橫向鏈接將上一層通過上採樣後和當前層分辨率一致的特徵,經過相加的方法進行融合。(這裏爲了修正通道數量,將當前層先通過1x1卷積操做。)
以ResNet爲例,具體的,C5層先通過1x1卷積,獲得M5特徵。M5經過上採樣,再加上C4通過1x1卷積後的特徵,獲得M4。這個過程再作兩次,分別獲得M3和M2。M層特徵再通過3x3卷積,獲得最終的P二、P三、P四、P5層特徵。另外,和傳統的圖像金字塔方式同樣,全部M層的通道數都設計成同樣的,本文都用d=256。細節圖以下所示:
FPN自己不是檢測算法,只是一個特徵提取器。它須要和其餘檢測算法結合才能使用。下面介紹FPN如何應用於區域選擇網絡(RPN)和物體檢測網絡(Fast RCNN)。
4、應用
做者在RPN 中採用FPN的方法來生成候選邊界框,並在Fast R-CNN中採用該方法來進行目標檢測。爲了證實FPN的簡單性和有效性,當使它們適應咱們的特徵金字塔時,咱們對原始檢測器進行了最小的修改。
4.1 FPN應用於RPN
下圖Faster R-CNN網絡的總體結構,共享卷積層的最後一層的特徵圖通過3x3卷積,獲得256個channel的卷積層,再分別通過兩個1x1卷積獲得類別結果和邊框迴歸結果。對於特徵層上的每個點,做者用預設了9個不一樣大小和尺寸的Anchors。這些框自己包含不一樣的尺度和不一樣的長寬比例。
FPN針對RPN的改進是將RPN應用到上面每個P層。因爲每一個P層相對於原始圖片具備不一樣的尺度信息,所以做者將原始RPN中的尺度信息分離,讓每一個P層只處理單一的尺度信息。具體來講,在P二、P三、P四、P五、P6這五個特徵層上,每一個特徵層上都預設1:一、1:二、2:1三種長寬比例的候選框,因此金字塔上總共有15個不一樣的候選框。其中,P6是專門爲了RPN網絡而設計的,它由P5通過下采樣獲得的。
另外,上述5個RPN的參數是共享的。做者經過實驗發現,RPN參數共享和不共享兩種設置獲得的結果幾乎沒有差異。這說明不一樣層級之間的特徵有類似的語義層次。這和特徵金字塔網絡的原理一致。
4.2 用於Fast R-CNN的特徵金字塔網絡
做者將FPN的各個特徵層類比爲圖像金字塔的各個level的特徵,從而將不一樣尺度的RoI映射到對應的特徵層上。以224大小的圖片輸入爲例,寬高爲w和h的RoI將被映射到的特徵級別爲k,它的計算公式以下:
在ResNet中,k0的值爲4,對應了長寬爲224的框所在的層次。若是框的長寬相對於224分別除以2,那麼k的值將減1,以此類推。
在Faster RCNN中,ResNet的conv4層被用來提取RoI,通過RoI Pooling後映射到14x14的大小。通過RoI Pooling後的特徵再進入原來的conv5層,進而獲得最終的分類和邊框迴歸結果。在FPN中,conv5層已經被用來做爲特徵提取器獲得P5層;所以,這裏單獨設計兩個1024維的全鏈接層做爲檢測網絡的網絡頭部。新的網絡頭部是隨機初始化的,它相比於原來的conv5層更加輕量級。
5、目標檢測實驗
5.1 FPN對RPN網絡的影響
做者作了6個實驗:
- (a) 基於conv4的RPN(原始的RPN);
- (b) 基於conv5的RPN;
- © FPN;
- (d) 只用自底向上的多層特徵,沒有自頂向下的特徵;
- (e) 有自頂向下的特徵,可是不用橫向鏈接,只是單純的增長特徵的分辨率;
- (f) 用了自頂向下的特徵,也用了橫向特徵融合,可是隻用最後的P2做爲預測。
對比結果見下表:
表格字符解釋:
- A R 100 AR^{100} AR100:當每張圖預設100個候選框時的平均召回率
- A R 1 k AR^{1k} AR1k:當每張圖預設1000個候選框時的平均召回率
- A R s 1 k AR^{1k}_s ARs1k:當每張圖預設1000個候選框時,小目標的平均召回率
- A R m 1 k AR^{1k}_m ARm1k:當每張圖預設1000個候選框時,中等大小目標的平均召回率
- A R l 1 k AR^{1k}_l ARl1k:當每張圖預設1000個候選框時,大目標的平均召回率
分析表格,能夠知道:
- (a)和©對比:基於特徵金字塔的方式,極大的提升了各個尺度框的召回率。尤爲是小物體的效果提高很是明顯。
- (a)和(d)對比:單純的用各個層次的特徵作預測,相比於只用conv4作預測,效果提高很是有限。
- (a)和(e)對比(36.1 v.s. 34.5):單純的放大特徵圖,只會帶來相反的效果。
- (a)和(f)對比(36.1 v.s. 38.4):單純用融合度最高的特徵層(P2)來作預測,提高效果也頗有限。
經過以上分析,能夠得出結論:自頂向下、橫向鏈接、尺度分離、多個層次的預測是提高RPN性能的幾個關鍵因素。
注:尺度分離是指,採用FPN時,每一個層級上只需一個尺度的Anchor便可,固然每一個層級的Anchors仍然能夠取不一樣的size。
5.2 FPN對Fast RCNN網絡的影響
相似於RPN的實驗,做者在Fast RCNN上也作了六個實驗:(a) 基於conv4來作預測(標準的Fast RCNN);(b)基於conv5來作預測;(c)FPN;(d)只用自底向上的多層特徵;(e)用自頂向下的多層特徵,可是沒有橫向鏈接;(f)有自頂向下的多層特徵,也有橫向鏈接,可是隻用最後一個融合後的特徵層P2。結果對好比下:
經過分析表格能夠得出如下結論:
- (a)和©對比:基於特徵金字塔的方式,在各個尺度上的表現都超過了原來的Fast RCNN。
- (a)和(d)對比:用各個層次的特徵作預測,相比於只用conv4作預測,性能降低很是明顯。這是由於網絡底層特徵的語義信息區分度不夠,對分類任務來講,這是很是影響性能的。(RPN網絡沒有這個問題,由於它不區分物體的類別)
- (a)和(e)對比):單純的放大特徵圖,只會帶來相反的分類效果。
- (a)和(f)對比:用融合度最高的特徵層(P2)來作預測,在Fast RCNN中效果提高很是明顯。
6、結論
本文提出了一種簡單而有效的方法,用於在卷積神經網絡中構建特徵金字塔。該方法在RPN和Faster R-CNN上都顯示出了顯著的改進。從而爲特徵金字塔的研究和應用提供了一種實用的解決方案,而不須要計算圖像金字塔。最後,該研究代表,儘管深度卷積網絡具備很強的表徵能力和對尺度變化的魯棒性,可是使用金字塔表示來解決多尺度問題仍然是相當重要的。
本文分享 CSDN - AI 菌。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。