3.4 Faster R-CNN的变体与改进


3.4 Faster R-CNN 的变体与改进

本节摘要:Faster R-CNN 之后,Mask R-CNN 加分割、Cascade R-CNN 加级联。本节讲这些变体如何扩展两阶段框架——精度更高、能力更强。

你能学到什么

阅读完本节,你应当能够:

  1. 理解 Mask R-CNN 的分割扩展
  2. 理解 Cascade R-CNN 的级联思想
  3. 知道其他改进方向

概念脉络

一、为什么需要变体

Faster R-CNN 是两阶段检测的成熟形态,但仍有改进空间:RoI Pooling 量化误差、单阶段分类回归不够精、只检测不能分割。变体针对这些改进。

三个主要方向:能力扩展(Mask R-CNN 加分割)、精度提升(Cascade R-CNN 加级联)、特征增强(FPN 加多尺度)。它们不是互斥的,现代实现经常组合使用,比如 Mask R-CNN + FPN 就是实例分割的经典配置。

二、Mask R-CNN

Mask R-CNN 在 Faster R-CNN 基础上加实例分割分支,同时输出框、类别和像素级掩码。

图 3-4 Mask R-CNN 与 Cascade R-CNN

图 3-4 Mask R-CNN 与 Cascade R-CNN

关键改进:

  • RoIAlign:取代 RoI Pooling,用双线性插值避免量化误差,分割精度提升
  • 分割分支:每个 RoI 预测像素级二值掩码(FCN)
  • 多任务:分类 + 框回归 + 分割,三任务联合

RoIAlign 和 RoI Pooling 的区别在取整:RoI Pooling 把浮点坐标取整,池化时每格边界也取整,误差在分类任务里无所谓,但掩码是像素级输出,1~2 像素的偏移就很明显。RoIAlign 用双线性插值在浮点坐标上采样,不做取整,掩码精度显著提升。

# RoIAlign 的关键:双线性插值,避免量化误差 def bilinear_sample(feature_map, x, y): x0, y0 = int(x), int(y) dx, dy = x - x0, y - y0 return (feature_map[..., y0, x0] * (1-dx) * (1-dy) + feature_map[..., y0, x0+1] * dx * (1-dy) + feature_map[..., y0+1, x0] * (1-dx) * dy + feature_map[..., y0+1, x0+1] * dx * dy)

Mask R-CNN 是实例分割的标准方法。

三、Cascade R-CNN

单级检测头用固定 IoU 阈值(如 0.5)定正样本,阈值低则噪声多,阈值高则正样本少。Cascade R-CNN 用多级级联,每级 IoU 阈值递增(0.5→0.6→0.7):

  • 第 1 级:IoU 0.5,粗筛
  • 第 2 级:IoU 0.6,精修
  • 第 3 级:IoU 0.7,精调

每级在前一级输出基础上精修,逐步提升框质量,高 IoU 下仍保持高召回。

为什么单级做不到?用 0.5 训练出来的回归器,面对高 IoU 输入时修正能力下降——训练分布和测试分布不一致。Cascade 每一级用自己的阈值重新采样训练,让每级的输入分布和训练分布匹配,所以级联后的框质量越来越高。这是"训练-测试分布匹配"思想的经典应用。

四、FPN(特征金字塔)

FPN 给 Faster R-CNN 加多尺度特征:骨干网络自底向上提特征,FPN 自顶向下融合 + 横向连接,生成多层级特征图。不同尺度目标用不同层级特征检测,小目标检测大幅提升。

Faster R-CNN + FPN 是高精度检测标配。RPN 和检测头都可以在多尺度特征上并行工作:RPN 每层独立预测锚点,RoI 按尺寸分配到对应层级做池化。

五、其他改进

改进 说明
RoIAlign 取代 RoI Pooling,去量化误差
可变形卷积(Deformable) 卷积核自适应形变,更好建模几何变化
Group Normalization 替代 BN,小批量稳定
Libra R-CNN 平衡学习(样本/梯度/特征)
TridentNet 多分支处理不同尺度

可变形卷积值得多说一句:它给每个采样点学一个偏移量,让卷积核不再死板地取 3x3 规则网格,而是"长"到目标形状上去。对形变大、姿态多的目标,比固定感受野的卷积更灵活,代价是显存和实现复杂度上升。

六、变体对比

方法 改进 任务
Faster R-CNN 基础两阶段 检测
Mask R-CNN +分割+RoIAlign 检测+实例分割
Cascade R-CNN 级联多级 高精度检测
Faster+FPN 多尺度 小目标友好

七、两阶段的局限

两阶段精度高但仍有局限:

  • 速度:两阶段比单阶段慢,实时场景吃力
  • 复杂度:RPN + 检测头两套结构,工程复杂
  • 端到端:虽可联合训练,但两阶段流程本质串行

这些局限催生了单阶段检测器的繁荣(第 4 章)。单阶段把两阶段的两步合成一步:没有 RPN 和 RoI 流程,直接在特征图上回归框和类别。代价是正负样本不均衡等新问题,但换来速度和简单性——这是范式取舍的经典案例。

八、选型判断

什么时候用两阶段及其变体?

  • 需要高 IoU 精度(mAP@[0.5:0.95] 而非 mAP@0.5)→ Cascade R-CNN 有优势
  • 需要实例分割 → Mask R-CNN
  • 小目标密集 → 加 FPN 的两阶段
  • 实时或边缘 → 直接看第 4 章单阶段

⚠️ 常见误区:以为两阶段一定比单阶段准。Cascade R-CNN 等高精度变体确实强,但 YOLOv4/v5 在 COCO 上已追平甚至超越基础 Faster R-CNN,差距在工程优化。

💡 关键直觉:Mask R-CNN 加分割分支+RoIAlign(实例分割标准)。Cascade R-CNN 级联多级递增 IoU(高精度)。FPN 加多尺度(小目标)。两阶段精度高但慢且复杂,催生单阶段。

本章回顾

  • Mask R-CNN:+分割分支+RoIAlign(去量化误差),实例分割标准。
  • Cascade R-CNN:多级级联,IoU 递增(0.5→0.6→0.7),高精度。
  • FPN:多尺度特征金字塔,小目标友好,高精度标配。
  • 其他:可变形卷积、GN、Libra R-CNN、TridentNet。
  • 局限:两阶段慢、复杂、串行,催生单阶段。
  • 选型:高 IoU 精度选 Cascade,分割选 Mask,小目标加 FPN,实时看单阶段。
  • 现状:单阶段工程优化已追平基础 Faster R-CNN,差距在工程。

第 3 章结束。下一章讲单阶段检测器 YOLO 系列。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U