LEARNING LOG

第 5 课:两阶段经典检测器(Faster R-CNN 底层全流程)

  • 目标检测
  • Faster-RCNN
  • RPN
  • RoIAlign
  • NMS后处理

[!info] 知识库导航 [[00_目标检测知识库总览_MOC|🏠 返回知识库总览 (MOC)]] | ⬅️ [[Lesson04_ViT_and_Swin|第04讲]] | ➡️ [[Lesson06_Feature_Pyramids|第06讲:特征金字塔]] | 💻 [[faster_rcnn_modules.py|配套代码:RPN与RoIAlign]]

学习要点:掌握两阶段检测演进脉络(R-CNN 到 Faster R-CNN)、RPN 锚框机制与边界框回归推导、RoI Align 连续双线性插值量化消除说明、Cascade R-CNN 级联重采样机理以及 Query-Based 范式跃迁(DETR/RT-DETR 匈牙利二分图匹配算法代数说明)。


0.0 参数与符号对照字典

在两阶段与基于 Query 的检测算法体系中,以下术语与符号构成了核心概念基础:

符号 / 术语英文全称物理机理与代数定义工程设计直觉
SS\mathbf{SS}Selective Search(选择性搜索)基于色彩、纹理分层合并生成候选区域的 CPU 启发式聚类算法传统无监督低阶几何超像素聚合算法。
RoI\mathbf{RoI}Region of Interest(感兴趣区域)前端网络输出的高置信度待分类矩形候选特征区域潜在前景目标的空间特征切片。
Anchor\mathbf{Anchor}Anchor Box(先验锚框)特征图每个空间网格点上预设的多尺度、多长宽比先验基准矩形空间离散参考基准网格,用于参数化回归偏移量。
RPN\mathbf{RPN}Region Proposal Network密集生成目标候选框并完成粗粒度二分类的轻量级全卷积子网络将提框任务下沉至 GPU 端到端并行计算图中的核心枢纽。
RoI Pooling\mathbf{RoI\ Pooling}Region of Interest Pooling将任意尺寸 RoI 映射到固定分辨率(如 7×77\times7)的离散最大池化层传统固定尺寸空间重采样层,存在量化截断误差。
RoI Align\mathbf{RoI\ Align}Region of Interest Align减少坐标四舍五入量化取整,采用四点双线性插值进行连续坐标采样保持空间坐标与特征采样位置的一致性。
tx,ty,tw,th\mathbf{t_x, t_y, t_w, t_h}Regression Offsets预测边界框相对于先验 Anchor 的归一化平移比例与对数宽高放缩参数消除大尺度与小尺度在空间位移量纲上的优化差异。
Smooth L1\mathbf{Smooth\ L_1}Smooth L1 Loss结合 L1 稳定性与 L2 光滑梯度的鲁棒边界框回归损失函数误差极大时约束梯度上限为 1,误差小时平滑收敛。
Object Query\mathbf{Object\ Query}Object Query(目标查询向量)Transformer 检测器中一组可学习的位置嵌入向量,代表候选槽位解耦候选区域与稠密网格先验,实现稀疏集合预测。
σ\mathbf{\sigma}Bipartite Matching Permutation匈牙利算法求解的预测框与标注框之间的一对一双射排列置换系统地摆脱启发式后处理 NMS,实现端到端免筛选输出。

0.1 核心机制与架构精要速览

1. 两阶段检测计算范式演进(R-CNN ➔ Fast ➔ Faster R-CNN)

  • R-CNN(多阶段分立):依赖 CPU 启发式算法(Selective Search)生成候选区域,每个候选框均需缩放并独立输入 CNN 提取特征,重复计算较多。早期论文中的耗时数字与硬件、输入尺寸和实现有关,不能直接作为通用速度结论。
  • Fast R-CNN(整图特征共享):整张图像仅输入 CNN 进行单次前向特征提取,利用 RoI Pooling 截取候选框对应特征区域,共享骨干网络计算;候选框生成仍可能受制于 CPU 处理。
  • Faster R-CNN(RPN 候选区域生成):引入区域建议网络(RPN),将候选框生成集成到特征提取网络中,减少了外部候选区域生成步骤;实际速度仍取决于骨干网络、输入尺寸和硬件配置。

