18_特征金字塔網絡FPN結構詳解

1.1 簡介

在深度學習領域,尤其是計算機視覺和目標檢測任務中,Feature Pyramid Networks (FPN) 是一種革命性的架構設計,它解決了多尺度特征檢測和融合的關鍵問題。FPN最初由何凱明等人在2017年的論文《Feature Pyramid Networks for Object Detection》中提出,自那以后,它成為了許多現代目標檢測框架的核心組件。

FPN的核心思想

FPN的核心思想在于構建一個特征金字塔,這個金字塔能夠同時利用深度卷積網絡中不同層級的特征。傳統的卷積網絡往往只能在某個固定的特征層級進行預測,這限制了它們對多尺度目標的有效檢測。FPN通過引入自頂向下的路徑和橫向連接,巧妙地融合了高層的語義信息(豐富的類別信息但空間分辨率較低)與底層的空間細節信息(高分辨率但語義信息較少),從而在不同的尺度上都能實現高效且準確的目標定位。

架構特點

  1. 自頂向下的路徑:FPN首先將深層(高語義級別但低分辨率)特征圖通過上采樣(例如雙線性插值)逐級上移,使其尺寸與淺層特征圖匹配。

  2. 橫向連接:在每個上采樣后的特征圖與其對應的淺層特征圖之間添加橫向連接,通過1x1卷積來調整通道數,并將兩者相加,以此結合深層次的語義信息與淺層次的空間細節信息。

  3. 多尺度預測:在每個融合后的特征圖上都設置預測頭(例如用于分類和回歸的任務頭),這樣可以在每個層級上都對不同大小的目標進行檢測,提高了對小物體檢測的準確性。

應用與影響

FPN的提出顯著提升了目標檢測系統的性能,尤其是在處理不同尺度物體檢測方面,減少了小物體的漏檢率,同時保持了對大物體的高檢測精度。它的有效性不僅限于目標檢測,還被廣泛應用于實例分割、語義分割以及其他需要多尺度特征分析的視覺任務中。

總結

FPN通過其創新的特征融合機制,為深度學習中的多尺度目標檢測問題提供了一個優雅且高效的解決方案。它不僅提升了檢測系統的準確性和效率,還促進了后續一系列基于特征金字塔結構的改進和發展,成為了現代計算機視覺架構設計中不可或缺的一部分。

1.2 FPN的原理

原理

核心挑戰:在目標檢測任務中,目標可能出現在圖像的不同位置和不同尺度上。傳統方法如圖像金字塔或單獨使用高層(高語義但低分辨率)或低層(高分辨率但低語義)特征圖往往不能有效同時解決多尺度問題。

解決方案:FPN通過創建一個特征金字塔來合并不同尺度的特征,這個金字塔包含了從細粒度到粗粒度的所有尺度信息。它利用了骨干網絡(如ResNet、VGG等)生成的多層特征圖,通過自頂向下和橫向連接的方式融合這些特征。

