1.1 簡介
在深度學習領域,尤其是計算機視覺和目標檢測任務中,Feature Pyramid Networks (FPN) 是一種革命性的架構設計,它解決了多尺度特征檢測和融合的關鍵問題。FPN最初由何凱明等人在2017年的論文《Feature Pyramid Networks for Object Detection》中提出,自那以后,它成為了許多現代目標檢測框架的核心組件。
FPN的核心思想
FPN的核心思想在于構建一個特征金字塔,這個金字塔能夠同時利用深度卷積網絡中不同層級的特征。傳統的卷積網絡往往只能在某個固定的特征層級進行預測,這限制了它們對多尺度目標的有效檢測。FPN通過引入自頂向下的路徑和橫向連接,巧妙地融合了高層的語義信息(豐富的類別信息但空間分辨率較低)與底層的空間細節信息(高分辨率但語義信息較少),從而在不同的尺度上都能實現高效且準確的目標定位。
架構特點
-
自頂向下的路徑:FPN首先將深層(高語義級別但低分辨率)特征圖通過上采樣(例如雙線性插值)逐級上移,使其尺寸與淺層特征圖匹配。
-
橫向連接:在每個上采樣后的特征圖與其對應的淺層特征圖之間添加橫向連接,通過1x1卷積來調整通道數,并將兩者相加,以此結合深層次的語義信息與淺層次的空間細節信息。
-
多尺度預測:在每個融合后的特征圖上都設置預測頭(例如用于分類和回歸的任務頭),這樣可以在每個層級上都對不同大小的目標進行檢測,提高了對小物體檢測的準確性。
應用與影響
FPN的提出顯著提升了目標檢測系統的性能,尤其是在處理不同尺度物體檢測方面,減少了小物體的漏檢率,同時保持了對大物體的高檢測精度。它的有效性不僅限于目標檢測,還被廣泛應用于實例分割、語義分割以及其他需要多尺度特征分析的視覺任務中。
總結
FPN通過其創新的特征融合機制,為深度學習中的多尺度目標檢測問題提供了一個優雅且高效的解決方案。它不僅提升了檢測系統的準確性和效率,還促進了后續一系列基于特征金字塔結構的改進和發展,成為了現代計算機視覺架構設計中不可或缺的一部分。
1.2 FPN的原理
原理
核心挑戰:在目標檢測任務中,目標可能出現在圖像的不同位置和不同尺度上。傳統方法如圖像金字塔或單獨使用高層(高語義但低分辨率)或低層(高分辨率但低語義)特征圖往往不能有效同時解決多尺度問題。
解決方案:FPN通過創建一個特征金字塔來合并不同尺度的特征,這個金字塔包含了從細粒度到粗粒度的所有尺度信息。它利用了骨干網絡(如ResNet、VGG等)生成的多層特征圖,通過自頂向下和橫向連接的方式融合這些特征。
流程
-
自下而上(Bottom-Up Pathway):
- 輸入圖像通過骨干網絡(如ResNet的C1至C5層),每經過一層卷積和池化,特征圖的尺寸減小(分辨率降低),但通道數(特征維度)增加。這個過程提取了從低級到高級的特征,高級特征富含語義信息但空間分辨率較低。
-
構建頂層特征:
- 從骨干網絡的最后一層特征(例如C5)開始,使用1x1卷積來減少通道數,生成一個高層次特征圖,標記為P5。這個操作既降低了計算復雜度,也為后續上采樣操作做準備。
-
自頂向下路徑(Top-Down Pathway):
- 對P5進行上采樣(常用雙線性插值或最近鄰插值),使其尺寸與下一層特征圖(例如C4)匹配,然后通過橫向連接與C4特征圖相加。這里的橫向連接先用1x1卷積調整C4的通道數,確保與上采樣后的P5具有相同數量的通道,之后相加得到新的特征圖P4。這個過程遞歸進行,直到覆蓋所有需要的尺度。
-
特征融合與輸出:
- 在每個融合后的特征圖(P2至P5)上,可以附加額外的卷積層來生成最終的預測,比如邊界框的回歸和類別的分類得分。這樣,FPN能夠在每個尺度上直接預測目標,適應不同大小的目標檢測。
優勢
- 多尺度特征融合:通過自頂向下和橫向連接,FPN能夠在不同尺度上綜合語義信息和空間細節,提高了對小目標的檢測能力。
- 高效計算:相比圖像金字塔,FPN復用了同一輸入圖像的特征,避免了多次運行骨干網絡的高昂計算成本。
- 靈活性:FPN結構易于集成到現有的目標檢測框架中,如Faster R-CNN、Mask R-CNN等,提升了整體性能。
下圖中的(d)就是FPN結構。我們先看一下abc,對于a是將不同尺度的圖片生成的特征圖都做一次預測,這樣做明顯速度非常慢。b是將圖片最后的特征圖做一次預測,c是同一尺度的圖片生成的不同尺度的特征圖都做一次預測。
對于FPN,它并不是在我們backbone上不同特征圖進行一個預測,而是會將我們不同特征圖上的特征去進行一個融合,然后在我們融合之后的特征圖上再進行一個預測。通過論文的實驗我們可以了解到,這樣做確實有助于我們提升網絡的檢測效果。
1.3 FPN的具體細節
特征圖大小的選取是有規則的,即自底向上依次除以2,假如最底層是28x28,那么上面一層就是14x14,在上面一層是7x7.
針對每一個特征圖,我們都會先去使用一個1x1的卷積層進行處理(調整channel保證一致),因為不同特征圖對應的channel一般情況下是不一樣的。
那么高層(上面)的特征圖如何與下面的特征圖進行融合的呢?就是將上面的特征圖進行一個2倍的上采樣后,與1x1卷積之后的那個較大的特征圖進行一個add的操作。
那么2倍上采樣是怎么實現的呢?論文里使用的就是“臨近插值算法”。
臨近插值算法
臨近插值算法(Nearest Neighbor Interpolation),又稱最近鄰插值,是一種簡單且計算效率高的圖像縮放方法。在數字圖像處理中,當需要改變圖像的尺寸,特別是放大圖像時,臨近插值算法通過直接復制最近的像素值來估算新像素的位置值,不涉及像素值的混合或計算。
原理
-
定義: 當需要從一個低分辨率圖像創建一個高分辨率圖像時,新圖像中的每個像素都需要從原圖像中找到一個對應的值。在臨近插值中,新圖像中的每個像素值直接取自原圖中距離最近的已知像素點的值。
-
操作步驟:
- 首先,確定新圖像的尺寸和原始圖像的尺寸之間的比例關系。
- 對于新圖像中的每一個像素位置,計算該像素在原始圖像中的對應位置。由于尺寸變化,這個對應位置通常是浮點數,而非整數坐標。
- 取這個浮點坐標的整數部分,即找到了原圖中最鄰近的像素。
- 將該鄰近像素的值直接賦給新圖像中的當前位置,忽略小數部分,不進行任何插值計算。
特點
-
優點:
- 計算速度快,實現簡單,不需要額外的計算資源。
- 保持了原圖的銳利邊緣,適用于需要保持圖像邊緣清晰度的場合。
-
缺點:
- 圖像放大后,由于直接復制像素,會導致圖像看起來像素化嚴重,邊緣可能出現明顯的階梯效應,降低了圖像的視覺質量。
- 對于含有精細細節或漸變區域的圖像,這種插值方法不能很好地恢復細節,可能會丟失重要的圖像信息。
應用場景
盡管臨近插值因犧牲圖像質量而不適合要求高的圖像處理任務,但它在某些特定情況下仍非常有用,比如在實時系統中,當處理速度優先于圖像質量時,或者在一些算法的初步處理階段,當需要快速預覽結果而不關注細節時。此外,在某些特定的圖像處理算法,如一些目標檢測或圖像分類任務的預處理階段,如果對圖像細節的要求不高,也可能使用臨近插值來加速處理過程。
1.4 FPN網絡結構
以Resnet50為例,假設輸入的圖像是640x640x3的RGB圖像,我們對每個CONV生成的特征矩陣記為C2、C3、C4、C5,然后將我們得到的特征圖進行一個1x1的卷積來調整channel,然后我從再從C5到C2(自頂向下)進行特征圖的融合
因為我們最后生成了不同尺度的預測特征層,所以我們可以在不同的預測特征層上去分別針對不同尺度的目標進行預測。
我們之前看Faster R-CNN只有一個預測特征層,所以我們只在那一個層上去生成不同尺度和比例的anchor。
在FPN當中,我們不同的預測特征層會針對不同的面積,例如P2,P2是底層的特征層,它會保留更多的底層細節信息,所以它更適合去預測小型的目標,所以我們會將322,比例為1:1,2:1,1:2的anchor在P2上進行生成。同理P3使用642,P4使用1282,P5使用2562,P6使用5122。
至于不同的預測特征層,是否需要針對每一個特征層都去使用RPN和FastRCNN的模塊呢?在論文里作者也進行了實驗,在原論文當中,實驗結果發現我們在不同的預測特征層上共用同一個RPN和FastRCNN和我們分別用,效果或者說檢測精度幾乎沒有什么差異,所以共享是更好的,這樣做能夠減少訓練參數和網絡的大小,提升訓練速度。
1.5? RPN生成的proposal如何映射到對應的預測特征層上
w,h對應的是PRN預測得到的一系列proposal它在原圖上的寬高,k0=4,k代表之前提到的P2-P5。
舉個例子proposal在原圖上的寬高是112x112,那么log2括號內的值為1/2,log2(1/2)應為-1,加上k0后等于3,再向下取整還是3,那么就對應在我們的P3特征預測層上進行預測。
?pytorch官方實現
1.6?有哪些網絡用到了FPN
特征金字塔網絡(FPN)自從被提出以來,因其在物體檢測和語義分割任務中顯著提升性能的能力,已被廣泛應用于多種深度學習網絡結構中。以下是一些采用或集成FPN結構的知名網絡模型:
-
Faster R-CNN with FPN:FPN首次被提出時,就是作為 Faster R-CNN 模型的一部分,用于改進候選區域生成網絡(Region Proposal Network, RPN),以及在檢測階段結合多尺度特征。
-
Mask R-CNN:在Mask R-CNN中,FPN也被用來改善實例分割任務的表現,通過在FPN的不同層上進行預測,提高了對不同尺度物體的分割精度。
-
RetinaNet:這是與FPN一同發表的另一項工作,它結合FPN結構設計了一個新的單階段物體檢測器,利用FPN的多尺度特性來解決物體檢測中的類別不平衡問題,并且使用了Focal Loss。
-
YOLOv3/YOLOv4:YOLO(You Only Look Once)系列的后期版本,如YOLOv3和YOLOv4,也采用了特征金字塔網絡的思想來處理多尺度檢測,以提高對不同大小目標的檢測能力。
-
EfficientDet:這是一個高效的目標檢測模型系列,它結合了BiFPN(即改進的特征金字塔網絡)來優化特征融合和多尺度特征處理,從而在保持較高精度的同時顯著提高了運行效率。
-
Panoptic FPN:這是為了解決全景分割任務而提出的,它在FPN的基礎上進一步發展,旨在統一實例分割和語義分割,提供一個全面的分割輸出。
-
COCO-DRN:Deep Residual Network(DRN)結合FPN用于COCO數據集上的目標檢測任務,展示了FPN在不同網絡架構上的泛化能力。
除了這些,還有許多研究者在自己的定制化網絡結構中融入了FPN的理念,以期在不同的視覺任務上取得更好的性能。FPN因其靈活性和有效性,已成為現代物體檢測和分割網絡設計中的一個標準組件。