1. 程式人生 > >Feature Pyramid Networks for Object Detection

Feature Pyramid Networks for Object Detection

https://arxiv.org/pdf/1612.03144.pdf

Feature Pyramid Networks for Object Detection

Abstract

特徵金字塔是對於多尺度目標檢測的識別系統裡的一個基本元件。但是近期的深度學習目標檢測器已經避免使用金字塔的表達方式,有部分原因是因為金字塔表達是計算和儲存密集型。在本文中,我們開發了一種內在多尺度的金字塔層級的深度卷積網路來構建特徵金字塔,只帶入了一些邊際額外成本。這個帶有橫向連線的自上而下的結構能夠在所有尺度上構建高層次的語義特徵圖。這個結構叫做特徵金字塔網路(FPN),在很多應用中作為通用特徵提取器都取得了很好的結果。在基本的Faster R-CNN結構中使用FPN,我們的方法在COCO 檢測基準資料集上取得了state-of-art的結果,超過了以往所有的單一模型。另外,我們的方法在一個GPU上可以跑到6fps,因此這是一個可以應用於實際的,精確的對於多尺度目標檢測的解決辦法。

1. Introduction

在機器視覺裡,在多尺度上識別物體是一個最為基本的挑戰。基於影象金字塔生成的特徵金字塔形成了第一種解決方法的基礎(如圖1(a))。這些金字塔在某種意義上是具有尺度不變性的,也就是一個物體的尺度變換是可以通過金字塔的層級來偏移進行補償的。直觀上,這個性質保證了模型可以通過掃描各種位置和金字塔層級來在很大尺度跨度上對物體進行檢測。

這裡寫圖片描述
圖1. (a)使用影象金字塔來構建特徵金字塔。特徵被獨立的從每個影象尺寸中提取出來,速度慢。(b)近期的檢測系統傾向於只使用一種尺度的特徵來進行更快速的檢測。(c)一種代替方案是重複利用由卷積網路計算出的金字塔層級特徵來將其當作是特徵影象金字塔。(d)我們提出的FPN,和(b),(c)一樣快,而且更準確。在圖中,藍框表示特徵圖,越粗的外框表示特徵語義資訊越強。

特徵影象金字塔在人工編碼特徵的時代是使用地非常多的。對於要求密集取樣的目標檢測器如DPM,要得到好的結果,特徵影象金字塔是非常關鍵的。對於識別任務來說,人工編碼的特徵已經絕大部分被深度卷積網路計算出的特徵所替代。除了能夠表達高層次的語義資訊,卷積網路對於特徵的變化更加魯棒,因此促進了使用單一輸入尺度計算出的特徵進行識別(如圖1(b))。但是即使有了這樣的魯棒性,為了得到更為準確的結果,金字塔仍然是需要的。所有最近的ImageNet和COCO檢測挑戰中的高分模型都使用了特徵影象金字塔進行多尺度測試。對於影象金字塔的每一層進行特徵編碼的優勢在於這樣會產生一個多尺度的特徵表達,因為對於所有層來說都是帶有強烈的語義資訊的,包括高畫素的層級。
儘管如此,對於影象金字塔的每一層進行特徵編碼具有明顯的短板。推斷時間將大幅度增加(如4倍),使得這一方法在真實環境下不太現實。而且,在一個影象金字塔上進行深度網路的端對端學習在儲存上也是不現實的,所以如果要利用影象金字塔,它只能被用於測試,這就使得訓練和測試的推斷不一致。基於這些原因,Fast和Faster R-CNN在預設設定中傾向於不使用特徵影象金字塔。
但是,影象金字塔並不是計算多尺度特徵表達的唯一方法。一個深度卷積網路一層一層地計算層級特徵,然後隨著降取樣層,層級特徵被賦予了內在的多尺度和金字塔形狀。這個網路內的層級特徵就構造出了不同空間畫素的特徵對映圖,但是由於深度不同會造成比較大的語義gap。高畫素的特徵圖帶有的是低層次的特徵這會使得它們對於目標識別的特徵表達能力較弱。
SSD(Single Shot Detector)是第一個嘗試使用使用卷積網路的層級特徵來作為特徵影象金字塔的(如圖1(c))。理想情況下,SSD-style的金字塔會重複使用通過前向傳播計算的不同層的多尺度特徵圖,因此幾乎不需要額外的花費。為了避免使用低層次的特徵,SSD放棄重複使用已經計算過的層,而是從網路的高層通過增加新的層來開始建立金字塔(如VGG16的conv4_3開始)。因此它錯過了使用高畫素特徵圖的層級特徵的機會。我們發現這些特徵對於預測小的物體來說非常重要。
本篇論文的目的在於自然地利用卷積網路特徵層級的金字塔大小 來創造一個在所有尺度上都具有強力語義資訊的特徵金字塔。為了完成這個目的,我們建立了一個自上而下的帶有橫向連線的結構,它能很好的結合低畫素、高語義特徵和高畫素、低語義特徵(如圖1(d)))。這個得到的結果是一個在所有尺度都具有豐富語義資訊的特徵金字塔,而且它能夠從一個單獨的輸入影象尺度中迅速建立起來。換句話說,我們將展示如何創造一個網路內的特徵金字塔,這個金字塔能夠在不犧牲表達能力,速度和儲存空間的情況下代替特徵影象金字塔。
相似的採用自上而下和跳躍連線的結構在最近的研究中很流行。它們的目標在於生成一個單一高層級的高解析度特徵圖(如圖2),然後使用這個特徵圖進行預測。相反,我們的方法是獨立地在每一層進行預測(如圖1(d))。我們的模型還效仿了特徵影象金字塔,這個是上述研究中沒有的。
除此之外,我們的金字塔結構能夠在所有尺度上進行端對端的學習,而且在訓練和測試上都可以一致地使用。最後,FPNs能夠取得比現存state-of-the-art的方法都要高的準確率。另外,這種提高並沒有額外增加時間。