流程

  1. 自下而上(Bottom-Up Pathway)

    • 輸入圖像通過骨干網絡(如ResNet的C1至C5層),每經過一層卷積和池化,特征圖的尺寸減小(分辨率降低),但通道數(特征維度)增加。這個過程提取了從低級到高級的特征,高級特征富含語義信息但空間分辨率較低。
  2. 構建頂層特征

    • 從骨干網絡的最后一層特征(例如C5)開始,使用1x1卷積來減少通道數,生成一個高層次特征圖,標記為P5。這個操作既降低了計算復雜度,也為后續上采樣操作做準備。
  3. 自頂向下路徑(Top-Down Pathway)

    • 對P5進行上采樣(常用雙線性插值或最近鄰插值),使其尺寸與下一層特征圖(例如C4)匹配,然后通過橫向連接與C4特征圖相加。這里的橫向連接先用1x1卷積調整C4的通道數,確保與上采樣后的P5具有相同數量的通道,之后相加得到新的特征圖P4。這個過程遞歸進行,直到覆蓋所有需要的尺度。
  4. 特征融合與輸出

    • 在每個融合后的特征圖(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. 定義: 當需要從一個低分辨率圖像創建一個高分辨率圖像時,新圖像中的每個像素都需要從原圖像中找到一個對應的值。在臨近插值中,新圖像中的每個像素值直接取自原圖中距離最近的已知像素點的值。

  2. 操作步驟:

    • 首先,確定新圖像的尺寸和原始圖像的尺寸之間的比例關系。
    • 對于新圖像中的每一個像素位置,計算該像素在原始圖像中的對應位置。由于尺寸變化,這個對應位置通常是浮點數,而非整數坐標。
    • 取這個浮點坐標的整數部分,即找到了原圖中最鄰近的像素。
    • 將該鄰近像素的值直接賦給新圖像中的當前位置,忽略小數部分,不進行任何插值計算。

特點

  • 優點:

    • 計算速度快,實現簡單,不需要額外的計算資源。
    • 保持了原圖的銳利邊緣,適用于需要保持圖像邊緣清晰度的場合。
  • 缺點:

    • 圖像放大后,由于直接復制像素,會導致圖像看起來像素化嚴重,邊緣可能出現明顯的階梯效應,降低了圖像的視覺質量。
    • 對于含有精細細節或漸變區域的圖像,這種插值方法不能很好地恢復細節,可能會丟失重要的圖像信息。

應用場景

盡管臨近插值因犧牲圖像質量而不適合要求高的圖像處理任務,但它在某些特定情況下仍非常有用,比如在實時系統中,當處理速度優先于圖像質量時,或者在一些算法的初步處理階段,當需要快速預覽結果而不關注細節時。此外,在某些特定的圖像處理算法,如一些目標檢測或圖像分類任務的預處理階段,如果對圖像細節的要求不高,也可能使用臨近插值來加速處理過程。

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結構的知名網絡模型:

  1. Faster R-CNN with FPN:FPN首次被提出時,就是作為 Faster R-CNN 模型的一部分,用于改進候選區域生成網絡(Region Proposal Network, RPN),以及在檢測階段結合多尺度特征。

  2. Mask R-CNN:在Mask R-CNN中,FPN也被用來改善實例分割任務的表現,通過在FPN的不同層上進行預測,提高了對不同尺度物體的分割精度。

  3. RetinaNet:這是與FPN一同發表的另一項工作,它結合FPN結構設計了一個新的單階段物體檢測器,利用FPN的多尺度特性來解決物體檢測中的類別不平衡問題,并且使用了Focal Loss。

  4. YOLOv3/YOLOv4:YOLO(You Only Look Once)系列的后期版本,如YOLOv3和YOLOv4,也采用了特征金字塔網絡的思想來處理多尺度檢測,以提高對不同大小目標的檢測能力。

  5. EfficientDet:這是一個高效的目標檢測模型系列,它結合了BiFPN(即改進的特征金字塔網絡)來優化特征融合和多尺度特征處理,從而在保持較高精度的同時顯著提高了運行效率。

  6. Panoptic FPN:這是為了解決全景分割任務而提出的,它在FPN的基礎上進一步發展,旨在統一實例分割和語義分割,提供一個全面的分割輸出。

  7. COCO-DRN:Deep Residual Network(DRN)結合FPN用于COCO數據集上的目標檢測任務,展示了FPN在不同網絡架構上的泛化能力。

除了這些,還有許多研究者在自己的定制化網絡結構中融入了FPN的理念,以期在不同的視覺任務上取得更好的性能。FPN因其靈活性和有效性,已成為現代物體檢測和分割網絡設計中的一個標準組件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42557.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

保護您的數據:應對MKP勒索病毒的有效策略

導言: 在當今數字化時代,.mkp勒索病毒等惡意軟件已經成為廣泛存在的安全威脅,對個人用戶和企業的數據安全構成了嚴峻挑戰。本文將探討.mkp勒索病毒的特點、傳播方式以及創新的應對策略,旨在幫助讀者更有效地應對這一威脅。如不幸…

Python面試題:請解釋什么是模塊和包,并描述它們的區別

在 Python 中,模塊(module)和包(package)是組織和管理代碼的兩種方式。它們幫助開發者創建結構化、可維護和可復用的代碼。 模塊(Module) 模塊是包含 Python 代碼的文件,擴展名為 …

ansible常見問題配置好了密碼還是報錯

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解決&#xf…

Stable Diffusion圖像的臉部細節控制——采樣器全解析

文章目錄 藝術地掌控人物形象好易智算原因分析為什么在使用Stable Diffusion生成全身圖像時,臉部細節往往不夠精細? 解決策略 局部重繪采樣器總結 藝術地掌控人物形象 在運用Stable Diffusion這一功能強大的AI繪圖工具時,我們往往會發現自己…

ESP32 步進電機精準控制:打造高精度 DIY 寫字機器人,實現流暢書寫體驗

摘要: 想讓你的 ESP32 不再僅僅是控制燈光的工具嗎? 本文將帶你使用 ESP32 開發板、步進電機和簡單的機械結構打造一個能夠自動寫字的機器人。我們將深入淺出地講解硬件連接、軟件代碼以及控制邏輯,并提供完整的項目代碼和電路圖,即使是 Ardu…

在mac下 Vue2和Vue3并存 全局Vue2環境創建Vue3新項目(Vue cli2和Vue cli4)

全局安裝vue2 npm install vue-cli -g自行在任意位置創建一個文件夾vue3,局部安裝vue3,注意不要帶-g npm install vue/cli安裝完成后,進入目錄,修改vue為vue3 找到vue3/node-moudles/.bin/vue,把vue改成vue3。 對環境變量進行配置…

linux修改內核實現禁止被ping(隨手記)

概述 Linux默認允許被ping。其主要決定因素為: 內核參數防火墻(iptables/firewall) 以上的決定因素是與的關系,即需要均滿足。 因此,修改linux禁被ping有以上兩種方法可以實現。 修改內核文件使禁ping 1. 臨時生…

Windows環境安裝Redis和Redis Desktop Manager圖文詳解教程

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Redis概述 Redis是一個開源的高性能鍵值對數據庫,以其卓越的讀寫速度而著稱,廣泛用于數據庫、緩存和消息代理。它主要將數據存儲在內存中&#xff0…

C++初學者指南-5.標準庫(第一部分)--迭代器

C初學者指南-5.標準庫(第一部分)–迭代器 Iterators 文章目錄 C初學者指南-5.標準庫(第一部分)--迭代器 Iterators1.默認正向迭代器2.反向迭代器3.基于迭代器的循環4.示例:交換相鄰的一對元素5.迭代器范圍6.迭代器范圍中的元素數量7. 總結:迭代器 指向某…

護網在即,知攻善防助力每一位安服仔~

前言 是不是已經有師傅進場了呢~ 是不是有安服🐒在值守呢~ 您是不是被網上眼花繚亂的常用應急響應工具而煩惱呢? 何以解憂?唯有知攻善防! 創作起源: 駐場、護網等,有的客戶現場只允許用客戶機器&…

Python網絡爬蟲:Scrapy框架的全面解析

Python網絡爬蟲:Scrapy框架的全面解析 一、引言 在當今互聯網的時代,數據是最重要的資源之一。為了獲取這些數據,我們經常需要編寫網絡爬蟲來從各種網站上抓取信息。Python作為一種強大的編程語言,擁有許多用于網絡爬蟲的工具和庫…

puppeteer 爬蟲初探

1. puppeteer 和 puppeteer-core 安裝 puppeteer 會默認下載一個最新版本的 chrome 瀏覽器; 安裝 puppeteer-core ,不會安裝 chrome, 若要程序打開瀏覽器運行時,需手動指定電腦系統安裝的 chrome 瀏覽器路徑; 2. puppeteer-core …

按鍵控制LED流水燈模式定時器時鐘

目錄 1.定時器 2. STC89C52定時器資源 3.定時器框圖 4. 定時器工作模式 5.中斷系統 1)介紹 2)流程圖:?編輯 3)STC89C52中斷資源 4)定時器和中斷系統 5)定時器的相關寄存器 6.按鍵控制LED流水燈模…