2. 区域建议网络与先验锚框(RPN & Anchors)

  • 机制:在卷积特征图各空间网格点预先设定多尺度、多长宽比的 Anchor 盒(通常为 3 种尺度 ×\times 3 种比例 = 9 个锚框),通过轻量级全卷积头并行预测前景/背景分类概率与边界框微调偏移量。
  • 核心收益:利用高层卷积特征的丰富语义高效筛选候选区域,以极小参数开销替代了低效的传统人工规则提框算法。

3. 候选区域特征提取:从 RoI Pooling 到 RoI Align

  • RoI Pooling 的空间量化缺陷:在将候选框空间映射到特征图及网格均分时,会进行离散取整(Quantization),导致特征采样位置发生偏移,对精细定位和小目标检测可能不利。
  • RoI Align 的连续坐标采样:
    • 机制:取消所有量化取整操作,完整保留浮点连续坐标;在每个划分单元内设置采样点,利用双线性插值(Bilinear Interpolation)计算特征值。
    • 核心收益:减少空间量化误差与特征错位,定位收益需要结合数据集、训练配置和评测协议验证。

一、 两阶段检测范式的演化脉络

R-CNN (2014)                  Fast R-CNN (2015)                Faster R-CNN (2015)
[CPU 提取 2000 个框]          [CPU 提取 2000 个框]             [GPU RPN 神经网络自己提框]
       ↓                              ↓                                    ↓
[每张图处理大量候选框]        [整张图只提取一次特征图]      [RPN 在特征图上生成候选框]
       ↓                              ↓                                    ↓
耗时:取决于论文设置与硬件   耗时:仍受候选框生成影响        耗时:取决于骨干、输入和硬件

1.1 区域建议网络(RPN)底层机理

RPN 是在骨干网特征图上滑动的全卷积轻量头:

  1. 滑动特征提取:采用 3×33\times3 卷积保持空间分辨率不变,将特征通道映射至中间维度(如 512)。
  2. 双分支分类与回归预测:
    • 分类分支(1×11\times1 卷积):输出 2k2k 个通道,预测每个 Anchor 为前景与背景的二分类 logits(k=9k=9);
    • 回归分支(1×11\times1 卷积):输出 4k4k 个通道,预测每个 Anchor 相对于基准几何的平移与缩放参数 [tx,ty,tw,th][t_x, t_y, t_w, t_h]。

1.2 边界框回归的对数空间参数化推导

设 Anchor 坐标为 (xa,ya,wa,ha)(x_a, y_a, w_a, h_a),标注目标坐标为 (x∗,y∗,w∗,h∗)(x^*, y^*, w^*, h^*)。网络回归目标定义为:

tx∗=x∗−xawa,ty∗=y∗−yahat_x^* = \frac{x^* - x_a}{w_a}, \quad t_y^* = \frac{y^* - y_a}{h_a}

tw∗=ln⁡(w∗wa),th∗=ln⁡(h∗ha)t_w^* = \ln\left( \frac{w^*}{w_a} \right), \quad t_h^* = \ln\left( \frac{h^*}{h_a} \right)

  • 物理与数值机理:
    • 平移偏差除以先验宽高度,使得不同尺度的目标平移量在相同尺度空间内归一化,具备尺度不变性;
    • 宽高度采用自然对数 ln⁡\ln 映射,迫使神经网络预测值在无界实数域 (−∞,+∞)(-\infty, +\infty) 内自由优化,而反算回几何空间时通过指数运算 exp⁡(tw)\exp(t_w) 严格保证尺度恒大于 0,避免出现非物理负宽高度。

二、 空间量化误差消除:从 RoI Pooling 到 RoI Align

2.1 RoI Pooling 的两次离散截断误差

