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

两阶段目标检测器核心原理与流程详解

两阶段目标检测器的核心思想是:

第一阶段先找候选区域,第二阶段再对候选区域做分类和精修。

典型代表是:

R-CNN Fast R-CNN Faster R-CNN Mask R-CNN

现在最典型的是Faster R-CNN / Mask R-CNN,所以我以它为主来讲。


1. 两阶段目标检测整体流程

一个两阶段检测器大致执行步骤是:

输入图像 ↓ Backbone 提取特征 ↓ RPN 生成区域建议 ↓ RoI Pooling / RoIAlign 提取候选区域特征 ↓ 检测头进行分类 ↓ 检测头进行边框回归 ↓ NMS 后处理 ↓ 输出最终检测结果

可以把它分成两个大阶段:

第一阶段:找哪里可能有目标 第二阶段:判断目标是什么,并把框修准

2. 第一步:输入图像

输入是一张图片,比如:

H × W × 3

例如:

800 × 600 × 3

目标检测希望输出类似这样的结果:

猫:置信度 0.96,边界框 [x1, y1, x2, y2] 车:置信度 0.91,边界框 [x1, y1, x2, y2] 人:置信度 0.88,边界框 [x1, y1, x2, y2]

也就是说,既要知道类别,又要知道位置


3. 第二步:Backbone 提取特征

输入图像先送入一个卷积神经网络,也就是 backbone。

常见 backbone 有:

VGG ResNet ResNeXt Swin Transformer

它的作用是把原图转换成特征图。

例如原图:

800 × 600 × 3

经过 backbone 后,可能得到:

50 × 38 × 1024

这个特征图尺寸变小了,但语义信息更强。它不再只是原始像素,而是包含边缘、纹理、形状、局部结构和高层语义信息。

可以理解为:

原图负责提供视觉内容 Backbone 负责提取可用于检测的特征

4. 第三步:第一阶段,RPN 生成区域建议

这是两阶段检测里的第一阶段

RPN,也就是 Region Proposal Network,负责生成候选框。

它在 backbone 输出的特征图上工作。

4.1 在特征图上放 anchor

RPN 会在特征图的每个位置放多个 anchor。

例如每个位置放 9 个 anchor:

3 种尺度 × 3 种长宽比 = 9 个 anchor

如果特征图大小是:

50 × 38

那么 anchor 数量大约是:

50 × 38 × 9 = 17100

一开始候选框非常多。


4.2 对每个 anchor 做两个预测

RPN 对每个 anchor 输出两类结果:

第一类:objectness score

判断这个 anchor 里有没有目标。

注意,这里不是判断:

这是猫 / 狗 / 车 / 人

而是判断:

这里像不像有一个物体

所以它通常只是前景 / 背景二分类。


第二类:bbox regression

预测 anchor 应该如何调整。

每个 anchor 会得到 4 个偏移量:

dx, dy, dw, dh

分别表示:

中心点 x 方向怎么移动 中心点 y 方向怎么移动 宽度怎么缩放 高度怎么缩放

也就是说:

anchor + 边框偏移量 = proposal

RPN 不是直接拿 anchor 当结果,而是先修正 anchor,再得到区域建议。


4.3 筛选 proposals

RPN 会生成很多 proposal,但不会全部保留。

它通常会做:

删除太小的框 删除超出边界的框 按照 objectness 分数排序 使用 NMS 去掉重复框 保留 Top-N 个 proposal

比如最后保留:

训练时 2000 个 proposal 测试时 300 个 proposal

这些 proposal 会送入第二阶段。


5. 第四步:RoI Pooling / RoIAlign 提取候选区域特征

RPN 生成的 proposal 是原图上的候选框。

但是后续检测头需要的是固定大小的特征,例如:

7 × 7 × C

问题是:每个 proposal 的大小不同。

比如:

候选框 A:100 × 80 候选框 B:250 × 180 候选框 C:60 × 120

它们不能直接送进同一个全连接分类器。

所以需要RoI 特征提取


5.1 RoI 是什么?

RoI 是 Region of Interest,意思是感兴趣区域。

在目标检测中,一个 proposal 就可以看作一个 RoI。

