一文看盡物體檢測中的各種FPN(閱讀筆記)

引言

早期的目標檢測算法(無論是單階段還是雙階段)通常都是在Backbone的最後一層的特徵圖直接外接檢測頭做物體檢測。其輸出的特徵圖分辨率是輸入圖片分辨率的1/32,太小,不利於物體檢測,因此一般會將最後一個stage(backbone中featuremap分辨率相同的若干層)的MaxPooling去掉或者將stride爲2的conv改爲stride爲1的conv,以增大最後一層特徵圖的分辨率。

而單一尺度的特徵圖無法同時有效的表徵各個尺度的物體,因此,逐漸利用不同stage的不同尺度特徵圖。用特徵金字塔網絡(feature parymid network)表徵不同scale的物體,也就是進入了FPN時代。

物體檢測各個階段可以分爲
1)Backbone生成特徵階段
2)特徵融合階段
3)檢測頭輸出bounding box

FPN的演進

物體檢測性能提升,一般主要通過數據增強、改進Backbone、改進FPN、改進檢測頭、改進loss、改進後處理等6個常用手段。
其中FPN自從被提出來,先後迭代了不少版本。大致迭代路徑如下圖:

1)無融合

無融合,又利用多尺度特徵的典型代表就是2016年提出的SSD,它直接利用不同stage的特徵圖分別負責不同scale大小物體的檢測。

2)自上而下單向融合

自上而下單向融合的FPN,事實上仍然是當前物體檢測模型的主流融合模式。如我們常見的Faster RCNN、Mask RCNN、Yolov3、RetinaNet、Cascade RCNN等,具體各個FPN的內部細節如下圖。

3)簡單雙向融合

PANet是第一個提出從下向上二次融合的模型,並且PANet就是在Faster/Master/Cascade RCNN中的FPN的基礎上,簡單增了從下而上的融合路徑。看下圖。

4)複雜的雙向融合

PANet的提出證明了雙向融合的有效性,而PANet的雙向融合較爲簡單,因此不少文章在FPN的方向上更進一步,嘗試了更復雜的雙向融合,如ASFF、NAS-FPN和BiFPN。

ASFF

ASFF在YOLOV3的FPN的基礎上,採用了注意力機制

NAS-FPN和BiFPN

NAS-FPN和BiFPN,都是google出品,思路也一脈相承,都是在FPN中尋找一個有效的block,然後重複疊加,這樣就可以彈性的控制FPN的大小。

其中BiFPN的具體細節如下圖。

Recursive-FPN(當前最佳)

遞歸FPN(2020年)(DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution),效果之好令人驚訝,使用遞歸FPN的DetectoRS是目前物體檢測(COCO mAP 54.7)、實體分割和全景分割的SOTA,太強悍了。
遞歸FPN理解起來很容易,就是將傳統FPN的融合後的輸出,再輸入給Backbone,進行二次循環,如下圖。

下圖給出了FPN與Recursive-FPN的區別,並且把一個2層的遞歸FPN展開了,非常簡單明瞭,不做過多介紹。

M2det中的SFAM

M2det中的SFAM,比較複雜,它是先把C3與C5兩個stage的特徵融合成一個與C3分辨率相同的特徵圖(下圖中的FFM1模塊),然後再在此特徵圖上疊加多個UNet(下圖中的TUM模塊),最後將每個UNet生成的多個分辨率中相同分辨率特徵一起融合(下圖中的SFAM模塊),從而生成最終的P3、P4、P5、P6特徵,以供檢測頭使用。具體如下圖。

每一個模塊的詳細細節如下圖。

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