Detection論文總結(1)Feature Pyramid Networks for Object Detection

文章地址:arxiv

Feature Pyramid Networks for Object Detection

首先,特徵金字塔對於不同尺度的檢測問題來說是非常基本的組件,而不同大小的目標往往對應在不同的特徵層當中。然而,在最近的一些深度學習檢測模型中很少運用它,因爲將不同尺度的圖片依次計算是很費時費資源的,所以最近的一些模型很少用到這個方法。我們設計了一個top-down有lateral connections的結構FPN來利用很少的額外資源計算特徵金字塔。在Faster RCNN模型上測試可以得到勝過COCO2016的冠軍,並有6FPS的處理速度。

引言

識別不同大小的物體一向目標檢測領域的一大挑戰,而特徵金字塔則是解決這個問題的一個基本方法,每一層對應不同尺寸的物體。在手工提取特徵時代特徵金字塔就應用得十分普遍。雖然後來的卷積神經網絡在尺度上更具有魯棒性,但依然需要特徵金字塔來獲得更準確的結果。ImageNet和COCO上所有頂級模型都在特徵金字塔上進行了多尺度測試。其主要優勢在於,它是一種多尺度特徵表示,且每一尺度上語義信息都特別強烈

然而,這種方式一個最大的問題在於其測試時間(Inference time)大大增加,在實際場景下應用受阻;訓練時存儲佔用太多,端到端訓練不現實;如果僅在測試時使用特徵金字塔,又會導致訓-測不統一。因此Fast & Faster RCNN默認都不使用它。

除了分別計算每層特徵外,可以利用CNN不同層輸出的不同大小的中間特徵。但是,由於深度的不同,這些特徵之間存在着語義表示能力的偏差。高分辨率的特徵圖往往伴隨着低級別的特徵,這會損害其模型的識別能力。SSD的方案是放棄低級特徵,從達到特定深度的某一層纔開始利用特徵,但是這樣不利於識別小物體

本文的目標是要建立一個模型,可以得到一個特徵金字塔,使其中每一層都具有相同豐富的表示能力,並且只附加了很少的推斷時間,然後可以在每一層分別作出預測。

相關研究

SIFT與HOG是之前常用的人設特徵,基本都是在圖片金字塔上密集運算得到特徵金字塔,而其快速計算方法則是計算頂層之後再做插值計算下層。利用多層特徵的網絡也不在少數,如分割的FCN,SSD等等,還有像U-Net等網絡研究關於雙向與跳躍連接的內容。

特徵金字塔網絡

文章希望構建一個每一層都有強語義信息的特徵金字塔,以滑動窗RPNregion-based檢測器爲例。同時在第6節也討論了實例分割方面的問題。文章以單尺度圖片輸入,用一個全卷積網絡輸出不同層次的特徵,這個過程與總面積backbone是相獨立的。文中所用的網絡結構是ResNets。模型結構包括從底向上的通道,從上而下的通道,和橫向連接

  • 前向網絡就是backbone主幹網絡,其中輸出了每次尺度變化2倍的多個特徵圖。有許多不同的位置輸出相同的分辨率,我們稱這些層是在同一個stage。對於我們的特徵金字塔,我們取一個stage的最後一個輸出層的特徵,畢竟最深層有最強的表現力。對ResNets而言,我們取conv2-5的輸出,不取conv1是因爲它的存儲佔用太大了。
  • 反向重構與橫向連接。通過上採樣我們將低分辨率特徵圖變爲高分辨率,使其具有更強語義。簡單起見我們用了最近鄰上採樣方法。然而考慮到在多次上下采樣之後定位上會出現偏差,我們利用橫向連接來細化其具體每個位置的信息,此處用一個1x1的卷積可以修正通道維度(我個人覺得還有數據分佈的問題)。我們會給每一個相加之後的特徵圖進行一個3x3的卷積得到最後的特徵圖,這樣可以減少上下采樣的疊加影響。所有額外的Conv層都是256通道,並且沒有激活函數,這個實驗驗證影響不大。

作者表示simplicity是他們很看重的一點,雖然用比如多層Res塊來當作連接可能效果會有所提升,但是他們還是選擇了以上較簡單的方法。

應用

在應用時,他們同時將FPN放到了RPN裏進行Proposal和Fast RCNN裏進行目標檢測。對原模型,他們作出了儘可能少的修改

RPN應用

RPN就是一個滑動窗口法的目標檢測器,在原始的設定裏面,就直接用一個3x3的窗在單卡尺度的特徵圖上滑動作二分類與bbox的迴歸。這個通過一個3x3卷積加兩個分別的1x1卷積實現。我們將單尺度改爲用同一個卷積頭在不同尺度的特徵圖上滑動。因此,我們也不需要多尺度的anchor了,但是還需要不同比例的anchor。利用IoU將gt賦給各個anchor:大於0.7爲正例,小於0.3爲反例。

實驗中,我們試過在不同的特徵圖上用不同的檢測頭,但是效果不好。說明所有的特徵圖有着類似的語義信息。也說明了RPN可以自然地加上RPN。

Fast RCNN應用

Fast RCNN在RoI內提取特徵,之前都是在單特徵圖上提取的,我們需要解決的第一個問題就是每個RoI分別從哪個特徵圖上提取特徵。我們利用RoI的大小,RoI越大,取越高層的特徵。
k=k0+log2(wh/224)k=\left \lfloor k_0+log_2(\sqrt{wh}/224) \right \rfloor
224是ImageNet預訓練的大小,而k0k_0是全圖224x224所應該對應的特徵圖。RoI越小,k也就越小,會指向一個分辨率更高的特徵圖。

以前人們在conv4作預測時,會取一個類conv5結構的檢測頭。但是由於我們的特徵圖已經經過FPN把語義信息補全了,所以我們可以在RoI-Pooling後簡單地用兩個FC解決問題,更加輕便。

目標檢測上的試驗

(待更新)

對RPN網絡,作者的評價指標是COCO版本的AR,以及大中小三種尺度物品的AR,並對每張圖片取100或1000個proposal分別給出結果。RPN網絡是end2end訓練的,詳細配置略。

結果上來說,首先,肯定是比Baseline好的(8P),尤其是在小物體的AR上高的更多(12.9P)。如果去掉反向重構的部分則只與baseline差不多,大概是由於語義差造成的吧,這個問題還不能用層獨立檢測頭來修正——反而還有所下降。如果去掉橫向連接的話,其定位精度會嚴重下降。而如果不用金字塔,只用分辨率最高的特徵圖雖然比Baseline高,但是比金字塔方案要低,說明金字塔提高了對尺度的魯棒性。

對Fast RCNN,我們用RPN訓練結果得到的固定RoI進行訓練,但是並不繼承其特徵。首先在一般情況下,我們簡單的檢測頭並不能達到baseline裏面把所有conv5都當作檢測頭的方法的精度高,但是用上FPN之後就不一樣了。論文也驗證了去掉反向重構和橫向連接的影響,得到了類似的結論,只是在只用P2最高分辨率時AP下降不多,猜想是由於RoIpooling對尺度不敏感的原因。

後來在整個Faster RCNN模型下訓練,在共享特徵時有更好的結果,我覺得它說的應該是指alt-opt的訓練方法。文章表示自己沒有計算圖像金字塔就獲得了這麼好的結果,並且也沒有用很多小trick。

實例分割

結論

本文提供了一個不需要圖片金字塔就可以計算特徵金字塔的簡易算法。所以說雖然Conv表示能力很強,但是我們還是要花心思來解決物品的尺度問題。

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