也就是:

RPN 生成 proposal proposal 被当作 RoI RoI 被送入检测头

5.2 RoI Pooling 的作用

RoI Pooling 会把不同大小的 proposal 区域,都转换成固定大小的特征。

例如全部变成:

7 × 7 × C

这样后面的分类器就能统一处理。


5.3 RoIAlign 的改进

Mask R-CNN 中常用 RoIAlign。

它比 RoI Pooling 更精确,因为 RoI Pooling 会进行量化取整,可能造成位置偏差。

RoIAlign 避免粗暴取整,使用插值方式提取特征,所以定位更准,尤其适合实例分割。

简单理解:

RoI Pooling:快,但可能有位置误差 RoIAlign:更精确,适合检测和分割

6. 第五步:第二阶段,检测头分类

这是两阶段检测的第二阶段

每个 proposal 的 RoI 特征会送入检测头。

检测头首先做分类:

这个候选区域是什么类别?

例如输出:

背景:0.01 猫:0.92 狗:0.03 车:0.02 人:0.02

这时才真正判断具体类别。

和 RPN 不同:

RPN:只判断有没有物体 检测头:判断具体是什么物体

7. 第六步:第二阶段,边框再次回归

检测头除了分类,还会再做一次边框回归。

为什么 RPN 已经修正过边框了,第二阶段还要修?

因为 RPN 只是粗略生成候选区域,它的目标是高召回率,不一定特别精确。

第二阶段会基于更强的 RoI 特征,对边框进行更精细的调整。

可以理解为:

RPN 边框回归:粗调 检测头边框回归:精调

例如 RPN proposal 是:

大致框住猫,但左边多了一些背景

检测头会进一步调整成:

更紧密地包住猫

8. 第七步:后处理 NMS

第二阶段会输出很多检测框,其中可能有大量重复框。

比如同一只猫可能得到多个检测结果:

猫 0.96,框 A 猫 0.93,框 B 猫 0.89,框 C

这些框高度重叠,实际上表示同一个目标。

所以需要 NMS,也就是非极大值抑制。

NMS 的流程是:

按置信度从高到低排序 保留分数最高的框 删除与它重叠度太高的框 继续处理剩余框

最终只保留比较干净的检测结果。


9. 第八步:输出最终检测结果

最后输出每个目标的:

类别 置信度 边界框坐标

例如:

person 0.98 [120, 80, 260, 500] dog 0.94 [310, 200, 480, 430] car 0.91 [50, 300, 400, 520]

如果是 Mask R-CNN,还会额外输出:

实例分割 mask

也就是每个目标的像素级轮廓。


10. 用一句话串起来

两阶段目标检测器的执行过程可以这样理解:

先用 backbone 提取整张图的特征; 再用 RPN 从特征图中找出可能有目标的候选框; 然后用 RoI Pooling / RoIAlign 把每个候选框的特征裁出来; 最后用检测头判断每个候选框是什么类别,并精修边界框; 经过 NMS 去重后,输出最终检测结果。

11. 更形象的类比

可以把两阶段检测想成考试阅卷:

第一阶段:圈重点

RPN 像一个初筛老师:

这里可能有目标 那里可能有目标 这块像背景,忽略

它不负责精确判断类别,只负责把可疑区域圈出来。

第二阶段:仔细判断

检测头像一个专家老师:

这个区域是猫 这个区域是车 这个区域其实是背景 这个框需要再往右调一点

所以两阶段检测比一阶段检测多了一步“候选区域筛选”。


12. 训练阶段和推理阶段的区别

上面讲的是推理流程,也就是模型实际检测一张图片时怎么执行。

训练时还会多一些步骤。


12.1 训练 RPN

训练 RPN 时,需要给 anchor 分配标签:

正样本:和真实框 IoU 高的 anchor 负样本:和真实框 IoU 很低的 anchor 忽略样本:IoU 处在中间区域

RPN 学两个任务:

判断 anchor 是前景还是背景 学习 anchor 到真实框的偏移量

对应两个损失:

RPN 分类损失 RPN 边框回归损失

12.2 训练第二阶段检测头

