真实面经题目 · 原创解析

Faster R-CNN 相比 R-CNN / Fast R-CNN 改进了什么,RPN 为什么能让目标检测更快?

这题考的是两阶段检测器的演进逻辑:R-CNN 慢在每个候选框重复跑 CNN,Fast R-CNN 共享卷积但仍依赖外部候选框,Faster R-CNN 用 RPN 在共享特征上生成候选框从而端到端加速。

出现于:阿里巴巴 · 算法

60 秒回答模板

我会按 R-CNN、Fast R-CNN、Faster R-CNN 的瓶颈演进来回答。R-CNN 先用选择性搜索生成大量候选框,再把每个候选框裁剪缩放后分别送入 CNN 提特征,最后做分类和边框回归,所以慢在每个 proposal 都重复计算卷积,而且训练流程分离。Fast R-CNN 的改进是整张图只跑一次卷积,候选框在共享 feature map 上通过 ROI Pooling 取特征,再统一分类和回归,速度和训练统一性都提升了;但它仍然依赖选择性搜索等外部 proposal 方法,这部分不是神经网络、速度慢、难以端到端优化。Faster R-CNN 的关键就是引入 RPN,在同一张共享特征图上用小网络滑动生成 objectness 分数和边框偏移,基于 anchors 快速产生候选框,再交给检测头分类和精修。RPN 更快的原因是 proposal 生成不再依赖 CPU 上的传统选择性搜索,而是复用 backbone 特征,用密集卷积一次性预测候选区域,并且能和检测网络联合训练。取舍上,Faster R-CNN 精度和泛化好,但仍是两阶段结构,延迟通常高于单阶段检测器;工程选择要看 mAP、召回率、proposal 数量、NMS、输入分辨率和端到端延迟。

考点 R-CNN
难度 真实面经题
回答目标 让候选人能沿着检测器瓶颈演进讲清 Faster R-CNN:共享特征减少重复卷积,RPN 替代外部 proposal,因而在保持候选框质量的同时提升速度。

深入解析

01

R-CNN 的主要瓶颈是重复卷积

R-CNN 先生成大量候选区域,再把每个候选区域独立裁剪、缩放并送入 CNN。由于一张图可能有上千个 proposal,卷积特征被重复计算很多次。再加上特征提取、分类器、边框回归分阶段训练,整体速度慢、存储开销大、训练流程复杂。

02

Fast R-CNN 共享整图特征

Fast R-CNN 的关键改进是整张图片只经过一次 CNN,得到共享 feature map。每个候选框通过 ROI Pooling 或类似操作在 feature map 上取固定长度特征,然后进入分类和边框回归分支。这样大幅减少重复卷积,也让检测头训练更统一。

03

Fast R-CNN 仍受外部 proposal 限制

虽然 Fast R-CNN 加快了检测头,但候选框仍来自选择性搜索等传统算法。外部 proposal 通常运行慢,和神经网络主干不能共享计算,也不能在同一个目标函数下端到端优化。这使得 proposal 生成成为新的速度瓶颈。

04

RPN 在共享特征上生成候选框

Faster R-CNN 引入 Region Proposal Network。RPN 在 backbone 输出的 feature map 上滑动,用 anchors 表示不同尺度和长宽比的候选框,对每个位置预测 objectness 和边框偏移。它生成少量高质量 proposals,再交给后续检测头做具体类别分类和更精细的边框回归。

05

RPN 快在复用特征和密集预测

RPN 不需要对每个候选框重新跑 CNN,也不需要依赖独立的传统候选框算法。它只是在共享 feature map 上增加轻量卷积分支,密集预测候选区域。proposal 生成从外部耗时步骤变成网络内部的 GPU 友好计算,因此端到端检测速度明显提升。

06

评价要兼顾速度和召回

RPN 不是只追求少生成框,而是在 proposal 数量、候选框召回率、定位质量和后续分类精度之间取平衡。工程上会调 anchors、NMS 阈值、pre/post-NMS top-K、输入尺度和 backbone。Faster R-CNN 精度强、定位好,但两阶段流程仍有延迟,实时场景可能需要单阶段检测器或更轻量 backbone。

易错点

  • 只说 Faster R-CNN 更快,没有指出 R-CNN 重复卷积和 Fast R-CNN 外部 proposal 两个历史瓶颈。
  • 把 RPN 说成最终分类器,忽略它主要输出候选区域的 objectness 和边框偏移。
  • 认为 Faster R-CNN 完全去掉候选框,实际上它仍是 proposal-based,只是候选框由网络生成。
  • 把速度提升归因于 backbone 更小,而不是共享特征和网络化 proposal 生成。
  • 忽略 anchors、NMS、proposal 数量和召回率对速度与精度的影响。
  • 把两阶段检测器说成一定比单阶段好,缺少对实时性、资源和数据场景的取舍。

面试官追问

RPN 输出的 objectness 和分类头输出的类别有什么区别?

RPN 的 objectness 只判断该 anchor 是否可能包含目标,不关心具体类别;后续检测头才对 proposal 做多类别分类并进一步回归边框。

anchor 的作用是什么?

anchor 是预设在 feature map 每个位置上的参考框,覆盖不同尺度和长宽比。RPN 不直接从零预测任意框,而是预测相对 anchor 的偏移和目标概率。

为什么 Faster R-CNN 仍叫两阶段检测器?

第一阶段 RPN 生成候选区域,第二阶段检测头对候选区域做类别判断和边框精修。虽然两阶段共享特征并可联合训练,但流程上仍先 proposal 后分类回归。

Faster R-CNN 和单阶段检测器怎么选?

如果更看重定位精度、小目标召回和可解释的候选框流程,Faster R-CNN 有优势;如果更看重实时性、部署成本和吞吐,单阶段检测器通常更合适。最终要用目标数据集比较 mAP、召回、延迟和资源占用。

RPN 会不会影响最终检测精度?

会。RPN 的候选框召回和定位质量决定后续检测头能看到哪些区域。若 proposal 漏掉目标,后续分类再强也无法找回,所以要关注不同 IoU 阈值下的 proposal recall。