天天看點

目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結

1 概述

  • 到目前為止。我們介紹過的各種目标檢測模型中使用的增強網絡多尺度檢測性能的方式有兩種:①第一種是将輸入圖像變換出不同的分辨率,使網絡獲得多尺度檢測能力;②第二種是從不同層次的feature maps上預測目标的bounding boxes,進而達到多尺度檢測的目标,這種方法以SSD為代表。
  • 對輸入圖像變換分辨率是使網絡獲得多尺度檢測性能的有效方法,但其缺點也同樣明顯:要花費大量的時間訓練網絡,需要使用的記憶體空間也非常多
  • SSD所使用的使用不同層級的feature maps的方法非常直覺且有效。SSD并沒有使用淺層的feature maps(尺寸較大的feature maps),這是因為淺層的feature maps包含的特征中大部分是圖像的邊緣、紋理、角點等特征,基本不包含高層語義特征,是以無法直接用于預測bounding boxes。與此同時,SSD的缺點也在這裡:淺層的feature maps中包含的特征是有助于識别小目标的,SSD沒有采用淺層的feature maps,也就放棄了這一部分可以提高檢測小目标能力的機會。
  • 也就是說,淺層的feature maps包含了可提高小目标檢測性能的資訊,但是由于這些資訊不具有高層語義特性,是以沒法直接使用。那要如何對這些淺層feature maps進行處理以使其可以應用于預測目标位置呢?以這個為出發點,FPN(Feature Pyramid Networks)網絡被提出。換句話說,FPN網絡實際上是對SSD網絡的改進。

2 FPN網絡結構

  • 在正式介紹FPN網絡之前,我們先介紹目标檢測中幾種常見的确定目标位置的方法:①第一種方法将輸入圖像變換出不同的尺寸,分别送入網絡得到各自最終的feature maps,用它們分别預測bbox,再選出最好的那個;②第二種方法是最樸素的方式,将單一圖檔送入網絡,使用最終的feature maps完成目标bbox的預測;③第三種方法以SSD為代表,不同層次的feature maps都被用來預測目标的bounding box;④最後一種方法就是我們将要介紹的FPN網絡使用的方法。
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結
  • 首先明确一下FPN網絡的目标:神經網絡得到的feature maps中淺層的feature maps包含的高層語義資訊較少,如何對這些淺層的feature maps進行改造以使其包含高層語義資訊? 分為如下兩個步驟:
  • 首先是正常生成feature maps的過程 (論文稱為Bottom-up pathway,直譯為“自底向上過程”)。以ResNet為例。ResNet網絡的卷積層可分為5個block,每個block内部包含若幹個卷積層(ResNet18、ResNet34、ResNet50、ResNet101、ResNet152中每個block包含的卷積層數量各不相同,但都有5個block),同一個block内的不同卷積層輸出的feature maps形狀是相同的(channel數量可能有差異)。由于每個block内部生成的feature maps形狀都相同,FPN網絡将一個block稱為一個stage,對每個stage,隻使用最後一層卷積層生成的feature maps。這4個feature maps的尺寸逐個減半。下圖是ResNet不同版本的網絡結構圖。 不采用第一個block中的feature maps的原因是其尺寸太大,太占用記憶體資源。
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結
  • 對上一步得到的4個尺寸逐個減半的feature maps,進行如下處理 (論文稱為Top-down pathway and lateral connections,直譯為“自頂向下和側向連接配接”) :對尺寸最小的feature maps,進行兩倍上采樣(放大兩倍),采樣方法為 nearest neighbor upsampling ,将采樣得到的feature maps與原始的相同尺寸的經過1x1卷積的feature maps進行逐點相加操作,生成一個新的feature maps。再對尺寸次小的feature maps同樣進行上述處理,得到新的4個feature maps(尺寸最小的那個feature maps直接進行1x1的卷積得到相同尺寸的新的feature maps)。示意圖如下(圖中隻畫了三層):
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結
  • 考慮到上采樣對feature maps帶來的噪聲,論文又對這4個feature maps分别進行了3x3的卷積操作以試圖消除上采樣帶來的噪聲的影響(并不改變feature maps的大小)。顯然,最後得到的這四個feature maps的尺寸與原始前向傳播得到的feature maps的尺寸是相同的。
  • 得到這4個feature maps後,再使用SSD中anchor及anchor boxes那一套東西,生成最終的bounding box。為了友善權值共享,論文将每個feature maps的channel都固定為256。(對不同feature maps的anchor,都使用同一組卷積核完成分類和邊框回歸的任務)
  • 到這裡,FPN網絡的核心貢獻就講完了,看似是一點小小的改變,會令目标檢測性能提高嗎,我們往下看

3 實驗驗證

3.1 RPN網絡中使用FPN

補充了解

  • 先回憶下RPN網絡的結構和實作流程:RPN網絡
  • 該論文使用的RPN網絡基于ResNet。如上所述,可生成特征金字塔{P2, P3, P4, P5},這裡再添加一層feature maps {P6}(P5下采樣得到)。由于這種特征金字塔的形式本身就包含了多尺度資訊,以此在特征金字塔的每一層隻設定一個anchor的尺寸,分别為{322,642,1282,2562,5122},每層的anchor ratio分别為{1:2, 1:1, 2:1}。也就是說,這5個feature maps共會在原圖像上生成15種不同尺寸和形狀的anchor boxes。之後整個RPN網絡的訓練方式并未發生改變。需要注意的是,再最後使用1x1的卷積對每個anchor完成分類和邊框回歸時,采用權值共享,也即對每個anchor使用兩組卷積核,一組卷積核完成分類,一組卷積核完成回歸。
  • 下面是實驗結果
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結

3.2 Fast RCNN網絡中使用FPN

  • 先回憶下Fast RCNN的網絡結構和檢測流程:Fast RCNN
  • Fast RCNN隻對輸入圖像産生的一個feature maps進行處理,而FPN結構會産生好幾個feature maps,要怎麼在Fast RCNN中應用FPN結構呢?作者定義了這樣一個公式:
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結
  • 這個公式的作用是依據proposal的長(w)和寬(h)确定該proposal由FPN結構産生的feature maps中的哪一個進行RoI pooling。其中k0=4。舉例:對一個112x112的proposal,計算出的k值為3,是以,這個proposal由編号為k=3的feature maps的對應區域進行處理(k=1時feature maps的尺寸最大,k=4時feature maps的尺寸最小)
  • 實驗結果如下:
目标檢測(Object detection)—— FPN總結1 概述2 FPN網絡結構3 實驗驗證4 總結
實驗結果的解讀這裡就不詳細講了,一來很簡單,二來要打的字很多。這裡還有很多細節我沒有涉及到,是以若想詳細了解FPN網絡,仍舊需要閱讀原論文,這篇博文可以作為一個輔助。

4 總結

  • 一點小小的改進就可以帶來如此大的性能提升,這是令我非常詫異的,對我的啟示是:不要整天盡想着發明個多厲害的網絡,從現有的技術出發,分析其不足,做出一些小小的改進,可能就會帶來很好的效果。
  • FPN網絡的缺點是檢測速度太慢了,隻有5FPS,這是由于多個feature maps都生成了anchor boxes,換取話說就是用檢測速度的下降換取了檢測精度的提升,是以,隻能停留在理論分析刷檢測精度的階段,并不能在真實生産環境下落地。

繼續閱讀