1. 引言

1.1 背景与发展脉络

目标检测是计算机视觉领域中的重要任务,它的目标是回答两个问题:图中有什么?这些物体在哪里?。这不仅要求模型能够识别目标的类别,还需要精确地定位目标的位置(即边框坐标)。相比图像分类任务,目标检测的难度显然更高。
目标检测显示图

早期的方法如 DPM(Deformable Part-based Model)基于手工特征和滑动窗口策略,计算量大、效果有限。随着深度学习的兴起,R-CNN 系列彻底改变了目标检测的发展路径。

1.2 从 R-CNN 到 Fast R-CNN 的演进简述

  1. R-CNN(2014):首次将卷积神经网络(CNN)引入目标检测。它使用 Selective Search 提取候选框,然后对每个框进行特征提取和分类。但其最大问题是速度慢,因为每个候选框都要单独跑一次 CNN。

  2. Fast R-CNN(2015):改进了 R-CNN 的结构,将整张图像只通过一次 CNN,然后使用 RoI Pooling 层从特征图中提取每个候选区域的特征。这样大大加快了速度。但它依然依赖 Selective Search 来生成候选框,仍然不是端到端的结构

于是,Faster R-CNN 在此基础上进一步发展,成为第一个真正意义上的端到端目标检测框架,引入了自己的区域提议机制——RPN(Region Proposal Network),实现了速度与精度的双提升。


2. 整体架构概览

2.1 Faster R-CNN 的总体流程图

Faster R-CNN 的整体结构可以分为两个主要阶段:

  1. 特征提取 + 候选区域生成(RPN)
  2. 候选区域分类与边框回归

简要流程如下:
Faster R-CNN

