目标检测篇---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,内部特征也可能足够指示一个大物体的存在及大致的调整方向。对于大物体,多个相邻位置的预测会共同作用。【管中窥豹,可知豹外貌】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seaborn模块练习题

1.使用tips数据集,创建一个展示不同时间段(午餐/晚餐)账单总额分布的箱线图 import seaborn as sns import matplotlib.pyplot as plt import pandas as pdsns.set_style("darkgrid") plt.rcParams["axes.unicode_minus"] Falsetips pd.read…

计算机网络 | 应用层(1)--应用层协议原理

💓个人主页:mooridy 💓专栏地址:《计算机网络:自定向下方法》 大纲式阅读笔记 关注我🌹,和我一起学习更多计算机的知识 🔝🔝🔝 目录 1. 应用层协议原理 1.1 …

论文导读 - 基于大规模测量与多任务深度学习的电子鼻系统实现目标识别、浓度预测与状态判断

基于大规模测量与多任务深度学习的电子鼻系统实现目标识别、浓度预测与状态判断 原论文地址:https://www.sciencedirect.com/science/article/abs/pii/S0925400521014830 引用此论文(GB/T 7714-2015): WANG T, ZHANG H, WU Y, …

React中createPortal 的详细用法

createPortal 是 React 提供的一个实用工具,用于将 React 子元素渲染到 DOM 中的某个位置,而该位置与父组件不在同一个 DOM 层次结构中。这在某些特殊场景下非常有用,比如实现模态框、弹出菜单、固定定位元素等功能。 基本语法 JavaScript …

电池的寿命

思路: 首先,我们观察发现:由于每枚电池的使用时间不同,而我们又要减少浪费才能使所有电池加起来用得最久,不难发现:当n2时,输出较小值。 第一步:将电池分为两组,使两组…

LeetCode每日一题4.27

3392. 统计符合条件长度为 3 的子数组数目 问题 问题分析 统计符合条件的长度为 3 的子数组数目。具体条件是:子数组的第一个数和第三个数的和恰好为第二个数的一半。 思路 遍历数组:由于子数组长度固定为 3,我们可以通过遍历数组来检查每…

Linux日志处理命令多管道实战应用

全文目录 1 日志处理1.1 实时日志分析1.1.1 nginx日志配置1.1.2 nginx日志示例1.1.3 日志分析示例 1.2 多文件合并分析1.3 时间范围日志提取 2 问题追查2.1 进程级问题定位2.2 网络连接排查2.3 硬件故障追踪 3 数据统计3.1 磁盘空间预警3.2 进程资源消耗排名3.3 HTTP状态码统计…

0803分页_加载更多-网络ajax请求2-react-仿低代码平台项目

文章目录 1 分页1.1 url与分页参数1.2 分页组件与url1.3 列表页引用分页组件 2 加载更多2.1 状态2.2 触发时机2.3 加载数据2.4优化 结语 1 分页 1.1 url与分页参数 查询问卷列表接口,添加分页参数: page:当前页码(第几页&#…

【技术追踪】基于扩散模型的脑图像反事实生成与异常检测(TMI-2024)

一种新颖的扩散模型双重采样策略,DDPM DDIM ~ 论文:Diffusion Models for Counterfactual Generation and Anomaly Detection in Brain Images 0、摘要 病理区域的分割掩模在许多医学应用中很有用,例如脑肿瘤和中风管理。此外,疾…

第十六届蓝桥杯大赛软件赛省赛第二场 C/C++ 大学 A 组

比赛还没有开始,竟然忘记写using namespace std; //debug半天没看明白 (平时cv多了 然后就是忘记那个编译参数,(好惨的开局 编译参数-stdc11 以下都是赛时所写代码,赛时无聊时把思路都打上去了(除了倒数第二题&#…

CentOS 7上Memcached的安装、配置及高可用架构搭建

Memcached是一款高性能的分布式内存缓存系统,常用于加速动态Web应用的响应。本文将在CentOS 7上详细介绍Memcached的安装、配置,以及如何实现Memcached的高可用架构。 (1)、搭建memcached 主主复制架构 Memcached 的复制功能支持…

告别进度失控:用燃尽图补上甘特图的监控盲区

在职场中,项目经理最头疼的莫过于“计划赶不上变化”。明明用甘特图排好了时间表,任务却总像脱缰野马——要么进度滞后,要么资源分配失衡。甘特图虽能直观展示任务时间轴,但面对突发风险或团队效率波动时,它更像一张“…

爬虫-oiwiki

我们将BASE_URL 设置为 "https://oi-wiki.org/" 后脚本就会自动开始抓取该url及其子页面的所有内容,并将统一子页面的放在一个文件夹中 import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse import os import pd…

业务中台与数据中台:企业数字化转型的核心引擎

前言:在当今数字化浪潮下,企业为了提升运营效率、加速创新步伐并更好地适应市场变化,业务中台与数据中台应运而生,成为企业架构中的关键组成部分。本文将深入探讨业务中台和数据中台的简介、发展史、技术流环节以及在实际生产中的…

django admin 去掉新增 删除

在Django Admin中,你可以通过自定义Admin类来自定义哪些按钮显示,哪些不显示。如果你想隐藏“新增”和“删除”按钮,可以通过重写change_list_template或使用ModelAdmin的has_add_permission和has_delete_permission属性来实现。 方法1&…

基于云原生架构的后端微服务治理实战指南

一、引言:为什么在云原生时代更需要微服务治理? 在单体应用时代,开发和部署虽然简单,但随着系统规模的扩大,单体架构的维护成本急剧上升,部署频率受限,模块之间相互影响,最终导致系…

MIT6.S081 - Lab10 mmap(文件内存映射)

本篇是 MIT6.S081 2020 操作系统课程 Lab10 的实验笔记,目标只有一个:实现文件映射到内存的功能,也就是 mmap。 作为一名 Android 开发者,我可太熟悉 mmap 这个词儿了。Android 的 跨进程通信 Binder 驱动、图形内存分配和管理、…

基于BenchmarkSQL的OceanBase数据库tpcc性能测试

基于BenchmarkSQL的OceanBase数据库tpcc性能测试 安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQLBenchmarkSQL props文件配置数据库和测试表配置BenchmarkSQL压测装载测试数据TPC-C压测(固定事务数量)TPC-C压测(固定时长)生成测试报告重复测试流程梳理安装Benchmar…

WinForm真入门(17)——NumericUpDown控件详解

一、基本概念‌ NumericUpDown 是 Windows 窗体中用于数值输入的控件,由文本框和上下调节按钮组成。用户可通过以下方式调整数值: 点击调节按钮增减数值键盘直接输入使用方向键调整 适用于需要限制数值范围或精确控制的场景(如年龄、参数配…

汽车自动驾驶介绍

0 Preface/Foreword 1 介绍 1.1 FSD FSD: Full Self-Driving,完全自动驾驶 (Tesla) 1.2 自动驾驶级别 L0 - L2:辅助驾驶L3:有条件自动驾驶L4/5 :高度/完全自动驾驶