一個最簡單的comsol斜坡穩定性分析例子——詳細步驟

一個最簡單的comsol斜坡穩定性分析例子——詳細步驟 標準模型例子—詳細步驟 線彈性模型下的地應力平衡預應力與預應變、土壤塑性和安全系數求解的輔助掃描

七月記錄上半

7.5 運行mysql腳本 mysql -u root -p 數據庫名 < 腳本名 7.6 使用screen在服務器后臺長期運行一個程序&#xff1a; screen -S 窗口名&#xff1a;創建窗口 執行程序腳本 ctrlad&#xff1a;退出窗口 screen -ls &#xff1a;查看所有窗口 screen -r 窗口號 &#…

SpringBoot整合Easy-Es最佳實踐

文章目錄 1.1 部署ES和Kibana1.2 SpringBoot整合ES及配置1.2.1 引入相關依賴1.2.2 YML相關配置 1.3 索引CRUD1.3.1 索引托管自動擋1.3.1.1 配置實體模板1.3.1.2 配置啟動模式 1.3.2 索引手動擋1.3.2.1 配置啟動模式1.3.2.2 配置實體模板1.3.2.3 創建索引1.3.2.4 查詢索引1.3.2.…

【INTEL(ALTERA)】為什么在設計遷移后,無法在Nios II BSP 編輯器中找到 DDR3 作為內存區域

目錄 說明 解決方法 說明 將設計從 Quartus II 14.1 及以下遷移到 Quartus prime 17.0 時&#xff0c;DDR3 不再被識別為Nios II BSP 編輯器區域中的內存區域。 解決方法 遷移設計后&#xff0c;從 Qsys 設計中移除 DDR3 IP&#xff0c;然后將其再次添加。生成 Qsys 文件后…

車牌號查車輛信息-車牌號查車輛信息接口-汽車API接口

接口簡介&#xff1a;輸入車牌號&#xff0c;返回車輛相關信息&#xff08;無車主信息&#xff09;。初始登記日期、上險日期、保險到期時間、車架號、品牌這些數據會返回&#xff0c;其他數據不一定全部返回&#xff0c;,詳細參數請查看返回接口文檔 一般在新車上險或過戶后第…

微信小程序消息通知(一次訂閱)

在微信公眾平臺配置通知模版 通過wx.login獲取code發送給后端 let that this // 登陸codewx.login({success: function (res) {if (res.code) {// 發送code到后端換取openid和session_keythat.setData({openCode: res.code})console.log(that.data.openCode, openCode);// 調…

數學系C++(六七)

目錄 * &指針與地址 void指針 指針可以等于&#xff1a; const 指向常量的指針 const int *px 常指針 int * const px 指向常量的常指針const 類型標識符 * const 指針名 指針加減&#xff1a; 指針恒等式 函數指針【待續】 指針型函數&#xff1a; 指向函數的…