- 論文題目:Feature Pyramid Networks for Object Detection
- 論文鏈接:https://arxiv.org/abs/1612.03144
- 論文代碼:Caffe版本 https://github.com/unsky/FPN
《Feature Pyramid Networks for Object Detection》這篇論文主要解決的問題是目標檢測在處理多尺度變化問題時的不足,現在的很多網絡都使用了利用單個高層特征(比如說Faster R-CNN利用下采樣四倍的卷積層——Conv4,進行后續的物體的分類和bounding box的回歸),但是這樣做有一個明顯的缺陷,即小物體本身具有的像素信息較少,在下采樣的過程中極易被丟失,為了處理這種物體大小差異十分明顯的檢測問題,經典的方法是利用圖像金字塔的方式進行多尺度變化增強,但這樣會帶來極大的計算量。所以這篇論文提出了特征金字塔的網絡結構,能在增加極小的計算量的情況下,處理好物體檢測中的多尺度變化問題。
一、FPN初探
1. 圖像金字塔
如上圖所示,這是一個圖像金字塔,在很多的經典算法里面都有它的身影,比如SIFT、HOG等算法。我們常用的是高斯金字塔,所謂的高斯金字塔是通過高斯平滑和亞采樣獲得一些下采樣圖像,也就是說第K層高斯金字塔通過平滑、亞采樣操作就可以獲得K+1層高斯圖像,高斯金字塔包含了一系列低通濾波器,其截止頻率從上一層到下一層是以因子2逐漸增加,所以高斯金字塔可以跨越很大的頻率范圍。總之,我們輸入一張圖片,我們可以獲得多張不同尺度的圖像,我們將這些不同尺度的圖像的4個頂點連接起來,就可以構造出一個類似真實金字塔的一個圖像金字塔。通過這個操作,我們可以為2維圖像增加一個尺度維度(或者說是深度),這樣我們可以從中獲得更多的有用信息。整個過程類似于人眼看一個目標由遠及近的過程(近大遠小原理)。如圖2所示,我們可以看到一個圖像金字塔,中間是原始圖像,最上邊是下采樣后的圖像,最下邊是上采樣后的圖像。你可以將其對應到圖1中的不同層中。
2. 為什么需要構造特征金字塔?
前面已經提到了高斯金字塔,由于它可以在一定程度上面提高算法的性能,因此很多經典的算法中都包含它。但是這些都是在傳統的算法中使用,當然也可以將這種方法直應用在深度神經網絡上面,但是由于它需要大量的運算和大量的內存。但是我們的特征金字塔可以在速度和準確率之間進行權衡,可以通過它獲得更加魯棒的語義信息,這是其中的一個原因。
如上圖所示,我們可以看到我們的**圖像中存在不同尺寸的目標,而不同的目標具有不同的特征,利用淺層的特征就可以將簡單的目標的區分開來;利用深層的特征可以將復雜的目標區分開來;**這樣我們就需要這樣的一個特征金字塔來完成這件事。圖中我們在第1層(請看綠色標注)輸出較大目標的實例分割結果,在第2層輸出次大目標的實例檢測結果,在第3層輸出較小目標的實例分割結果。檢測也是一樣,我們會在第1層輸出簡單的目標,第2層輸出較復雜的目標,第3層輸出復雜的目標。
3. 為什么要提出FPN算法?
識別不同大小的物體是計算機視覺中的一個基本挑戰,我們常用的解決方案是構造多尺度金字塔。
圖a:Feature pyramids built upon image pyramids ( featurized image pyramid)
如上圖a所示,這是一個特征圖像金字塔,整個過程是先對原始圖像構造圖像金字塔,然后在圖像金字塔的每一層提出不同的特征,然后進行相應的預測(BB的位置)。
它通常會成為整個算法的性能瓶頸,由于這些原因,當前很少使用這種算法。
優點:
- 對每一種尺度的圖像進行特征提取,能夠產生多尺度的特征表示,并且所有等級的特征圖都具有較強的語義信息,甚至包括一些高分辨率的特征圖。
缺點:
- 推理時間大幅度增加
- 由于內存占用巨大,用圖像金字塔的形式訓練一個端到端的深度神經網絡變得不可行
- 如果只在測試階段使用圖像金字塔,那么會造成一個問題:由于訓練時,網絡只是針對于某一個特點的分辨率進行訓練,推理時運用圖像金字塔,可能會在訓練與推理時產生“矛盾”。
圖b:常見的目標檢測網絡
如上圖b所示,這是一種改進的思路,學者們發現我們可以利用卷積網絡本身的特性,即對原始圖像進行卷積和池化操作,通過這種操作我們可以獲得不同尺寸的feature map,這樣其實就類似于在圖像的特征空間中構造金字塔。
實驗表明,淺層的網絡更關注于細節信息,高層的網絡更關注于語義信息,而高層的語義信息能夠幫助我們準確的檢測出目標,因此我們可以利用最后一個卷積層上的feature map來進行預測。
這種方法存在于大多數深度網絡中,比如VGG、ResNet、Inception,它們都是利用深度網絡的最后一層特征來進行分類。以及 Faster R-CNN中的RPN層就是利用單個高層特征圖進行物體的分類和bounding box的回歸
優點是速度快、需要內存少。
缺點是我們僅僅關注深層網絡中最后一層的特征,卻忽略了其它層的特征,而且檢測小物體的性能急劇下降,但是細節信息可以在一定程度上提升檢測的精度。
圖c:金字塔型特征層級 ConvNet’s pyramidal feature hierarchy
因此有了圖c所示的架構,它的設計思想就是同時利用低層特征和高層特征,分別在不同的層同時進行預測,這是因為我的一幅圖像中可能具有多個不同大小的目標,區分不同的目標可能需要不同的特征,對于簡單的目標我們僅僅需要淺層的特征就可以檢測到它,對于復雜的目標我們就需要利用復雜的特征來檢測它。
整個過程就是首先在原始圖像上面進行深度卷積,然后分別在不同的特征層上面進行預測。
它的優點是在不同的層上面輸出對應的目標,不需要經過所有的層才輸出對應的目標(即對于有些目標來說,不需要進行多余的前向操作),這樣可以在一定程度上對網絡進行加速操作,同時可以提高算法的檢測性能。
它的缺點是獲得的特征不魯棒,都是一些弱特征(因為很多的特征都是從較淺的層獲得的)。
比如SSD one-stage目標檢測模型就是再次利用不同層多尺度的特征圖。但是SSD并沒有解決以下問題:
低層特征圖語義信息不夠和低層特征圖的分辨率也不高。
SSD論文中指出,SSD為了避免使用低層特征圖,放棄了重用已經計算的層,而是從網絡的高層開始構建金字塔(例如,VGG網絡的Conv4之后,再添加幾個新的卷積層),因此,SSD錯過了重用低層高分辨的特征圖,即沒有充分利用到低層特征圖中的空間信息(這些信息對小物體的檢測十分重要)。
圖d:特征金字塔 Feature Pyramid Networks
它的架構如圖d所示,整個過程如下所示,首先我們在輸入的圖像上進行深度卷積,然后對Layer2上面的特征進行降維操作(即添加一層1x1的卷積層),對Layer4上面的特征就行上采樣操作,使得它們具有相應的尺寸,然后對處理后的Layer2和處理后的Layer4執行加法操作(對應元素相加),將獲得的結果輸入到Layer5中去。
其背后的思路是為了獲得一個強語義信息,這樣可以提高檢測性能。這次我們使用了更深的層來構造特征金字塔,這樣做是為了使用更加魯棒的信息;除此之外,我們將處理過的低層特征和處理過的高層特征進行累加,這樣做的目的是因為低層特征可以提供更加準確的位置信息,而多次的降采樣和上采樣操作使得深層網絡的定位信息存在誤差,因此我們將其結合其起來使用,就構建了一個更深的特征金字塔,融合了多層特征信息,并在不同的特征進行輸出。
二、FPN框架解析
FPN 層
Bottom-up pathway
前饋Backbone的一部分,每一級往上用step=2的降采樣。
輸出size相同的網絡部分叫一級(stage),選擇每一級的最后一層特征圖,作為Up-bottom pathway的對應相應層數,經過1 x 1卷積過后element add的參考。
例如,下圖是fasterRCNN的網絡結構,左列ResNet用每級最后一個Residual Block的輸出,記為{C1,C2,C3,C4,C5}。
FPN用2~5級參與預測(因為第一級的語義還是太低了),{C2,C3,C4,C5}表示conv2,conv3,conv4和conv5的輸出層(最后一個殘差block層)作為FPN的特征,分別對應于輸入圖片的下采樣倍數為{4,8,16,32}。
Top-down pathway and lateral connections
自頂向下的過程通過上采樣(up-sampling)的方式將頂層的小特征圖。放大到上一個stage的特征圖一樣的大小。
上采樣的方法是最近鄰插值法:使用最近鄰值插值法,可以在上采樣的過程中最大程度地保留特征圖的語義信息(有利于分類),從而與 bottom-up 過程中相應的具有豐富的空間信息(高分辨率,有利于定位)的特征圖進行融合,從而得到既有良好的空間信息又有較強烈的語義信息的特征圖。
具體過程為:C5層先經過1 x 1卷積,改變特征圖的通道數(文章中設置d=256,與Faster R-CNN中RPN層的維數相同便于分類與回歸)。M5通過上采樣,再加上(特征圖中每一個相同位置元素直接相加)C4經過1 x 1卷積后的特征圖,得到M4。這個過程再做兩次,分別得到M3,M2。M層特征圖再經過3 x 3卷積(減輕最近鄰近插值帶來的混疊影響,周圍的數都相同),得到最終的P2,P3,P4,P5層特征。
FPN應用于RPN層
Faster RCNN中的RPN是通過最后一層的特征來做的。最后一層的特征經過3x3卷積,得到256個channel的卷積層,再分別經過兩個1x1卷積得到類別得分和邊框回歸結果。這里將特征層之后的RPN子網絡稱之為網絡頭部(network head)。對于特征層上的每一個點,作者用anchor的方式預設了9個框。這些框本身包含不同的尺度和不同的長款比例。
FPN針對RPN的改進是將網絡頭部應用到每一個P層。由于每個P層相對于原始圖片具有不同的尺度信息,因此作者將原始RPN中的尺度信息分離,讓每個P層只處理單一的尺度信息。具體的,對{322、642、1282、2562、512^2}這五種尺度的anchor,分別對應到{P2、P3、P4、P5、P6}這五個特征層上。每個特征層都處理1:1、1:2、2:1三種長寬比例的候選框。P6是專門為了RPN網絡而設計的,用來處理512大小的候選框。它由P5經過下采樣得到。
RoI pooling與RCNN:原版的RoI pooling統一到同一個大小的feature map,但是這對FPN并不合適,因為FPN在RPN階段抽取的候選框本來就含有不同的尺度,作者的方法是將不同尺度的候選框map into到不同大小的特征圖,具體的公式這里就不貼了,可以參考論文;另外作者關于RoI pooling之后的網絡結構也有一定不同,作者添加了兩個1024的fc層在最終的分類與回歸層前,作者認為這更加輕便
另外,上述5個網絡頭部的參數是共享的。作者通過實驗發現,網絡頭部參數共享和不共享兩種設置得到的結果幾乎沒有差別。這說明不同層級之間的特征有相似的語義層次。這和特征金字塔網絡的原理一致。
1.利用FPN構建Faster R-CNN檢測器步驟
- 首先,選擇一張需要處理的圖片,然后對該圖片進行預處理操作;
- 然后,將處理過的圖片送入預訓練的特征網絡中(如ResNet等),即構建所謂的bottom-up網絡;
- 接著,如圖5所示,構建對應的top-down網絡(即對層4進行上采樣操作,先用1x1的卷積對層2進行降維處理,然后將兩者相加(對應元素相加),最后進行3x3的卷積操作,最后);
- 接著,在圖中的4、5、6層上面分別進行RPN操作,即一個3x3的卷積后面分兩路,分別連接一個1x1的卷積用來進行分類和回歸操作;
- 接著,將上一步獲得的候選ROI分別輸入到4、5、6層上面分別進行ROI Pool操作(固定為7x7的特征);
- 最后,在上一步的基礎上面連接兩個1024層的全連接網絡層,然后分兩個支路,連接對應的分類層和回歸層;
- 層1、2、3對應的支路就是bottom-up網絡,就是所謂的預訓練網絡,文中使用了ResNet網絡;由于整個流向是自底向上的,所以我們叫它bottom-up;
- 層4、5、6對應的支路就是所謂的top-down網絡,是FPN的核心部分,名字的來由也很簡單。
2. 為什么FPN能夠很好的處理小目標?
如上圖所示,FPN能夠很好地處理小目標的主要原因是:
- FPN可以利用經過top-down模型后的那些上下文信息(高層語義信息);
- 對于小目標而言,FPN增加了特征映射的分辨率(即在更大的feature map上面進行操作,這樣可以獲得更多關于小目標的有用信息),如圖中所示;
三、 FPN性能評估
1. FPN效果定量評估
如上表所示,我們可以看到當我們使用相同的預訓練網絡、相同的RPN網絡、Fast R-CNN使用不同的方法時,我們的特征層由原來的C4或者C5變化為現在的特征集合Pk,同時FPN方案使用了橫向連接(lateral)和top-down模型,算法的性能有了大幅度上升,與a相比提升了2.2個百分點,與b相比提升了4.0個百分點(AP@0.5);對于APs,提升了5.9個百分點;對于APm,提升了5.3個百分點。這也說明了FPN能夠提升小目標的檢測效果。
觀察表2,我們可以看到使用FPN的Fast R-CNN+FPN和沒有使用FPN的Fast R-CNN方案之間的差別,首先我們的特征維度由1024減少到256維(這樣可以大大的減少一些運算量,包括前向和反向運算);我們利用2個MLP層取代了Conv5,作為我們的頭分類器;我們的訓練時間由原來的44.6小時減少到現在的10.6小時,速度大概提升了4倍;我們的推理時間由原來的0.32s減少到現在的0.15s;最后,我們的準確率提升了2.0個百分點。主要的原因是因為我們通過FPN獲得了更加魯邦的高層語義特征,它使得我們的學習過程更加高效。
如上表所示,我們測試了FPN算法在COCO數據集上面的性能表現,使用了FPN的Faster R-CNN方法獲得了很多的最佳指標,尤其是在APs指標上面。總之,我們獲得了最好的單模型準確率。
如上表所示,我們比較了比較了FPN+RPN和RPN這兩種方案,我們可以看到我們的性能有了大幅度的提升。
在表5中,我們驗證了top-down模型和Lateral連接的重要性,同時使用兩者的FPN方案取得了最好的結果。相對來講,Lateral連接起到了更好的效果。
由于FPN是一個特征金字塔,具有很好地泛華能力,可以利用到很多利用深度學習網絡的方法中去,包括目標檢測、實例分割等。如上表所示,使用了FPN的DeepMask方法可以不僅可以獲得性能的提升,同時可以獲得速度的提升。(不同的目標在不同的層上面生成對應的Mask)
2. FPN效果定性評估
四、 FPN總結
- FPN 構架了一個可以進行端到端訓練的特征金字塔;
- 通過CNN網絡的層次結構高效的進行強特征計算;
- 通過結合bottom-up與top-down方法獲得較強的語義特征,提高目標檢測和實例分割在多個數據集上面的性能表現;
- FPN這種架構可以靈活地應用在不同地任務中去,包括目標檢測、實例分割等;
以下是FPN網絡的架構細節圖。
參考文獻
- FPN對應的poster,參考鏈接;
- https://zhuanlan.zhihu.com/p/92005927
- https://blog.csdn.net/baidu_30594023/article/details/82623623
- https://www.pianshen.com/article/786269172/
- https://blog.csdn.net/WZZ18191171661/article/details/79494534