假设输入原图为 800×800800 \times 800,骨干网络步长 S=16S = 16,输入 RoI 在原图上的连续坐标为 [x1,y1,x2,y2]=[10,10,620,620][x_1, y_1, x_2, y_2] = [10, 10, 620, 620]:

  1. 第一次量化(空间映射下采样):

    x1,feat=⌊10/16⌋=⌊0.625⌋=0x_{1,\text{feat}} = \lfloor 10 / 16 \rfloor = \lfloor 0.625 \rfloor = 0 x2,feat=⌊620/16⌋=⌊38.75⌋=38x_{2,\text{feat}} = \lfloor 620 / 16 \rfloor = \lfloor 38.75 \rfloor = 38

    此时,实际映射产生的偏差达 0.750.75 个特征图像素。映射回原图对应 0.75×16=12 个像素0.75 \times 16 = \mathbf{12 \text{ 个像素}} 的严重空间漂移!

  2. 第二次量化(划分 7×77\times7 池化格点): 候选区宽度为 38−0=3838 - 0 = 38 像素,划分为 7 等份:

    bin_width=⌊38/7⌋=⌊5.428⌋=5\text{bin\_width} = \lfloor 38 / 7 \rfloor = \lfloor 5.428 \rfloor = 5

    每个 bin 再次被截断为 5 像素,末端 bin 产生长达数像素的累积不对称变形。

2.2 RoI Align 的连续坐标双线性采样

RoI Align 坚决抛弃所有 ⌊… ⌋\lfloor \dots \rfloor 取整操作:

  1. 全浮点坐标映射:x1,feat=0.625,x2,feat=38.75x_{1,\text{feat}} = 0.625, x_{2,\text{feat}} = 38.75,特征图候选区长宽严格为 38.12538.125。

  2. 规则浮点网格分割:每个 bin 的尺寸精确为 38.1257≈5.446\frac{38.125}{7} \approx 5.446 浮点数。

  3. 四双线性插值采样点(Bilinear Interpolation): 在每个划分的小单元内均匀采样 4 个内部连续点 (xs,ys)(x_s, y_s)。对于每个采样点,通过相邻 4 个整数像素点执行连续加权双线性插值:

    f(xs,ys)=∑i,j∈{0,1}(1−∣xs−xi∣)(1−∣ys−yj∣)f(xi,yj)f(x_s, y_s) = \sum_{i, j \in \{0, 1\}} (1 - |x_s - x_i|) (1 - |y_s - y_j|) f(x_i, y_j)
  4. 最大值/均值聚合:将 4 个插值点的特征平均作为该 bin 的输出。该操作保证了整个空间反向传播对坐标的偏导数处处连续可微。


三、 级联重采样:Cascade R-CNN 架构机理

两阶段检测在追求更高精度的 mAP75\text{mAP}_{75} 或 mAP90\text{mAP}_{90} 时面临基础架构悖论:

  • 低阈值训练(IoU=0.5):正样本相对充足,但候选框的几何贴合度要求较低,在更严格的测试阈值下可能限制定位精度;
  • 高阈值训练(IoU=0.7):正样本数量可能减少,训练更容易受到样本分布和过拟合的影响。
      输入特征图
          │
          ├───> [ Stage 1 (IoU=0.5) ] ──> 粗调 BBox 1
          │             │
          │             ▼
          ├───> [ Stage 2 (IoU=0.6) ] ──> 精调 BBox 2
          │             │
          │             ▼
          └───> [ Stage 3 (IoU=0.7) ] ──> 高精 BBox 3

3.1 渐进式多阶段级联对齐定理

Cascade R-CNN 采用顺序级联结构:

  1. 阶段 1(u1=0.5u_1 = 0.5):输入 RPN 生成的候选框,分类回归后输出候选框集合 B1\mathcal{B}_1。回归可能改善候选框与标注框的重叠度,具体分布需通过实验观察;
  2. 阶段 2(u2=0.6u_2 = 0.6):以 B1\mathcal{B}_1 为基准重新池化采样特征。由于输入质量已被抬高,此时采用较高阈值 u2=0.6u_2 = 0.6 筛选正样本依然能捕获充足数量的正例;
  3. 阶段 3(u3=0.7u_3 = 0.7):再次以阶段 2 输出的候选框重新采样并以 u3=0.7u_3 = 0.7 训练高精检测头。
  • 核心结论:逐阶段提高匹配阈值是一种缓解高精度回归与正样本数量矛盾的设计,收益需要按具体配置验证。

四、 Query-Based 范式跃迁:DETR 与实时 RT-DETR 机制

