FPN詳解

原文鏈接:https://blog.csdn.net/WZZ18191171661/article/details/79494534

論文題目:Feature Pyramid Networks for Object Detection

論文鏈接:論文鏈接

論文代碼:Caffe版本代碼鏈接

 

一、FPN初探
1. 圖像金字塔


圖1 圖像金字塔

圖2 高斯金字塔效果

如上圖所示,這是一個圖像金字塔,做CV的你肯定很熟悉,因爲在很多的經典算法裏面都有它的身影,比如SIFT、HOG等算法。我們常用的是高斯金字塔,所謂的高斯金字塔是通過高斯平滑和亞採樣獲得一些下采樣圖像,也就是說第K層高斯金字塔通過平滑、亞採樣操作就可以獲得K+1層高斯圖像,高斯金字塔包含了一系列低通濾波器,其截止頻率從上一層到下一層是以因子2逐漸增加,所以高斯金字塔可以跨越很大的頻率範圍。總之,我們輸入一張圖片,我們可以獲得多張不同尺度的圖像,我們將這些不同尺度的圖像的4個頂點連接起來,就可以構造出一個類似真實金字塔的一個圖像金字塔。通過這個操作,我們可以爲2維圖像增加一個尺度維度(或者說是深度),這樣我們可以從中獲得更多的有用信息。整個過程類似於人眼看一個目標由遠及近的過程(近大遠小原理)。如圖2所示,我們可以看到一個圖像金字塔,中間是原始圖像,最上邊是下采樣後的圖像,最下邊是上採樣後的圖像。你可以將其對應到圖1中的不同層中。

2. 爲什麼需要構造特徵金字塔?


圖3 特徵金字塔

前面已經提到了高斯金字塔,由於它可以在一定程度上面提高算法的性能,因此很多經典的算法中都包含它。但是這些都是在傳統的算法中使用,當然也可以將這種方法直應用在深度神經網絡上面,但是由於它需要大量的運算和大量的內存。但是我們的特徵金字塔可以在速度和準確率之間進行權衡,可以通過它獲得更加魯棒的語義信息,這是其中的一個原因。

如上圖所示,我們可以看到我們的圖像中存在不同尺寸的目標,而不同的目標具有不同的特徵,利用淺層的特徵就可以將簡單的目標的區分開來;利用深層的特徵可以將複雜的目標區分開來;這樣我們就需要這樣的一個特徵金字塔來完成這件事。圖中我們在第1層(請看綠色標註)輸出較大目標的實例分割結果,在第2層輸出次大目標的實例檢測結果,在第3層輸出較小目標的實例分割結果。檢測也是一樣,我們會在第1層輸出簡單的目標,第2層輸出較複雜的目標,第3層輸出複雜的目標。

3. 爲什麼要提出FPN算法?


圖4 不同方案的金字塔

識別不同大小的物體是計算機視覺中的一個基本挑戰,我們常用的解決方案是構造多尺度金字塔。如上圖a所示,這是一個特徵圖像金字塔,整個過程是先對原始圖像構造圖像金字塔,然後在圖像金字塔的每一層提出不同的特徵,然後進行相應的預測(BB的位置)。這種方法的缺點是計算量大,需要大量的內存;優點是可以獲得較好的檢測精度。它通常會成爲整個算法的性能瓶頸,由於這些原因,當前很少使用這種算法。如上圖b所示,這是一種改進的思路,學者們發現我們可以利用卷積網絡本身的特性,即對原始圖像進行卷積和池化操作,通過這種操作我們可以獲得不同尺寸的feature map,這樣其實就類似於在圖像的特徵空間中構造金字塔。實驗表明,淺層的網絡更關注於細節信息,高層的網絡更關注於語義信息,而高層的語義信息能夠幫助我們準確的檢測出目標,因此我們可以利用最後一個卷積層上的feature map來進行預測。這種方法存在於大多數深度網絡中,比如VGG、ResNet、Inception,它們都是利用深度網絡的最後一層特徵來進行分類。這種方法的優點是速度快、需要內存少。它的缺點是我們僅僅關注深層網絡中最後一層的特徵,卻忽略了其它層的特徵,但是細節信息可以在一定程度上提升檢測的精度。因此有了圖c所示的架構,它的設計思想就是同時利用低層特徵和高層特徵,分別在不同的層同時進行預測,這是因爲我的一幅圖像中可能具有多個不同大小的目標,區分不同的目標可能需要不同的特徵,對於簡單的目標我們僅僅需要淺層的特徵就可以檢測到它,對於複雜的目標我們就需要利用複雜的特徵來檢測它。整個過程就是首先在原始圖像上面進行深度卷積,然後分別在不同的特徵層上面進行預測。它的優點是在不同的層上面輸出對應的目標,不需要經過所有的層才輸出對應的目標(即對於有些目標來說,不需要進行多餘的前向操作),這樣可以在一定程度上對網絡進行加速操作,同時可以提高算法的檢測性能。它的缺點是獲得的特徵不魯棒,都是一些弱特徵(因爲很多的特徵都是從較淺的層獲得的)。講了這麼多終於輪到我們的FPN啦,它的架構如圖d所示,整個過程如下所示,首先我們在輸入的圖像上進行深度卷積,然後對Layer2上面的特徵進行降維操作(即添加一層1x1的卷積層),對Layer4上面的特徵就行上採樣操作,使得它們具有相應的尺寸,然後對處理後的Layer2和處理後的Layer4執行加法操作(對應元素相加),將獲得的結果輸入到Layer5中去。其背後的思路是爲了獲得一個強語義信息,這樣可以提高檢測性能。認真的你可能觀察到了,這次我們使用了更深的層來構造特徵金字塔,這樣做是爲了使用更加魯棒的信息;除此之外,我們將處理過的低層特徵和處理過的高層特徵進行累加,這樣做的目的是因爲低層特徵可以提供更加準確的位置信息,而多次的降採樣和上採樣操作使得深層網絡的定位信息存在誤差,因此我們將其結合其起來使用,這樣我們就構建了一個更深的特徵金字塔,融合了多層特徵信息,並在不同的特徵進行輸出。這就是上圖的詳細解釋。(個人觀點而已)

 