這裡寫圖片描述
圖2. 自上而下帶有跳躍連線的網路結構,使用解析度最高的層級進行預測。

2. Related Work

Hand-engineered features and early neural networks. SIFT特徵是從空間尺度的極值上提取出來的,用於特徵點匹配。HOG特徵還有之後的SIFT特徵都是從整個影象金字塔中密集地計算出來的。這些HOG和SIFT金字塔被運用到大量的諸如影象分類,目標檢測,人類動作預測等任務中。這導致特徵影象金字塔迅速地引起了人們的注意。Dollar等人給出了一種快速金字塔計算,通過先計算一個稀疏取樣金字塔然後再對丟失的層級進行插值。在HOG和SIFT之前,早期的利用卷積網路進行人臉檢測是在影象金字塔上計算淺層網路來進行多尺度的人臉檢測。

Deep ConvNet object detectors. 隨著近來深度卷積網路的發展,例如OverFeat和R-CNN的目標檢測都展現出了準確率上的極大提升。OverFeat採用了與早期神經網路人臉檢測器相似的策略,對一個影象金字塔使用一個卷積網路作為滑動視窗檢測器。R-CNN則是採用了基於區域候選框的策略,在這裡每個候選框在輸入進卷積網路進行分類之前都需要進行尺度歸一化。SPPnet展示了這樣的基於區域的檢測器能夠更高效地使用由單一影象尺度上提取的特徵圖。最近的、更加準確的檢測方法像Fast R-CNN和Faster R-CNN支援使用從單一尺度影象中計算出的特徵,因為它提供了很好地準確率和速度上的平衡。然而,多尺度檢測仍然會表現地更好,尤其是小物體。

3. Feature Pyramid Networks

我們的目的是好好利用卷積網路的金字塔層級特徵(語義資訊從低到高)去建立一個整個都帶有高語義資訊的特徵金字塔。這個生成的FPN是通用的,在本文中主要著重於滑動視窗(RPN)和基於區域的檢測器(Fast R-CNN)。
我們的方法可以將任意大小的單一尺寸影象作為輸入,然後按比例地在多個層級上輸出對應大小的特徵對映圖,網路是全卷積模式。這個過程與主網路結構是獨立的,在本文中我們使用ResNets。我們金字塔的構建包含了一個自下而上地通道,一個自上而下的通道和橫向連線,我們接下來會一一闡述。