2.2 模块划分与任务职责

  1. 卷积神经网络(Backbone)

    • 任务:提取整张图像的深度特征
    • 常用模型:VGG16、ResNet 等
  2. 区域建议网络(RPN)

    • 任务:在特征图上滑动窗口,生成一系列潜在的目标候选框(称为 Anchor
    • 创新点:用 CNN 学出哪些 Anchor 有可能是目标,而不是靠人工规则(RPN网络替代传统Selective Search)。
  3. RoI Pooling 层

    • 任务:将不同大小的候选区域统一成固定大小的特征块,方便后续分类和回归
  4. 分类与回归分支

    • 任务:判断每个候选区域属于哪个类别(分类),并微调它的边框位置(回归)

总结一句话:Faster R-CNN 把“找目标”和“认目标”都集成进了一个统一的深度学习模型中,结构清晰、性能强大。

3. 核心模块解析

在 Faster R-CNN 中,整个目标检测流程由多个关键模块组成。每个模块都有特定的功能,共同完成从图像输入到目标识别与定位的任务。本节将依次介绍这四个核心模块。


3.1 特征提取网络(Backbone)

特征提取网络是 Faster R-CNN 的第一步,它的任务是将原始图像转化为高维的特征图。这些特征图保留了图像中的语义信息(例如:边缘、纹理、形状等),是后续目标检测模块的基础。

  • 常用的 Backbone 网络包括:
    • VGG16:结构简单,效果稳定,是早期常用的网络结构。
    • ResNet(如 ResNet-50、ResNet-101):引入了残差连接(Residual Connection),能够训练更深的网络,提取更强的特征。

举个例子:如果把整张图像比作一幅风景画,Backbone 网络就像是一位画家,通过观察提炼出“山、河、人”的轮廓和位置,方便后续处理。


3.2 区域建议网络(Region Proposal Network, RPN)

RPN 是 Faster R-CNN 的核心创新之一。它的任务是从特征图中自动生成一组可能包含目标的候选区域(Region Proposals),而不再依赖传统的 Selective Search 方法。

🧩 Anchor 机制
  • Anchor 是指预设的一组固定大小和长宽比的矩形框。
  • 每个位置点上都生成多个 Anchor(比如 3 个尺度 × 3 种比例 = 9 个 Anchor)。
  • RPN 会对每个 Anchor 判断两个问题:
    1. 这个框是不是目标?(分类任务
    2. 如果是目标,它的位置应该如何微调?(回归任务
      RPN
🔍 Softmax + Bounding Box Regression
  • Softmax:对每个 Anchor 进行前景/背景分类。
  • Bounding Box Regression:对 Anchor 的坐标进行微调,使之更贴近真实目标边框。

通俗理解:RPN 就像一位侦察兵,在地图上标出可能藏有“敌人”的区域,后面的模块再进一步确认和精确定位。


3.3 RoI Pooling 层

RPN 提供的候选框大小不一,而分类和回归模块要求输入是固定尺寸的。因此,需要将这些不同大小的区域,统一映射成相同尺寸的特征。

🎯 RoI Pooling
  • 将每个候选框映射到特征图上,然后划分成固定网格(如 7×7)。
  • 对每个网格区域进行 max pooling,最终得到固定维度的特征向量。
✅ RoI Align(Faster R-CNN 原始版本用的是 RoI Pooling,RoI Align 是后来的改进)
  • 消除了 RoI Pooling 中的量化误差。
  • 使用双线性插值保留更多位置信息,常用于 Mask R-CNN 中。

打个比方:RoI Pooling 就像是把不同大小的照片剪裁后放入同样大小的相框中,以便后面统一处理。


3.4 分类与回归子网络

在 RoI Pooling 层之后,提取到的固定维度特征会送入两个不同的分支:

🧠 分类分支(Classification Branch)
  • 判断每个区域属于哪个类别(如:人、车、猫、狗等)。
  • 使用 softmax 输出多个类别的概率分布。
📦 回归分支(Bounding Box Regression Branch)
  • 精确调整目标框的位置和大小,使预测框尽量接近真实框(ground truth)。
  • 输出为四个回归参数(中心点偏移、宽高缩放等)。

4. 关键创新点

Faster R-CNN 之所以在目标检测领域具有里程碑意义,核心原因就在于其提出的一系列创新,极大地提升了检测的速度与精度。本节我们将逐一讲解这些关键点。


4.1 引入 RPN:替代 Selective Search 的端到端建议区域生成

在传统的 R-CNN 或 Fast R-CNN 中,我们需要使用 Selective Search 来生成候选区域(Region Proposals),但它是一个独立的、耗时且不可学习的模块。

Faster R-CNN 直接在网络中引入了一个新的子网络——区域建议网络(Region Proposal Network, RPN),能够:

  • 端到端地生成候选框
  • 与检测网络共享卷积特征图
  • 速度极快,每张图可生成上千个候选框,且几乎不增加计算开销

通俗理解: 以前我们要靠人工手动挑选“可疑区域”,现在让神经网络自己学会“哪里可能有目标”。


4.2 网络共享特征图:提速与优化

Faster R-CNN 中的 RPN 与后续分类/回归网络共享卷积层,也就是说:

  • 整张图只做一次卷积提特征
  • RPN 和 Fast R-CNN (这里的Fast R-CNN指ROIHead部分)基于同一特征图工作

这种结构有两个好处:

  1. 加快速度:大大减少重复计算
  2. 端到端训练:整个网络可以联合优化,更准确

类比解释: 就像一个城市地图被扫描一遍后,交警、快递员和导游都用这张地图做各自的任务,而不是每人重新绘一遍。


4.3 Anchor-Based 区域建议机制

在 RPN 中,Faster R-CNN 引入了 Anchor(锚框)机制,它的思路是:

  • 在特征图的每个位置,预设多个不同尺度和长宽比的矩形框(anchor)
  • 网络学习每个 anchor 是否包含目标,并对其进行微调(regression)

Anchor 的出现解决了:

  • 不同目标大小不一的问题
  • 替代了滑动窗口的暴力搜索方式

打个比方: 就像在每个格子上放几个不同尺寸的相框,问网络“这几个框哪个最可能框到一个目标?”然后再微调到最合适的位置。


4.4 多任务损失函数的设计(分类 + 边框回归)

Faster R-CNN 的一个关键创新点在于使用了多任务损失函数,它将**目标分类(classification)边框回归(bounding box regression)**结合在一个统一的损失函数中,进行端到端的训练。

该损失函数在两个阶段中都存在:

  1. RPN 阶段:生成候选区域 proposal
  2. Fast R-CNN 阶段:对 proposal 进行分类与回归精调

🔹 第一阶段:RPN 多任务损失函数

RPN 的任务是:

  • 判断每个 anchor 是否包含物体(分类,前景/背景)
  • 对每个正样本 anchor 回归调整其位置(边框回归)

其损失函数如下:

L RPN ( p i , t i ) = 1 N cls ∑ i L cls ( p i , p i ∗ ) + λ ⋅ 1 N reg ∑ i p i ∗ L reg ( t i , t i ∗ ) L_{\text{RPN}}(p_i, t_i) = \frac{1}{N_{\text{cls}}} \sum_i L_{\text{cls}}(p_i, p_i^*) + \lambda \cdot \frac{1}{N_{\text{reg}}} \sum_i p_i^* L_{\text{reg}}(t_i, t_i^*) LRPN(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)

这个公式结构与 Fast R-CNN 类似,表示为:

  • L cls L_{\text{cls}} Lcls:二分类交叉熵损失(前景 / 背景)
  • L reg L_{\text{reg}} Lreg:Smooth L1 损失函数
  • p i ∗ p_i^* pi:Anchor 的标签(1 表示前景,0 表示背景)
  • t i ∗ , t i t_i^*, t_i ti,ti:Ground truth 与预测的边框调整值(tx, ty, tw, th)

其中,边框回归目标 t ∗ t^* t 的计算方式如下:

t x ∗ = x ∗ − x a w a , t y ∗ = y ∗ − y a h a , t w ∗ = log ⁡ ( w ∗ w a ) , t h ∗ = log ⁡ ( h ∗ h a ) \begin{aligned} t_x^* &= \frac{x^* - x_a}{w_a}, \quad & t_y^* &= \frac{y^* - y_a}{h_a}, \\ t_w^* &= \log\left(\frac{w^*}{w_a}\right), \quad & t_h^* &= \log\left(\frac{h^*}{h_a}\right) \end{aligned} txtw=waxxa,=log(waw),tyth=hayya,=log(hah)

其中:

  • ( x ∗ , y ∗ , w ∗ , h ∗ ) (x^*, y^*, w^*, h^*) (x,y,w,h):GT 边框坐标
  • ( x a , y a , w a , h a ) (x_a, y_a, w_a, h_a) (xa,ya,wa,ha):Anchor 的中心与尺寸
  • 目标:预测 t i t_i ti接近 t i ∗ t_i^* ti

注意:

  • 只有正样本 anchor(即 p i ∗ = 1 p_i^* = 1 pi=1)参与回归损失计算。
  • 每张图通常只随机选取 256 个 anchor 参与训练,以保证正负样本的平衡。

可以参考:Faster R-CNN的RPN位置回归损失


🔸 第二阶段:Fast R-CNN 多任务损失函数

Fast R-CNN 接收 RPN 提供的 proposal,对每个 proposal 进行更细粒度的分类和回归,使用如下损失:

L FastRCNN ( p i , t i ) = 1 N cls ∑ i L cls ( p i , p i ∗ ) + λ ⋅ 1 N reg ∑ i p i ∗ L reg ( t i , t i ∗ ) L_{\text{FastRCNN}}(p_i, t_i) = \frac{1}{N_{\text{cls}}} \sum_i L_{\text{cls}}(p_i, p_i^*) + \lambda \cdot \frac{1}{N_{\text{reg}}} \sum_i p_i^* L_{\text{reg}}(t_i, t_i^*) LFastRCNN(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)

这里:

  • 分类是多类 softmax 分类(如“猫”,“狗”,“人”以及背景)
  • 回归是对每一类都预测一个框(多类回归)

其中:

  • L cls ( p i , p i ∗ ) = − log ⁡ ( p i ( p i ∗ ) ) L_{\text{cls}}(p_i, p_i^*) = -\log(p_i^{(p_i^*)}) Lcls(pi,pi)=log(pi(pi)) 是交叉熵损失
  • L reg L_{\text{reg}} Lreg 是 Smooth L1 损失,对 ( x , y , w , h ) (x, y, w, h) (x,y,w,h) 分量分别求和
  • p i ∗ ∈ { 1 , . . . , K } p_i^* \in \{1, ..., K\} pi{1,...,K}是真实类别编号,背景为 0

⚖️ 多任务损失的设计哲学

Faster R-CNN 的多任务损失设计带来以下好处:

  • 分类与回归可以协同优化,提升检测性能;
  • 两阶段结构保持一致,统一训练框架;
  • 正负样本处理机制清晰,防止回归训练污染。

🧠 总结

Faster R-CNN 的两阶段多任务损失函数设计如下:

阶段 任务 分类损失 回归损失 是否只对正样本回归
RPN 二分类 交叉熵损失 Smooth L1 ✅ 是
Fast R-CNN 多分类 Softmax + 交叉熵 Smooth L1(多类) ✅ 是

这种设计是 Faster R-CNN 成功的重要原因之一,为后续如 Mask R-CNN、RetinaNet 等提供了统一思路。

5. 参考文献

https://zhuanlan.zhihu.com/p/32404424
https://proceedings.neurips.cc/paper_files/paper/2015/file/14bfa6bb14875e45bba028a21ed38046-Paper.pdf

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