二、FPN框架解析
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層的全連接網絡層,然後分兩個支路,連接對應的分類層和迴歸層;


圖5 FPN整體架構

注:層1、2、3對應的支路就是bottom-up網絡,就是所謂的預訓練網絡,文中使用了ResNet網絡;由於整個流向是自底向上的,所以我們叫它bottom-up;層4、5、6對應的支路就是所謂的top-down網絡,是FPN的核心部分,名字的來由也很簡單。

 2. 爲什麼FPN能夠很好的處理小目標?


圖6 FPN處理小目標

如上圖所示,FPN能夠很好地處理小目標的主要原因是:

FPN可以利用經過top-down模型後的那些上下文信息(高層語義信息);
對於小目標而言,FPN增加了特徵映射的分辨率(即在更大的feature map上面進行操作,這樣可以獲得更多關於小目標的有用信息),如圖中所示;
 

三、 FPN性能評估
1. FPN效果定量評估


表1 Faster R-CNN+FPN結果

如上表所示,我們可以看到當我們使用相同的預訓練網絡、相同的RPN網絡、Fast R-CNN使用不同的方法時,我們的特徵層由原來的C4或者C5變化爲現在的特徵集合Pk,同時FPN方案使用了橫向連接(lateral)和top-down模型,算法的性能有了大幅度上升,與a相比提升了2.2個百分點,與b相比提升了4.0個百分點([email protected]);對於APs,提升了5.9個百分點;對於APm,提升了5.3個百分點。這也說明了FPN能夠提升小目標的檢測效果。

表2 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獲得了更加魯邦的高層語義特徵,它使得我們的學習過程更加高效。

表3 COCO數據集結果展示

如上表所示,我們測試了FPN算法在COCO數據集上面的性能表現,使用了FPN的Faster R-CNN方法獲得了很多的最佳指標,尤其是在APs指標上面。總之,我們獲得了最好的單模型準確率。

表4 使用了FPN的RPN效果

如上表所示,我們比較了比較了FPN+RPN和RPN這兩種方案,我們可以看到我們的性能有了大幅度的提升。

表5 top-down和lateral的重要性

在表5中,我們驗證了top-down模型和Lateral連接的重要性,同時使用兩者的FPN方案取得了最好的結果。相對來講,Lateral連接起到了更好的效果。

表7 FPN在實例分割上面的效果

由於FPN是一個特徵金字塔,具有很好地泛華能力,可以利用到很多利用深度學習網絡的方法中去,包括目標檢測、實例分割等。如上表所示,使用了FPN的DeepMask方法可以不僅可以獲得性能的提升,同時可以獲得速度的提升。(不同的目標在不同的層上面生成對應的Mask)

2. FPN效果定性評估


圖8 FPN實例分割結果

 

四、 FPN總結
FPN 構架了一個可以進行端到端訓練的特徵金字塔;
通過CNN網絡的層次結構高效的進行強特徵計算;
通過結合bottom-up與top-down方法獲得較強的語義特徵,提高目標檢測和實例分割在多個數據集上面的性能表現;
FPN這種架構可以靈活地應用在不同地任務中去,包括目標檢測、實例分割等;
以下是FPN網絡的架構細節圖。

圖9 Faster R-CNN+FPN細節圖

 

參考文獻
[1] FPN對應的poster,參考鏈接;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章