目標檢測系列文章
第一章 R-CNN
第二篇 Fast R-CNN
目錄
- 目標檢測系列文章
- 📄 論文標題
- 🧠 論文邏輯梳理
- 1. 引言部分梳理 (動機與思想)
- 📝 三句話總結
- 🔍 方法邏輯梳理
- 🚀 關鍵創新點
- 🔗 方法流程圖
- 關鍵疑問解答
- Q1、 Anchor 的來源、生成與訓練中的作用?
- Q2 Anchor 尺寸大于感受野如何工作?
📄 論文標題
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
作者:Shaoqing Ren, Kaiming He, Ross Girshick(fast R-CNN作者), and Jian Sun
團隊:Microsoft Research
🧠 論文邏輯梳理
1. 引言部分梳理 (動機與思想)
Aspect | Description (Motivation / Core Idea) |
---|---|
問題背景 (Problem) | Fast R-CNN 已經很快了,但是它依賴的外部區域提議算法(如 Selective Search )運行在 CPU 上,速度很慢,成為了整個目標檢測系統的性能瓶頸。而且,區域提議的計算與下游的檢測網絡是分離的,沒有共享計算。 |
目標 (Goal) | 創建一個完全基于深度學習的、端到端的目標檢測系統。具體來說,要設計一個內部的區域提議網絡,使其能夠與檢測網絡共享卷積特征,從而消除外部區域提議的瓶頸,實現高速且統一的檢測框架。 |
核心思想 (Core Idea) | Faster R-CNN: 提出 區域提議網絡 (Region Proposal Network, RPN)。RPN 是一個小型全卷積網絡,它直接作用于主干網絡(如 VGG/ResNet)輸出的共享卷積特征圖上,利用 Anchors 高效地預測出物體邊界框提議及其“物體性”得分。這些提議隨后被送入 Fast R-CNN 檢測網絡(使用同一份共享特征圖)進行精確分類和位置修正。 |
核心假設 (Hypothesis) | 通過讓 RPN 與檢測網絡共享底層的卷積計算,并將區域提議也用神經網絡實現,可以構建一個統一、高效的框架,顯著提升目標檢測的速度(達到近實時),同時保持甚至提高檢測精度。 |
📝 三句話總結
方面 | 內容 |
---|---|
?發現的問題 |
|
💡提出的方法 (R-CNN) |
|
?該方案的局限性/可改進的點 |
|
🔍 方法邏輯梳理
Faster R-CNN 是一個高度整合的統一網絡。
-
模型輸入:
- 一張
RGB
圖像。(不再需要外部 RoIs)
- 一張
-
處理流程 (Unified Network):
- 共享主干網絡 (Shared Conv Backbone - Encoder 角色):
- 輸入: 整張圖像。
- 處理: 圖像通過一系列卷積和池化層(如
VGG
,ResNet
的conv
部分)。 - 輸出: 整張圖像的共享卷積特征圖 (Shared Feature Map)。
- 區域提議網絡 (Region Proposal Network - RPN - 特殊模塊):
- 輸入: 來自步驟 1 的共享特征圖。
- 處理:
- 在特征圖上滑動一個小型的卷積網絡(如 3x3 卷積)。
- 在滑窗的每個位置,考慮 k 個預定義的 Anchors (不同尺度面積(1282、2562、5122)、長寬比(0.5、1、2))。
- 通過兩個并行的 1x1 卷積(分類頭和回歸頭)對每個 Anchor 進行預測:
- 預測 2k 個物體性得分 (Objectness Scores:
object
vs.background
)。 - 預測 4k 個邊界框回歸偏移量 (relative to anchor)。
- 預測 2k 個物體性得分 (Objectness Scores:
- 基于物體性得分篩選
Anchors
,應用回歸偏移量修正坐標,得到初步的 Proposals。 - 對 Proposals 應用 NMS (非極大值抑制) 以減少冗余。【第一次使用NMS剔除多余的Anchors】
- 輸出: 一組候選區域 RoIs (例如 ~300 或 ~2000 個,坐標是相對于原始圖像的)。
- RoI Pooling / RoI Align 層 (特殊模塊):
- 輸入: 共享特征圖 (來自步驟 1) + RPN 生成的 RoIs (來自步驟 2)。
- 處理: 對每個 RoI,從共享特征圖中提取一個固定大小 (e.g., 7x7xC) 的特征圖塊。(
RoI Align
效果通常更好) - 輸出: 為每個 RoI 輸出一個固定大小的特征圖塊。
- 檢測頭 (Detection Head - Fast R-CNN 部分 - Decoder/Prediction 角色):
- 輸入: 來自
RoI Pooling/Align
的固定大小特征圖塊。 - 處理:
- 通過全連接層 (
FC
layers) 或卷積層進一步處理特征。 - 送入兩個并行的輸出層:
- Softmax 分類器 (輸出 K+1 類概率 p p p)。
- 邊界框回歸器 (輸出 K 類對應的 4 K 4K 4K 個回歸偏移量 t k t^k tk)。
- 通過全連接層 (
- 輸出: 對每個輸入的 RoI,輸出其最終的類別概率 p p p 和類別相關的回歸偏移量 t k t^k tk。
- 輸入: 來自
- 后處理 (Post-processing - NMS):
- 使用最終的類別分數和應用了回歸偏移量后的邊界框,再次進行
NMS
(通常按類別進行)。 - 輸出: 最終檢測結果列表。
- 使用最終的類別分數和應用了回歸偏移量后的邊界框,再次進行
- 共享主干網絡 (Shared Conv Backbone - Encoder 角色):
-
模型輸出:
- 圖像中檢測到的物體列表,每個物體包含:類別標簽、置信度分數、精修后的邊界框坐標。
-
訓練過程:
- 目標: 訓練 RPN 網絡學會生成高質量的 Proposals,同時訓練檢測頭學會對這些 Proposals 進行精確分類和定位。
- 損失函數: 聯合優化 RPN 的損失 ( L c l s R P N + λ 1 L r e g R P N L_{cls}^{RPN} + \lambda_1 L_{reg}^{RPN} LclsRPN?+λ1?LregRPN?) 和 Fast R-CNN 檢測頭的損失 ( L c l s F a s t + λ 2 [ u > 0 ] L r e g F a s t L_{cls}^{Fast} + \lambda_2 [u>0] L_{reg}^{Fast} LclsFast?+λ2?[u>0]LregFast?) 。總損失是這兩部分損失的和(可能有權重因子)。
- 訓練策略:
- 4步交替訓練 (Alternating Training - 原始論文提出): 比較復雜,步驟間有權重固定和微調。
- 訓練 RPN (用
ImageNet
預訓練模型初始化)。 - 訓練 Fast R-CNN 檢測網絡 (用
ImageNet
預訓練模型初始化,使用第1步 RPN 生成的 proposals)。此時 ConvNet 獨立訓練。 - 固定共享的 ConvNet 層,只微調 RPN 的獨有層。
- 固定共享的 ConvNet 層,只微調 Fast R-CNN 的獨有層 (
FCs
等)。
- 訓練 RPN (用
- 近似聯合訓練 (Approximate Joint Training - 更常用): 在一次前向傳播中計算 RPN 和 Fast R-CNN 的 proposals 和損失,然后將它們的損失加起來一起反向傳播更新所有權重(包括共享卷積層)。實現上有一些細節處理 RPN proposal 對后續 loss 的影響。
- 端到端聯合訓練 (End-to-End Joint Training): 一些現代框架支持更徹底的端到端訓練。
- 4步交替訓練 (Alternating Training - 原始論文提出): 比較復雜,步驟間有權重固定和微調。
🚀 關鍵創新點
-
創新點 1: 區域提議網絡 (Region Proposal Network - RPN)
- 為什么要這樣做? 為了擺脫對外部、緩慢、與網絡分離的區域提議算法(如
Selective Search
)的依賴。 - 不用它會怎樣? 目標檢測系統的速度會被區域提議步驟嚴重拖慢,無法實現高速檢測,且提議過程無法從深度特征學習中受益。RPN 是實現速度和整合的關鍵。
- 為什么要這樣做? 為了擺脫對外部、緩慢、與網絡分離的區域提議算法(如
-
創新點 2: 卷積特征共享 (Shared Convolutional Features)
- 為什么要這樣做? 區域提議和物體檢測都需要對圖像進行特征提取,分開做是巨大的計算浪費。這兩項任務可以基于相同的底層視覺特征。
- 不用它會怎樣? 計算成本會高得多(如 R-CNN 或即使是將 SS 搬上 GPU 但仍獨立計算的方案)。特征共享是 Faster R-CNN 實現效率飛躍的核心原因。
-
創新點 3: Anchor 機制
- 為什么要這樣做? 需要一種方法讓 RPN(一個相對簡單的全卷積網絡)能夠高效地在特征圖上直接預測出不同尺度、不同長寬比的物體提議。
- 不用它會怎樣? RPN 可能難以直接預測如此多樣化的邊界框。Anchor 提供了一組有效的、多樣的參考基準,極大地簡化了 RPN 的預測任務,使其可以在單一尺度的特征圖上工作,避免了圖像金字塔或濾波器金字塔的復雜性。
-
創新點 4: 統一網絡與端到端訓練趨勢
- 為什么要這樣做? 將整個目標檢測流程(除了
NMS
等后處理)盡可能地統一到一個深度網絡中,可以簡化系統、提高效率,并可能通過聯合優化提升性能。 - 不用它會怎樣? 系統會保持多階段、多模塊的狀態,訓練和部署更復雜,速度也受限。Faster R-CNN 代表了向更整合、更端到端的檢測系統邁出的決定性一步。
- 為什么要這樣做? 將整個目標檢測流程(除了
總結來說,Faster R-CNN 通過革命性的 RPN 和 Anchor 機制,并將 RPN 與 Fast R-CNN 檢測器基于共享的卷積特征進行整合,最終構建了一個高效、準確且相對統一的目標檢測框架,成為了后續許多現代檢測器的基礎。
🔗 方法流程圖
關鍵疑問解答
Q1、 Anchor 的來源、生成與訓練中的作用?
- 來源:
Anchors
是預先定義好的超參數 (不同的尺度Scales
和長寬比Aspect Ratios
),不是根據當前數據集實時生成的。其設定基于經驗或常見物體特性。 - 生成:
Anchors
概念上是在 CNN 輸出的最后一個特征圖的每一個空間位置上生成的。每個位置都有一整套 (k 個) 不同規格的Anchors
,它們的中心對應于特征圖位置映射回原圖的位置
。這個生成發生在每次前向傳播時。 - 訓練作用:
Anchors
作為參考基準。訓練RPN
的目標是:
1、分類: 判斷每個 Anchor 是否覆蓋了一個物體 (Objectness Score),通過與 Ground Truth Boxes 計算IoU
來標記Anchor (正/負/忽略樣本)
,并計算分類損失。
2、回歸: 對于被標記為正樣本的 Anchor,學習預測出將其精確調整到對應Ground Truth Box
所需的4 個偏移量 (dx, dy, dw, dh
),并計算回歸損失 (通常用 Smooth L1 Loss)。網絡學習的是預測“修正量”,而不是修改 Anchor 本身。
Q2 Anchor 尺寸大于感受野如何工作?
Anchor
是預測的參考框架,RPN
的預測是基于其感受野內的特征進行的。
網絡學習的是將感受野內的局部特征與“應該使用哪種規格的 Anchor”以及“應該如何對該 Anchor 進行相對調整”這兩者關聯起來。
即使感受野小于 Anchor
,內部特征也可能足夠指示一個大物體的存在及大致的調整方向。對于大物體,多個相鄰位置的預測會共同作用。【管中窺豹,可知豹外貌】