第二阶段检测头也需要训练。

它会把 RPN 生成的 proposal 和真实框匹配,然后学习:

proposal 属于哪个类别 proposal 应该如何进一步调整

对应两个损失:

分类损失 边框回归损失

如果是 Mask R-CNN,还有:

mask 分割损失

13. 两阶段检测器的总损失

以 Faster R-CNN 为例,总损失可以概括为:

总损失 = RPN 分类损失 + RPN 边框回归损失 + 检测头分类损失 + 检测头边框回归损失

如果是 Mask R-CNN,则还要加上:

+ Mask 分支损失

所以它是多任务学习:

既学会找候选区域 又学会分类 又学会精确定位 如果有 mask 分支,还学会实例分割

14. 两阶段检测为什么通常更准?

两阶段方法通常精度较高,原因是:

第一阶段先缩小搜索范围 第二阶段可以对候选区域做更细致的分类和定位

相比直接在整张图上密集预测,两阶段方法给了模型一次“先粗后细”的机会。

不过代价是:

流程更复杂 速度通常比一阶段检测慢

所以常见取舍是:

两阶段检测:精度高,速度相对慢 一阶段检测:速度快,结构更简单

15. 最简版记忆

你可以把两阶段目标检测记成这 6 步:

1. 输入图像 2. Backbone 提取特征图 3. RPN 生成候选框 4. RoI Pooling / RoIAlign 提取候选框特征 5. 检测头分类 + 边框回归 6. NMS 后处理,输出最终结果

最核心的是这句话:

第一阶段负责“找可能有目标的地方”,第二阶段负责“判断是什么,并把框调准”。

http://www.jsqmd.com/news/843443/

相关文章:

  • laravel框架控制器在接口输出数据中最外层添加字段重置response.data数据success
  • 【SAP PO】消息ID追踪与端到端接口监控实战指南
  • 2026年商标律所排行榜单:专业机构实力参考 - 品牌排行榜
  • 2026年口碑好的数控刀具供货商盘点 - mypinpai
  • 从选题到发表全流程提效,NotebookLM教育研究辅助全链路解析,附教育部重点课题实测报告
  • 英雄联盟智能助手Seraphine:提升游戏体验的终极工具指南
  • 将 Hermes Agent 工具连接到 Taotoken 自定义模型提供方
  • 国产巴伦替代 Mini-Circuits TCM1‑63AX+,H3‑TCM1‑63AX+ 现货可原位替代
  • 短视频获客教程:如何在抖音月揽31+询盘?
  • 不限用户不限量,核心功能全免费,中小企业零成本数智化起点
  • 2026年降AI教程:亲测8款降AI率神器(含免费避坑干货) - 降AI实验室
  • MSP430L092 0.9V超低功耗MCU:物联网设备微型化与长续航的终极方案
  • 基于树莓派与热敏打印机的离线一次性密码本系统实现
  • LabVIEW编程实战:从数据流到状态机,构建工业级应用的四大支柱
  • Mesh组网?别再往家里堆节点了
  • 告别闪烁!用STM32和NE555玩转PWM调光,手把手教你做个智能LED调光器
  • Process Lasso Pro 使用说明
  • BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组
  • Grafana 服务端怎么配置 Nginx 反向代理实现 HTTPS 访问?
  • 描述统计和频数分析小白看懂
  • ARM SVE指令集ST1H:半字数据高效存储技术解析
  • 腾讯大模型岗位怎么准备:别只会讲模型,搜索推荐和产品落地才是主线
  • Keil MDK csolution项目调试问题解决方案
  • 荣耀亲选小湃摄像头Pro评测:一台顶三台,全屋守护无死角
  • 本次测评聚焦德州设备搬运吊装领域,旨在为对该服务感兴趣的人
  • 天勤量化与 vn.py 对比:期货量化两条 Python 路径怎么选
  • 体验Taotoken模型广场,如何根据任务需求挑选最合适的大模型
  • Windows HEIC缩略图终极解决方案:3分钟让资源管理器识别iPhone照片
  • langchain4j笔记-09
  • Java面试八股文终极清单(含答案详解),从JVM到并发,背完这套直接进大厂