重读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)。
相关推荐
小弥儿5 小时前
GitHub今日热榜 | 2026-08-26:AI 大脑与知识管理扎堆
人工智能·学习·开源·github
荷蒲5 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
中科高级技工学校5 小时前
乌鲁木齐中医康复学习经历分享
大数据·学习
JavaPub-rodert7 小时前
具身智能行业技术全景:从感知、规划、控制到 VLA 与机器人学习
学习·机器人
知识分享小能手9 小时前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(22)
开发语言·学习·r语言
陈年老古董10 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
戈文波Geir-Wenbo Ge10 小时前
深度七步:从学习到主宰
学习
clorinda10 小时前
OpenCV实战学习记录:图像拼接与答题卡识别
人工智能·opencv·学习
red_redemption10 小时前
自由学习记录(221)
学习·renderdoc
sel_910 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型