常見特征金字塔網絡FPN及變體


  • 好久沒有寫文章了(對不起我在划水),最近在看北京的租房(真真貴呀)。
  • 預告一下,最近無事,根據個人多年的證券操作策略和自己的淺顯的AI時間序列的算法知識,還有自己Javascript的現學現賣,在微信小程序上弄了個簡單的輔助系統。我先試試效果如何,不錯的話將來弄個文章給大家介紹介紹。

感興趣可以聯系煉丹兄哦,WX:cyx645016617。

1 概述

FPN是Feature Parymid Network的縮寫。

目標檢測任務中,像是在YOLO1中那種,對一個圖片使用卷積來提取特征,經過了多個池化層或者stride為2的卷積層之后,輸出了一個小尺度的特征圖。然后再這個特征圖中來做目標檢測

換句話說,最后得到的目標檢測的結果,完全是依賴於這一個特征圖,這種方法叫做單stage物體檢測算法

可想而知,這種方法很難有效的識別出不同大小的目標,所以產生了多stage檢測算法,其實就是要用到了特征金字塔FPN。

簡單的說就是:一個圖片同樣是經過卷積網絡來提取特征,本來是經過多個池化層輸出一個特征圖,現在是經過多個池化層,每經過一個池化層都會輸出一個特征圖,這樣其實就提取出了多個尺度不同的特征圖。

然后尺度不同的特征圖,丟進特征金字塔網絡FPN,做目標檢測。

(如果還不明白,繼續往下看就明白啦~)

2 FPN結構概述

從圖中可以看到:

  • 左邊的c1啊,c2啊表示不同尺度的特征圖。原始的圖像input的尺寸經過一個池化層或者stride為2的卷積層之后,尺寸減少一半,這樣就變成了C1特征圖;如果又經過一個池化層,那么就變成C2特征圖。
  • C3,C4,C5,C6,C7這個四個尺度不同的特征圖,進入FPN特征金字塔網絡進行特征融合,然后再用檢測頭預測候選框。
  • 這里說一些個人的理解(如果有錯誤,請指正呀): 這里剛好區分一下多stage檢測算法和特征金字塔網絡的區別。
    • 多stage檢測算法:從上圖中我們可以看到P3,P4,P5,P6,P7這五個不同尺度的特征圖進入一個檢測頭預測候選框,這個檢測頭其實就是一個人檢測算法,不過這個神經網絡的輸入是多個不同尺度的特征圖,輸出則是候選框,所以這個多sgtage檢測算法;
    • 特征金字塔網絡:這個其實是讓不同尺度的特征圖之間互相融合,來增強特征圖表征能力的一種手段。這個過程不是預測候選框,應該算進特征提取的過程。FPN神經網絡的輸入也是多個不同尺度的特征圖,輸出也是多個不同尺度的特征圖,和輸入的特征圖是相同的。

所以呢,一個多stage檢測算法其實是可以沒有FPN結構,直接用卷積網絡輸出的C3,C4,C5,C6,C7放進檢測頭輸出候選框的。

3 最簡單的FPN結構

自上而下單向融合的FPN,事實上仍然是當前物體檢測模型的主流融合模式。如我們常見的Faster RCNN、Mask RCNN、Yolov3、RetinaNet、Cascade RCNN等,自上而下的單向的FPN結構如下圖所示

這個結構的精髓就是:C5的特征圖,經過上采樣,然后和C4的特征圖拼接,然后把拼接之后的特征圖經過卷積層和BN層,輸出得到P4特征圖。其中P4和C4的特征圖的shape相同。

經過這樣的結構,所以P4可以學到來自C5更深層的語義,然后P3可以學到來自C4更深層的語義。個人對此結構有效的解釋,因為對於預測精度來說,肯定是越深層的特征提取的越好,所以預測的越准確,但是深層的特征圖尺度較小,通過上采樣和淺層的特征圖融合,可以強化淺層特征圖的特征表述。

4 無FPN的多stage結構

這是一個沒有用FPN結構的結構圖。無融合,又利用多尺度特征的典型代表就是2016年日出的鼎鼎有名的SSD,它直接利用不同stage的特征圖分別負責不同scale大小物體的檢測。

可以看到,卷積網絡輸出的特征圖直接就放進了特征頭輸出候選框。

5 簡單雙向融合

原來的FPN是自深到淺單向的融合,現在是先自深到淺、再從淺到深雙向的的融合。PANet是第一個提出從下向上二次融合的模型:

  • PAnet: Path Aggregation Network.2018年的CVPR的論文了。
  • 論文地址:https://arxiv.org/abs/1803.01534
  • 論文名稱:Path Aggregation Network for Instance Segmentation

從圖中可以看到,先有一個跟FPN相同的上采樣過程,然后再從淺到深用stride為2的卷積完成下采樣。用stride為2的卷積層把淺層的特征圖P3下采樣,然后尺寸和C4相同,兩者拼接之后再用3x3的卷積層進行整理,生成P4特征圖

此外還有很多復雜的雙向融合的操作,這里不仔細介紹啦。

6 BiFPN

上面的PAnet是最簡單的雙向FPN,但是真正起名為BiFPN的是另外一個論文。

  • BiFPN:2019年google團隊提出的。
  • 論文地址:https://arxiv.org/abs/1911.09070
  • 論文名稱:EfficientDet: Scalable and Efficient Object Detection

    結構不難理解,其實就是在PAnet的結構上,做了一些小改進。但是這個論文的主要貢獻還是EfficientDet的提出,所以BiFPN只是算是一個小貢獻。

7 Recursive-FPN循環特征金字塔網絡

  • Recursive-FPN:效果之好令人驚訝,使用遞歸FPN的DetectoRS算是目標檢測任務的SOTA了吧。(2020年的論文)
  • 論文鏈接:https://arxiv.org/abs/2006.02334
  • 論文名稱:DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution

個人在自身的目標檢測任務中,也使用了RFN結構,雖然要求的算力提升了一倍,但是效果確實提升的比較明顯,大概有3到5個點的提升。 下面來看結構圖:

可以看到,這個有一個虛線和實線構成了一個特征圖和FPN網絡之間的一個循環。下面展示一個2-step的RFP結構,也就是循環兩次的FPN結構。(如果是1-step,那就是一般的FPN結構)

可以看到,就是把之前的FPN結構中的P3,P4,P5這些,再拼接到卷積網絡的對應的特征提取過程。拼接之后使用一個3x3卷積層和BN層,把通道數恢復到要求的值就可以用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM