重读CV系列——&&3、Faster-RCNN学习

Faster R-CNN = RPN(生成候选框) + Fast R-CNN(分类+回归),两者共享同一个CNN骨干网络。

1、整体架构

步骤 操作 说明
1. 共享卷积特征提取 输入整张图片,通过CNN骨干网络(如VGG16、ResNet)提取共享特征图 这张特征图被RPN检测网络共用,实现计算共享。
2. RPN生成候选框 在特征图上滑动一个小网络 ,在每个位置生成锚框(Anchor Boxes),并判断每个锚框是"前景(有物体)"还是"背景",同时微调锚框位置。 输出约300个高质量的候选框(Proposals),替代了Selective Search。
3. RoI Pooling / RoI Align 将RPN输出的候选框映射到共享特征图上,使用RoI Pooling(或更精确的RoI Align)将其池化为固定大小。 与Fast R-CNN完全相同。
4. 分类与回归 将池化后的特征送入全连接层,通过Softmax做类别分类 ,通过边界框回归器做位置精修 与Fast R-CNN完全相同。

2、RPN

2.1 RPN的工作流程
  1. 滑动窗口 :在共享特征图上,用一个 3×3 的卷积核滑动,每个窗口位置对应特征图上的一个点。

  2. 锚框(Anchor Boxes) :在每个滑动窗口位置,预定义 k 个不同尺度和长宽比的锚框 。通常设置 3种尺度 × 3种长宽比 = 9个锚框

    • 尺度:如 {128², 256², 512²} 像素(在原图上的尺寸)

    • 长宽比:如 {1:1, 1:2, 2:1}

  3. 两个并行的分支(在3×3卷积之后):

    • 分类分支(2k个输出) :判断每个锚框是"前景(object)"还是"背景(background)",输出 2k 个分数(每个锚框两个分数)。

    • 回归分支(4k个输出) :微调每个锚框的位置,输出 4k 个坐标偏移量(dx, dy, dw, dh)。

  4. 生成Proposals :根据分类得分排序,取前N个(如训练时取2000个,推理时取300个),再经过NMS去重,得到最终的候选框。

关键理解 :RPN本身并不做具体类别的识别,它只做二分类 (有没有物体)和粗定位。具体是什么物体,留给后面的检测网络来做。

2.2 锚框(Anchor)的设计哲学

面试官常问:"为什么要设计这么多锚框?"

  • 解决多尺度问题 :物体在原图中的尺寸差异很大(如小汽车vs.大卡车)。如果只用单一尺度的框,模型很难覆盖所有情况。通过预定义多种尺度和长宽比,让模型只需要学习"微调"而不是"从零预测",降低了学习难度。

  • 平移不变性 :锚框是密集地铺在特征图每个位置上的,保证了检测器对物体位置的平移具有不变性。

  • 密度与效率的平衡:锚框的数量(如9个/位置)既保证了足够的覆盖率,又不至于计算量过大。

2.3 RPN的训练标签分配(正负样本定义)

这是面试中极易被追问的细节,你需要清晰地说出以下规则:

样本类型 判定条件
正样本 ① 与某个Ground Truth框的IoU > 0.7 ;② 与某个Ground Truth框有最大IoU(确保每个GT至少有一个锚框负责)。
负样本 与所有Ground Truth框的IoU < 0.3
忽略样本 IoU在 0.3, 0.7 之间的锚框,不参与训练。

为什么这样设计? 保证正负样本平衡(通常正:负 ≈ 1:1),同时避免模糊样本(部分重叠)对训练造成干扰。

3、训练策略

Faster R-CNN有两个网络(RPN + 检测网络)共享同一个CNN骨干,如何训练是一个关键问题。

训练方式 做法 优缺点
交替训练(Alternating Training) 原始论文采用的方式。① 先单独训练RPN;② 用RPN产生的候选框训练检测网络;③ 用检测网络微调RPN(共享卷积层);④ 再微调检测网络。迭代多次。 稳定但繁琐,训练时间长。
近似联合训练(Approximate Joint Training) 将RPN和检测网络合并为一个网络 ,前向时RPN生成候选框,反向时梯度在RoI Pooling处截断,不传到RPN。 训练速度快,效果略差但可接受,工业界常用
端到端联合训练 完全端到端,梯度从检测网络传回RPN。但这需要RoI Pooling是可微的,后来RoI Align解决了这个问题。 理论上最优,但实现复杂。

4、面试问题

  • 问1:RPN和检测网络是如何共享特征的?

    • :两者共用同一个CNN骨干网络的输出(如VGG16的conv5_3层)。前向时,RPN和检测网络都从这个共享特征图上获取数据。反向传播时,两个网络的梯度都会累积到共享的卷积层上,一起更新。
  • 问2:为什么RPN要用3×3的卷积核,而不是更大的?

    • :3×3是感受野与计算量的平衡。在特征图上,3×3的窗口对应原图上一个较大的区域(取决于下采样倍数,如VGG16中对应约228×228像素),已经足够覆盖锚框的上下文信息。更大的卷积核会增加计算量,收益不大。
  • 问3:RPN为什么输出2k个分数,而不是k个?

    • :因为RPN做的是二分类 (前景/背景),所以每个锚框需要2个输出。这在训练时用于计算二分类交叉熵损失
  • 问4:NMS在RPN和检测网络中分别扮演什么角色?

    • :在RPN中,NMS用于筛选候选框 ,将数千个锚框精简为几百个高质量的Proposals(IoU阈值通常设为0.7)。在检测网络中,NMS用于去除重复的最终检测框,避免同一个物体被多次检出(IoU阈值通常设为0.3-0.5)。
相关推荐
weixin_431600442 小时前
做 Agent 会用到的 Node API(4):取消与 AbortController
前端·学习·ai·agent·ai编程
2301_809051143 小时前
STM32 GPIO控制器及其应用 学习笔记-2
笔记·stm32·学习
依然鸣4 小时前
蓝桥杯多校模拟赛(第二场)题解
数据结构·c++·经验分享·学习·算法·图论
依然鸣4 小时前
蓝桥杯多校模拟赛 题解
数据结构·c++·经验分享·学习·算法·蓝桥杯
LccKyI4 小时前
C# 零基础学习 Day01|基础概念梳理 + 思维导图总结
开发语言·笔记·学习·c#
艾莉丝努力练剑4 小时前
【MYSQL】MYSQL学习的一大重点:视图
android·服务器·数据库·学习·mysql·面试·视图
艾莉丝努力练剑4 小时前
【MYSQL】MYSQL学习的一大重点:事务(下)- InnoDB 事务隔离性原理(MVCC 视角)
android·数据库·b树·sql·学习·mysql·面试
懿路向前5 小时前
【HarmonyOS学习笔记】2026-08-05 | 端插件卡片绑定与跨上下文判断
笔记·学习·ai编程·harmonyos
YUS云生5 小时前
大模型学习·第44天:Chroma向量数据库与RAG链式组装
数据库·学习