Bottom-up pathway. 自下而上的通道是主卷積網路的前向傳播計算過程,它會計算一個層級特徵,這個層級特徵會包含幾個尺寸(尺寸間的縮放大小是2)的特徵對映圖。這裡有許多層都會生成同樣大小的輸出對映圖,我們將這些層定義為同一個網路stage。對於我們的特徵金字塔來說,對於每一個stage我們定義一個金字塔級。我們選擇每個stage的最後一層輸出加入到我們特徵對映圖集合中來豐富我們的金字塔。這個選擇很自然合理,因為每個stage的最深的一層往往擁有最強烈的特徵。
特別的,對於ResNets,我們使用每個stage的最後一個殘差塊的特徵啟用值輸出。我們將最後的殘差塊的輸出定義為 { C 2 , C 3 , C 4 , C 5 } \{C_2,C_3,C_4,C_5\} ,它們分別表示conv2,conv3,conv4,conv5的輸出,注意到它們對於輸入影象擁有步長 { 4 , 8 , 16 , 32 } \{4,8,16,32\} 畫素。我們在金字塔裡不使用conv1,因為畫素太大,需要很大的儲存空間。

Top-down pathway and lateral connections. 這個自上而下的結構通過從更高的金字塔層級中上取樣畫素更低,但是語義更強的特徵對映圖來生成更高解析度的特徵。這些特徵通過橫向連線和自下而上通道中的特徵進行合併從而得到加強。每個橫向連線都將來自自上而下和自下而上通道中的同樣大小的特徵圖進行合併。自下而上的特徵圖雖然語義資訊少,但是它的啟用值定位更為準確,因為它降取樣的次數更少。
圖3展示了建立自上而下特徵圖的模組。對於低解析度的特徵圖,我們使用2畫素的上取樣(為了簡便,使用最近鄰上取樣)。這個上取樣的特徵圖然後與相應大小的自下而上特徵圖通過按位相加進行合併(需要經過 1 × 1 1\times1 卷積進行通道匹配)。這個步驟一直迭代直到生成最高畫素的特徵圖。為了開始這個迭代過程,我們簡單地在 C 5 C_5 上聯接一個 1 × 1 1\times1 的卷積層來生成最低畫素的特徵圖。最後,我們在每個合併圖上增加一個 3 × 3 3\times3 的卷積來生成最終的特徵圖,這是為了減少上取樣帶來的混疊效應。最終的特徵圖集合被叫作 { P 2 , P 3 , P 4 , P 5 } \{P_2,P_3,P_4,P_5\} ,與 { C 2 , C 3 , C 4 , C 5 } \{C_2,C_3,C_4,C_5\} 相對應。

這裡寫圖片描述
圖3. 一張影象展示橫向連線和自上而下通道通過相加實現合併。

因為在傳統的特徵影象金字塔中所有級的金字塔需要使用共享的分類器和迴歸器,所以我們對於所有的特徵圖進行了維度修正(使用 d d 來表徵通道數)。在本文中我們設定 d = 256 d=256 ,因此所有額外的卷積層都是256通道的輸出。在這些額外的層中不包含非線性,經驗上我們發現這會帶來一些很小的影響。
簡潔是我們設計的核心,我們發現我們的模型對於很多設計選擇都是魯棒的。設計更好的連線模組不是本文的核心,所以我們傾向於介紹上面介紹的簡單設計。

4. Applications

我們的方法是一種普世方法在深度卷積網路中建立特徵金字塔。接下來,我們將在RPN中採用我們的方法來進行預測框的生成在Fast R-CNN中採用我們的方法進行目標檢測。為了闡明我們方法的簡潔性和有效性,我們對原來的RPN和Fast R-CNN系統進行小小的修改來適應我們的特徵金字塔。

4.1. Feature Pyramid Networks for RPN

