Python----目標檢測(《基于區域提議網絡的實時目標檢測方法》和Faster R-CNN)

一、《基于區域提議網絡的實時目標檢測方法》

1.1、基本信息

  • 標題:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

  • 作者:任少卿(中國科學技術大學、微軟研究院)、何凱明(微軟研究院)、Ross Girshick(Facebook AI Research)、孫劍(微軟研究院)

  • 發表時間:2015年(會議版本為NIPS 2015)

  • 代碼開源:提供MATLAB和Python實現

MATLAB開源地址:

????????ShaoqingRen/faster_rcnn: Faster R-CNN

?Python開源地址

rbgirshick/py-faster-rcnn: Faster R-CNN (Python implementation) -- see https://github.com/ShaoqingRen/faster_rcnn for the official MATLAB version

1.2、主要內容

核心創新

????????區域建議網絡(RPN, Region Proposal Network)

????????????????一種全卷積網絡(FCN),直接在卷積特征圖上生成高質量的區域建議,與檢測網絡共享計算,顯著降低時間開銷。

????????????????引入錨點(anchors)機制:通過預定義的多個尺度和寬高比的參考框(如3種尺度×3種寬高比,共9種錨點),覆蓋不同物體大小和形狀,避免傳統圖像金字塔或濾波器金字塔的計算冗余。

網絡架構

????????端到端訓練:RPN與Fast R-CNN共享卷積層,通過交替訓練策略(4步訓練)聯合優化:

????????????????訓練RPN生成建議;

????????????????用RPN建議訓練Fast R-CNN;

????????????????固定共享層,微調RPN;

????????????????固定共享層,微調Fast R-CNN。

????????多任務損失函數:結合分類損失(物體/非物體)和回歸損失(邊界框修正)。

性能優勢

????????速度:VGG-16模型在GPU上達到5幀/秒(包括所有步驟),ZF模型達17幀/秒。

????????精度:在PASCAL VOC 2007/2012、MS COCO等數據集上取得當時最優結果(如VOC 2007測試集mAP 73.2%)。

1.3、作用影響?

技術突破

????????首次實現端到端的實時級物體檢測框架,解決了區域建議的計算瓶頸問題。

????????提出錨點機制共享卷積特征設計,成為后續檢測模型(如Mask R-CNN、YOLO系列)的重要參考。

競賽與應用

????????ILSVRC & COCO 2015:作為基礎模型助力多項競賽奪冠(檢測、定位、分割等)。

????????工業應用:被Pinterest等公司用于推薦系統,提升用戶交互效率。

學術影響

????????推動了基于深度學習的物體檢測研究,啟發了3D檢測、實例分割、圖像描述等方向的工作。結合更深的網絡(如ResNet-101)后,性能進一步提升(COCO數據集mAP達59.0%)。

開源貢獻

????????公開的代碼和預訓練模型成為學術界和工業界的基準工具,加速了后續研究的迭代與優化。

原論文地址:

[1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

二、Faster R-CNN

與Fast R-CNN的區別

????????由Shaoqing Ren, Kaiming He, Ross B. Girshick和Jian Sun在2015年提出 的,它是Fast R-CNN的改進版本。 其主要創新在于引入了區域建議網絡 (Region Proposal Network, RPN),使得整個目標檢測過程能夠在一個 神經網絡中完成,從而大幅提高了檢測效率和準確性。

????????backbone同樣使用VGGNet-16。

????????最先進的目標檢測網絡依賴于區域建議算法來假設目標位置。SPPnet [1] 和 Fast R-CNN [2] 等進展減少了這些檢測網絡的運行時間,但區域建議計算卻成為瓶頸。本文提出一種區域建議網絡(Region Proposal Network, RPN),該網絡與檢測網絡共享全圖像卷積特征,從而實現近乎零成本生成區域建議。RPN 是一種全卷積網絡,可在每個位置同時預測目標邊界和目標性分數(objectness score)。通過端到端訓練,RPN 能夠生成高質量區域建議,供 Fast R-CNN 進行檢測。我們進一步將 RPN 和 Fast R-CNN 合并為一個網絡(共享卷積特征),即用神經網絡的“注意力”機制術語來說,RPN 模塊告訴統一網絡需要關注的位置。對于極深的 VGG-16 模型 [3],我們的檢測系統在 GPU 上以 5 幀/秒的幀率運行(包含所有步驟),同時在 PASCAL VOC 2007、2012 和 MS COCO 數據集上僅需每圖 300 個建議即可達到最優檢測精度。在 ILSVRC 和 COCO 2015 競賽中,Faster R-CNN 和 RPN 是多個賽道第一名方案的基礎。代碼已開源。

????????關鍵詞:目標檢測,區域建議,卷積神經網絡。

2.1、Faster R-CNN的架構?

?Faster R-CNN的整體架構包括以下幾個主要部分:

????????1. 卷積神經網絡(CNN):將圖片輸入CNN得到輸入圖像的特征圖。

????????2. 區域建議網絡(RPN):生成候選區域(Region Proposals)。

????????3. RoI Pooling層:將RPN生成的候選區域映射到特征圖上,并通過池化 操作得到固定尺寸的特征。

????????4. 分類和回歸網絡:對RoI Pooling層輸出的特征進行分類和邊界框回歸。

2.2、實現流程?

特征提取

區域建議網絡(RPN)

候選區域的篩選

RoI Pooling

分類和回歸

特征提取

????????輸入圖像首先通過一個預訓練的卷積神經網絡(如VGG-16)來提取特征 圖。這部分和Fast R-CNN相同,通常稱為backbone。?

區域建議網絡(RPN)?

?

????????上圖中:k是anchor boxes個數,2k是分類算法的兩個概率分數(前景和 背景),4k是每個anchor的邊界框回歸參數,256-d是256 Dimension, 即2013年AlexNet優化ZF的最后一層卷積的通道數,2014年的VGGNet是 512-d。

????????RPN是Faster R-CNN的核心創新部分。它在特征圖上滑動一個小的網絡窗 口,以生成候選區域。具體步驟如下:

????????滑動窗口:在特征圖上使用一個3x3的滑動窗口,生成一個256-d的特 征圖。

????????錨框(Anchor Boxes):每個滑動窗口中心點生成一組錨框(anchor boxes),這些錨框具有不同的尺度和縱橫比。

????????回歸和分類:對于每個錨框,RPN輸出兩個預測:

????????????????一個是該錨框是目標的概率(背景/前景)。

????????????????另一個是錨框的調整參數(回歸偏移量)。

?

滑動窗口

????????在特征圖上用3x3的滑動窗口進行滑動,每滑動到一個地方,就對應原圖的 一個中心點的位置。

如何將特征圖對應中心點的位置呢?

????????答:原圖的寬度/特征圖的寬度取整,得到x軸縮放比例,那么特征圖 上x軸第三個位置的黑色中心點對應原圖上x軸的3*縮放比例。高度(y 軸)同理。

????????以原圖為中心點計算k個anchor Boxes。

錨框(Anchor Boxes)

????????每個滑動窗口中心點生成一組錨框(anchor boxes),這些錨框具有不同 的長寬尺度(128像素,256像素,512像素)和縱橫比(1:1,2:1,1:2) 共九個,如上圖與下圖顯示了其中三個。

回歸和分類?

--------------------------------------------------------------------------------------------------------------------------------?

感受野

?感受野(Receptive Field),指的是神經網絡中神經元“看到的”輸入區域,在卷積神 經網絡中,feature map上某個元素的計算受輸入圖像上某個區域的影響,這個區域 即該元素的感受野。

? ? ? ? 卷積神經網絡中,越深層的神經元看到的輸入區域越大,如下圖所示,卷積核kernel size 均為3×3,stride均為1,綠色標記的是Layer2每個神經元看到的區域,黃色標記 的是Layer3 看到的區域,具體地,Layer2每個神經元可看到Layer1上3×3 大小的區 域,Layer3 每個神經元看到Layer2 上3×3 大小的區域,該區域可以又看到Layer1上 5×5 大小的區域。

? ? ? ? 所以,感受野是個相對概念,某層feature map上的元素看到前面不同層上的區域范 圍是不同的,通常在不特殊指定的情況下,感受野指的是看到輸入圖像上的區域。

--------------------------------------------------------------------------------------------------------------------------------?

Anchor Box

????????Anchor Box中可能包含前景,也可能不包含前景,所以2k scores意味著2 個分數概率,每2個為一組對應一個Anchor Box,前一個為背景的概率, 后一個為前景的概率,這里前景并不判斷它是什么(例如:person、car 等),只看是否包含前景,每個滑動窗口有18個Anchor Boxes。

????????4k coordinates意味著4個邊界框回歸參數,每4個為一組對應一個Anchor Box,每個滑動窗口有36個Anchor Boxes。

感受野與Anchor Box的關系:

????????他們沒有直接的關系,在AlexNet的改進版本ZF中,輸出的3x3的 窗口對應的原圖上的感受野為171;在VGGNet中,輸出的3x3的窗口 對應的原圖上的感受野為228。?

為什么小的感受野可以預測更大的(256或者512)目標的邊界框??

????????作者的文章中提到:“We note that our algorithm allows predictions that are larger than the underlying receptive field. Such predictions are not impossible—one may still roughly infer the extent of an object if only the middle of the object is visible.”, 即:我們注意到,我們的算法允許比潛在感受野更大的預測。這樣的 預測并非不可能——如果只有物體的中間可見,人們仍然可以大致推 斷出物體的范圍。也就是說:當我們看到物體的一部分時,就大致可 以判斷物體的范圍了,實際上表現出來的也是這個結論。

?正負樣本

????????一張圖上有上萬個Anchor Box,隨機抽取256個Anchor Box去訓練,這 256中正負樣本比例是1:1,如果正樣本不夠128個,那么剩下的就是256 正樣本=負樣本,即如果只有100個正樣本,那么就用156的負樣本,保證 整體數量256。?

正樣本選擇方式:

????????Anchor Box與GT BOX的IoU大于0.7即為正樣本。

????????Anchor Box與GT BOX的IoU最大的那個即為正樣本。

負樣本選擇方式:

????????Anchor Box與GT BOX的IoU小于0.3即為負樣本。

????????不是正樣本和負樣本的其它Anchor Box,丟棄。

RPN的損失函數

2.3、分類損失

????????但是需要注意的是:二分類交叉熵損失只需要一個x就可以得到二分類的結 果,多分類的交叉熵損失需要兩個x才可以得到二分類結果,從論文中看, scores是2k個,也就意味這論文使用的是多分類交叉熵,二分類交叉熵只 需要k個即可。但是這個不影響結果,該分還是能分開的。

2.4、回歸損失?

?

候選區域的篩選

????????RPN生成大量的候選區域,通過非極大值抑制(NMS)和去除低得分候選 區域的方法,篩選出一部分高質量的候選區域。??

RoI Pooling

????????將篩選出的候選區域映射到特征圖上,通過RoI Pooling層將不同大小的候 選區域變換為固定大小的特征向量 。

分類和回歸

????????最后,經過RoI Pooling層的特征向量通過全連接層進行分類(確定目標類 別)和回歸(調整候選框)。這里的分類和回歸與Fast R-CNN中使用的相同。?

三、訓練

????????正常情況下,應該將RPN網絡的損失和Fast R-CNN中的損失加起來,然后 一起進行反向傳播。

????????原論文中采用分別訓練RPN以及Fast R-CNN的方法

????????????????1. 利用lmageNet預訓練分類模型初始化前置卷積網絡層參數,并開始單 獨訓練RPN網絡參數;

????????????????2. 固定RPN網絡獨有的卷積層以及全連接層參數,再利用ImageNet預訓 練分類模型初始化前置卷積網絡參數,并利用RPN網絡生成的目標建議 框去訓練FastRCNN網絡參數。

????????????????3. 固定利用FastRCNN訓練好的前置卷積網絡層參數,去微調RPN網絡獨 有的卷積層以及全連接層參數。

????????????????4. 同樣保持固定前置卷積網絡層參數,去微調FastRCNN網絡的全連接層 參數。最后RPN網絡與FastRCNN網絡共享前置卷積網絡層參數,構成 一個統一網絡。

?

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

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

相關文章

吳恩達講解MCP基礎概念

簡介 MCP 是一個開放協議 標準化了您的語言模型應用如何獲取工具和數據資源的上下文。基于客戶端-服務器架構,它定義了您的語言模型應用中的MCP客戶端與MCP服務器之間的通信方式,MCP服務器提供工具 數據資源和提示模板給您的應用,自Anthropic于2024年11月推出MCP以來,MCP生…

Git入門到精通:30分鐘掌握核心技巧

目錄 一、基礎理論片 Git簡介 Git安裝 Git倉庫 Git基本命令用法 倉庫別名 二、實操命令篇 遠程分支 分支的新建和合并 實操演示 1 本地新建倉庫 2 gitee新建倉庫 3 建立關系 4 新建分支 5 開發新功能 6 推送新分支 7 合并新分支到主分支 三、可視化工具篇 G…

零基礎設計模式——結構型模式 - 代理模式

第三部分:結構型模式 - 代理模式 (Proxy Pattern) 在學習了享元模式如何通過共享對象來優化資源使用后,我們來探討結構型模式的最后一個模式——代理模式。代理模式為另一個對象提供一個替身或占位符以控制對這個對象的訪問。 核心思想:為其…

【OSS】 前端如何直接上傳到OSS 上返回https鏈接,如果做到OSS圖片資源加密訪問

使用阿里云OSS(對象存儲服務)進行前端直接上傳并返回HTTPS鏈接,同時實現圖片資源的加密訪問,可以通過以下步驟實現: 前端直接上傳到OSS并返回HTTPS鏈接 設置OSS Bucket: 確保你的OSS Bucket已創建&#xf…

TDenigne 集群可視化管理

可視化管理工具 為方便用戶更高效地使用和管理 TDengine,TDengine 3.0 版本推出了一個全新的可視化組件 taosExplorer。這個組件旨在幫助用戶在不熟悉 SQL 的情況下,也能輕松管理 TDengine 集群。通過 taosExplorer,用戶可以輕松查看 TDengi…

Centos7安裝gitlab

環境準備: 操作系統:Centos7 內存:2G以上 磁盤:50G 安全:關閉防火墻,selinux 1、安裝GitLab所需依賴 yum -y install policycoreutils openssh-server openssh-clients postfix 2、設置postfix開機自啟…

【前端面經】云智慧一面

寫在前面:面經只是記錄博主遇到的題目。每題的答案在編寫文檔的時候已經有問過deepseek,它只是一種比較普世的答案,要學得深入還是靠自己 Q:手撕代碼,兩個有序數組排序 A: function mysort(arr1, arr2) {…

Leetcode 3568. Minimum Moves to Clean the Classroom

Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解題思路2. 代碼實現 題目鏈接:3568. Minimum Moves to Clean the Classroom 1. 解題思路 這一題我的核心思路就是廣度優先遍歷遍歷剪枝。 顯然,我們可以給出一個廣度優先遍歷來給出所有可能…

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于創建 RESTful Web 服務的核心注解。 RestController 核心知識點 REST 作用: RestController 是一個方便的組合注解,它結合了 Controller 和 ResponseBody 兩個注解。 Controller: 將類標記為一個控制器,使其能夠處理…

【計算機網絡】Linux下簡單的UDP服務器(超詳細)

套接字接口 我們把服務器封裝成一個類,當我們定義出一個服務器對象后需要馬上初始化服務器,而初始化服務器需要做的第一件事就是創建套接字。 🌎socket函數 這是Linux中創建套接字的系統調用,函數原型如下: int socket(int domain, int typ…

Fashion-MNIST LeNet訓練

前面使用線性神經網絡softmax 和 多層感知機進行圖像分類,本次我們使用LeNet 卷積神經網絡進行 訓練,期望能捕捉到圖像中的圖像結構信息,提高識別精度: import torch import torchvision from torchvision import transforms f…

EasyRTC嵌入式音視頻通信SDK助力1v1實時音視頻通話全場景應用

一、方案概述? 在數字化通信需求日益增長的今天,EasyRTC作為一款全平臺互通的實時視頻通話方案,實現了設備與平臺間的跨端連接。它支持微信小程序、APP、PC客戶端等多端協同,開發者通過該方案可快速搭建1v1實時音視頻通信系統,適…

查看make命令執行后涉及的預編譯宏定義的值

要查看 make 命令執行后涉及的預編譯宏定義(如 -D 定義的宏)及其值,可以采用以下方法: 1. 查看 Makefile 中的宏定義 直接檢查 Makefile 或相關構建腳本(如 configure、CMakeLists.txt),尋找 -…

【C/C++】面試常考題目

面試中最常考的數據結構與算法題,適合作為刷題的第一階段重點。 ? 分類 & 推薦題目列表(精選 70 道核心題) 一、數組 & 字符串(共 15 題) 題目類型LeetCode編號兩數之和哈希表#1盛最多水的容器雙指針#11三數…

【芯片學習】555

一、引腳作用 二、原理圖 三、等效原理圖 1.比較器 同相輸入端大于反相輸入端,輸出高電平,反之亦然 2.三極管 給它輸入高電平就可以導通 3.模擬電路部分 4.數字電路部分 這部分的核心是RS觸發器,R-reset代表0,set是置位代表1&am…

Linux《文件系統》

在之前的系統IO當中已經了解了“內存”級別的文件操作,了解了文件描述符、重定向、緩沖區等概念,在了解了這些的知識之后還封裝出了我們自己的libc庫。接下來在本篇當中將會將視角從內存轉向磁盤,研究文件在內存當中是如何進行存儲的&#xf…

Java-代碼段-http接口調用自身服務中的其他http接口(mock)-并建立socket連接發送和接收報文實例

最新版本更新 https://code.jiangjiesheng.cn/article/367?fromcsdn 推薦 《高并發 & 微服務 & 性能調優實戰案例100講 源碼下載》 1. controller入口 ApiOperation("模擬平臺端現場機socket交互過程,需要Authorization")PostMapping(path "/testS…

基于遞歸思想的系統架構圖自動化生成實踐

文章目錄 一、核心思想解析二、關鍵技術實現1. 動態布局算法2. 樣式規范集成3. MCP服務封裝三、典型應用場景四、最佳實踐建議五、擴展方向一、核心思想解析 本系統通過遞歸算法實現了Markdown層級結構到PPTX架構圖的自動轉換,其核心設計思想包含兩個維度: 數據結構遞歸:將…

Python包管理器 uv替代conda?

有人問:python的包管理器uv可以替代conda嗎? 搞數據和算法的把conda當寶貝,其他的場景能替代。 Python的包管理器有很多,pip是原配,uv是后起之秀,conda則主打數據科學。 uv替代pip似乎只是時間問題了,它…

使用pnpm、vite搭建Phaserjs的開發環境

首先,確保你已經安裝了 Node.js 和 npm。然后按照以下步驟操作: 一、使用pnpm初始化一個新的 Vite 項目 pnpm create vite 輸入名字 選擇模板,這里我選擇Vanilla,也可以選擇其他的比如vue 選擇語言 項目新建完成 二、安裝相關依賴 進入項…