随着端到端视觉大模型演进,目标检测完成了从密集候选区(Anchor/Proposal)向稀疏目标查询(Object Queries)集合预测的范式革命。

4.1 DETR 匈牙利二分图匹配代数说明

传统检测器依赖 NMS 启发式抑制重复框,DETR 引入匈牙利算法求解全局最优二分图匹配(Bipartite Matching): 设模型输出固定数量为 NN 的预测集合 y^={y^i}i=1N\hat{y} = \{\hat{y}_i\}_{i=1}^N,标注目标集合为 yy(若目标数 M<NM < N,用无目标 ∅\emptyset 填充至 NN)。 定义匹配代价函数(Matching Cost):

Lmatch(yi,y^σ(i))=−1{ci≠∅}p^σ(i)(ci)+1{ci≠∅}Lbox(bi,b^σ(i))\mathcal{L}_{\text{match}}(y_i, \hat{y}_{\sigma(i)}) = - \mathbf{1}_{\{c_i \neq \emptyset\}} \hat{p}_{\sigma(i)}(c_i) + \mathbf{1}_{\{c_i \neq \emptyset\}} \mathcal{L}_{\text{box}}(b_i, \hat{b}_{\sigma(i)})

其中边界框代价结合了 L1 距离与 GIoU 损失:

Lbox(bi,b^)=λL1∥bi−b^∥1+λgiouLgiou(bi,b^)\mathcal{L}_{\text{box}}(b_i, \hat{b}) = \lambda_{\text{L1}} \lVert b_i - \hat{b} \rVert_1 + \lambda_{\text{giou}} \mathcal{L}_{\text{giou}}(b_i, \hat{b})

通过匈牙利算法求解最优一对一双射排列置换 σ^∈SN\hat{\sigma} \in \mathfrak{S}_N:

σ^=arg⁡min⁡σ∈SN∑i=1NLmatch(yi,y^σ(i))\hat{\sigma} = \arg\min_{\sigma \in \mathfrak{S}_N} \sum_{i=1}^{N} \mathcal{L}_{\text{match}}(y_i, \hat{y}_{\sigma(i)})

匹配完成后,网络反向传播损失函数为:

LHungarian(y,y^)=∑i=1N[−log⁡p^σ^(i)(ci)+1{ci≠∅}Lbox(bi,b^σ^(i))]\mathcal{L}_{\text{Hungarian}}(y, \hat{y}) = \sum_{i=1}^{N} \left[ -\log \hat{p}_{\hat{\sigma}(i)}(c_i) + \mathbf{1}_{\{c_i \neq \emptyset\}} \mathcal{L}_{\text{box}}(b_i, \hat{b}_{\hat{\sigma}(i)}) \right]
  • 核心作用:每个标注目标与预测候选框建立一对一匹配,减少重复预测的竞争;部分端到端实现可以在推理阶段减少对 NMS 的依赖,具体效果取决于模型结构与配置。

4.2 实时端到端 RT-DETR(Real-Time DETR)实现要点

传统 DETR 的 Transformer 编码器包含全局注意力,计算和训练成本较高;是否满足实时要求取决于实现、输入规模与硬件。 RT-DETR 提出了两大核心革新:

  1. 高效混合编码器(Efficient Hybrid Encoder):
    • 系统地摒弃昂贵的跨尺度自注意力多层堆叠,设计了跨尺度特征交互模块(CCFM);
    • 在高层(S5)引入局部轻量自注意力,在多尺度融合中采用高效卷积跨尺度聚合,兼顾大感受野与线性访存开销。
  2. 解耦 IoU 感知查询选择(Decoupled IoU-aware Query Selection):
    • 传统 DETR 的初值 Query 是随机初始化的,收敛缓慢;
    • RT-DETR 联合预测分类分数与边界框 IoU 质量分数,在编码器输出的稠密特征中挑选兼具高语义置信度与高几何定位一致性的特征点作为解码器初值 Query,有助于改善收敛速度;最终效果需要结合数据集、训练策略和硬件配置评估。

7. 本地运行记录

以下截图来自本机 PyTorch 环境中的当前轮执行记录;本课对应模块均为 PASS。

Faster R-CNN 模块

端到端检测流水线