RPN是一個滑動視窗類不可知物體檢測器。在原來的RPN設計中,單一尺度的卷積特徵圖上,經過密集的 3 × 3 3\times3 的卷積連線一個小的子網路,通過這個子網路來實現前景/背景的二分類和邊框迴歸。這個 3 × 3 3\times3 卷積和兩個同胞子網路的結果,我們定義為網路head。這個前景/背景標籤和邊框迴歸目標都是通過一個叫做anchors的參考框集合來定義的。這些anchors是預先定義好的多尺度和縱橫比的,為了覆蓋不同大小的物體。
我們通過將單一尺寸的特徵對映圖替換成FPN來適應RPN。在我們特徵金字塔的每一級上我們都聯接一個同樣設計的head( 3 × 3 3\times3 卷積+兩個同胞 1 × 1 1\times1 卷積)。因為head結構在所有金字塔級上的所有位置進行密集滑動,所以對於特定級就不需要多尺度的anchors。而是,我們對於每一級都設計一個特定尺寸的anchors。對於 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2,P_3,P_4,P_5,P_6\} 我們分別定義anchors大小為 { 3 2 2 , 6 4 2 , 12 8 2 , 25 6 2 , 51 2 2 } \{32^2,64^2,128^2,256^2,512^2\} 。但是我們仍然在每一級都使用RPN中的縱橫比 { 1 : 2 , 1 : 1 , 2 : 1 } \{1:2,1:1,2:1\} 。所以總得來說,在金字塔裡我們一共擁有15種anchors。
我們仿照RPN中的標定方法,基於anchors與gt框的IoU來對anchor進行標定。注意到gt框的尺寸並不用來作為將gt框賦予給哪層金字塔的標準;而是,gt框只對應於anchors,再由anchors對應到自己的層級。那麼這樣我們就不引入RPN論文裡提到的規則以外的規則。
我們注意到網路heads的引數在所有特徵金字塔層級上是共享的;我們也評估了不共享引數的模型,發現得到了相似的準確率。共享引數引入好的結果表明金字塔所有層級都共享相似的語義層級。這個優勢就類似於使用了特徵影象金字塔,在這個特徵影象金字塔裡一個共有的head 分類器可以使用任意影象尺度計算出的特徵。

4.2. Feature Pyramid Networks for Fast R-CNN

Fast R-CNN是一個基於區域的目標檢測器,其中使用了RoI(Region-of-Interest)池化來提取特徵。Fast R-CNN一般都應用在單一尺度的特徵圖上。為了配合我們的FPN,RoIs需要被應用在金字塔的不同層級上。
我們假裝我們的特徵金字塔是從一個影象金字塔上生成的。因此我們可以採用當在影象金字塔上使用基於區域的檢測器的策略。我們將寬度為 w w ,高度為 h h (在網路的輸入影象上)的RoI分配到層級 P k P_k 的特徵金字塔, k k 由下式定義:
(1) k = k 0 + log 2 ( w h / 224 ) k=\lfloor k_0+\log_2(\sqrt{wh}/224) \rfloor \tag 1
這裡224是標準的訓練前ImageNet影象大小,然後 k 0 k_0 是目標層級,一個 w × h = 22 4 2 w\times h=224^2 的RoI需要被對映到這個層級上。類似於基於ResNet的Faster R-CNN系統是使用 C 4 C_4 作為單一特徵圖,所以我們設定 k 0 = 4 k_0=4 。直觀的來說,方程(1)意味著如果RoI的尺度變小,那麼RoI就應該對映到一個解析度更高的層級( k = 3 k=3 )。
我們在所有層的所有RoIs上都聯接一個head(在Fast R-CNN裡,heads是類別分類器和邊框迴歸器)。所有的head不管是哪一級都共享引數。在ResNet論文中,ResNet的conv5層級(一個9層深度的子網路)是作為一個head應用在conv4的特徵上,但是我們的方法已經利用conv5來構建金字塔了。所以不像ResNet論文裡,我們就簡單地採用RoI池化來提取 7 × 7 7\times7 的特徵,然後聯接兩個隱藏的,1024維的全連線層(每個都跟一個ReLU)(最後再經過分類和迴歸層)。這些層都是隨機初始化,因為全連線層在ResNet中沒有預訓練的引數。相比於標準的conv5 head,我們的2-fc MLP head引數很少,訓練更快。


小廣告

淘寶choker、耳飾小店 物理禁止
女程式設計師編碼時和編碼之餘 都需要一些美美的choker、耳飾來裝扮自己
男程式設計師更是需要常備一些來送給自己心儀的人
淘寶小店開店不易 希望有緣人多多支援 (O ^ ~ ^ O)
本號是本人 只是發則小廣告 沒有被盜 會持續更新深度學習相關博文和一些翻譯
感謝大家 不要拉黑我 ⊙﹏⊙|||°
這裡寫圖片描述