当前位置: 首页 > news >正文

目标检测篇---faster R-CNN

目标检测系列文章

第一章 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. 引言部分梳理 (动机与思想)

AspectDescription (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 与检测网络共享底层的卷积计算,并将区域提议也用神经网络实现,可以构建一个统一、高效的框架,显著提升目标检测的速度(达到近实时),同时保持甚至提高检测精度。

📝 三句话总结

方面内容
❓发现的问题
  • 速度瓶颈: Fast R-CNN 检测网络本身很快 (GPU),但其依赖的外部区域提议算法 (如 Selective Search) 通常在 CPU 上运行,速度极慢 (可能耗时数秒),成为整个目标检测系统的绝对性能瓶颈
  • 计算分离与冗余: 区域提议的计算过程 (基于底层图像特征) 与下游检测网络使用的深度卷积特征完全分离的,未能共享计算,存在明显的计算冗余效率低下问题 (“missed opportunity for sharing computation”)。
  • 非端到端系统: 由于区域提议是外部独立的步骤,整个系统并非完全的端到端学习框架。
💡提出的方法 (R-CNN)
  • 解决区域提议瓶颈: 提出 区域提议网络 (Region Proposal Network, RPN)。这是一个内部的、可学习的、轻量级全卷积网络 (FCN),直接作用于主干网络输出的特征图,用于高效生成候选区域。
  • 解决计算分离: RPN 被设计为与 Fast R-CNN 检测头共享同一个主干卷积网络 (Backbone) 输出的特征图。这意味着图像最耗时的深度特征提取只需进行一次,其结果被 RPN (用于提议) 和检测头 (用于分类/回归) 共同使用,极大提高了计算效率。
  • 整合系统: 将区域提议生成整合到统一的深度神经网络框架中,使得整个检测流程更加接近端到端 (除 NMS 等后处理外)。
  • 确立了现代两阶段目标检测器(先提议、后检测)的基本范式和标杆,对后续研究产生了极其深远的影响。
⚡该方案的局限性/可改进的点
  • 训练复杂性: 原始论文提出的 4 步交替训练 (4-Step Alternating Training) 策略较为复杂、繁琐且难以完美优化(尽管后续研究提出了近似联合训练和完全端到端联合训练的方法)。
  • 超参数敏感: 模型性能,特别是 RPN 的性能,对 Anchor 的配置(如尺度 Scales, 长宽比 Aspect Ratios, 数量 k)比较敏感,这些超参数需要根据数据集和主干网络进行仔细设计和调优。
  • 两阶段本质: 尽管网络结构统一,其内部工作逻辑仍然是先由 RPN 生成 proposals,再由 Fast R-CNN 检测头对这些 proposals 进行分类和精修的两阶段 (Two-Stage) 过程,这可能在速度上不如最优化的单阶段 (One-Stage) 方法。
  • RoI Pooling 缺陷: 使用的 RoI Pooling 层存在坐标量化(取整)操作,导致 RoI 特征与其在原图对应的区域之间存在轻微的空间不对齐 (misalignment) 问题,可能影响对小物体或需要精确定位的任务(这个问题在后续的 Mask R-CNN 中由 RoI Align 层改进)。

🔍 方法逻辑梳理

Faster R-CNN 是一个高度整合的统一网络。

  • 模型输入:

    • 一张 RGB 图像。(不再需要外部 RoIs)
  • 处理流程 (Unified Network):

    1. 共享主干网络 (Shared Conv Backbone - Encoder 角色):
      • 输入: 整张图像。
      • 处理: 图像通过一系列卷积和池化层(如 VGG, ResNetconv 部分)。
      • 输出: 整张图像的共享卷积特征图 (Shared Feature Map)。
    2. 区域提议网络 (Region Proposal Network - RPN - 特殊模块):
      • 输入: 来自步骤 1 的共享特征图
      • 处理:
        • 在特征图上滑动一个小型的卷积网络(如 3x3 卷积)。
        • 在滑窗的每个位置,考虑 k 个预定义的 Anchors (不同尺度面积(128²、256²、512²)、长宽比(0.5、1、2))。
        • 通过两个并行的 1x1 卷积(分类头和回归头)对每个 Anchor 进行预测:
          • 预测 2k 个物体性得分 (Objectness Scores: object vs. background)。
          • 预测 4k 个边界框回归偏移量 (relative to anchor)。
        • 基于物体性得分筛选 Anchors,应用回归偏移量修正坐标,得到初步的 Proposals
        • Proposals 应用 NMS (非极大值抑制) 以减少冗余。【第一次使用NMS剔除多余的Anchors】
      • 输出: 一组候选区域 RoIs (例如 ~300 或 ~2000 个,坐标是相对于原始图像的)。
    3. RoI Pooling / RoI Align 层 (特殊模块):
      • 输入: 共享特征图 (来自步骤 1) + RPN 生成的 RoIs (来自步骤 2)。
      • 处理:每个 RoI,从共享特征图中提取一个固定大小 (e.g., 7x7xC) 的特征图块。(RoI Align 效果通常更好)
      • 输出:每个 RoI 输出一个固定大小的特征图块。
    4. 检测头 (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
    5. 后处理 (Post-processing - NMS):
      • 使用最终的类别分数和应用了回归偏移量后的边界框,再次进行 NMS (通常按类别进行)。
      • 输出: 最终检测结果列表。
  • 模型输出:

    • 图像中检测到的物体列表,每个物体包含:类别标签置信度分数精修后的边界框坐标
  • 训练过程:

    • 目标: 训练 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+λ1LregRPN) 和 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 - 原始论文提出): 比较复杂,步骤间有权重固定和微调。
        1. 训练 RPN (用 ImageNet 预训练模型初始化)。
        2. 训练 Fast R-CNN 检测网络 (用 ImageNet 预训练模型初始化,使用第1步 RPN 生成的 proposals)。此时 ConvNet 独立训练。
        3. 固定共享的 ConvNet 层,只微调 RPN 的独有层。
        4. 固定共享的 ConvNet 层,只微调 Fast R-CNN 的独有层 (FCs 等)。
      • 近似联合训练 (Approximate Joint Training - 更常用): 在一次前向传播中计算 RPN 和 Fast R-CNN 的 proposals 和损失,然后将它们的损失加起来一起反向传播更新所有权重(包括共享卷积层)。实现上有一些细节处理 RPN proposal 对后续 loss 的影响。
      • 端到端联合训练 (End-to-End Joint 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,内部特征也可能足够指示一个大物体的存在及大致的调整方向。对于大物体,多个相邻位置的预测会共同作用。【管中窥豹,可知豹外貌】

相关文章:

  • Redis中的hash数据结构设置过期时间的坑!!!
  • [Windows] 实用多功能工具箱 灵溪工具箱0.1.1
  • 23种设计模式-行为型模式之模版方法模式(Java版本)
  • 云原生之认识DDD
  • 100.HTB-Meow
  • BBRv2,v3 吞吐为什么不如 BBRv1
  • Java微服务架构设计与实践 - 面试实战
  • 把dll模块注入到游戏进程的方法_插APC注入
  • 【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
  • 秒出PPT推出更强版本,AI PPT工具进入新纪元!
  • 6.学习笔记-SpringMVC-拦截器(P71-P74)
  • # 代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • 在 MySQL 中,索引前缀长度为什么选择为 191
  • Java24新增特性
  • OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
  • 504 nginx解决方案
  • 机器学习基础 - 分类模型之SVM
  • “Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
  • PostgreSQL性能优化实用技巧‌
  • NLP高频面试题(五十二)——深度学习优化器详解
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查
  • 上海:全面建设重复使用火箭创新高地、低成本商业卫星规模制造高地
  • 继续免费通行!五一假期全国高速公路日均流量约6200万辆
  • 再放宽!新版市场准入负面清单发布,无人驾驶航空器、电子烟等新业态被纳入
  • 刘国梁总结发言数度哽咽:乒乓球是事业,更是融入血脉的信仰
  • 魔都眼·上海车展②|小鹏汽车:何小鹏携手机器人车模首秀