零基础彻底搞懂RCNN系列(手把手教学版)

一、目标检测基础概念

  1. 什么是目标检测

    • 输入:一张图片
    • 输出:找出图中所有目标的位置(框)和类别
    • 示例:输入猫咪图片 → 输出[[x1,y1,x2,y2,“猫”], […]]
  2. 核心难点

    • 目标可能出现在任何位置
    • 目标大小形状各异
    • 图片中可能有多个目标

二、初代RCNN详解(2013)

1. 算法流程(重点!)

输入图片 → 生成候选区域 → CNN提取特征 → SVM分类 + 回归修正

步骤1:生成候选区域(Region Proposal)
  • 作用:找出可能包含物体的区域(约2000个)
  • 经典方法:Selective Search
    • 原理:类似人眼扫视图片,找到颜色/纹理相似的区域
    • 示例:一张猫图 → 生成猫头/猫身/背景等候选框
步骤2:特征提取
  • 操作:把每个候选区域缩放为227x227 → 输入CNN(如AlexNet)
  • 输出:每个区域得到一个4096维特征向量
  • 注意:每个区域单独过CNN,速度极慢(主要瓶颈)
步骤3:分类与回归
  • 分类:用SVM判断特征属于哪一类(猫/狗/背景等)
  • 回归:用线性回归微调候选框位置(让框更精准)

2. RCNN的致命缺陷

  • 速度问题:处理一张图需53秒(GPU)
    • 原因:2000个区域各自独立通过CNN
  • 存储问题:需要保存所有区域的特征(数百GB)
  • 精度问题:手工设计的候选区域可能漏掉目标

三、Fast RCNN改进(2015)

改进1:共享卷积计算

原流程:图片 → 候选区域 → 每个区域单独过CNN
新流程:图片 → 整图过CNN → 从特征图上截取候选区域

  • 省时原理:只运行一次CNN,而不是2000次
  • 速度提升:处理时间从53秒→0.3秒

改进2:ROI Pooling(关键!)

  • 问题:候选区域在特征图上的大小不一
  • 解决方案
    1. 将特征图上的候选区域划分为7x7网格
    2. 每个网格做最大池化 → 得到固定大小特征

示例:输入特征区域为14x20 → 7x7网格 → 每个2x2区域取最大值 → 输出7x7特征

改进3:多任务损失

  • 同时训练
  • Softmax分类(替代SVM)
  • 边界框回归
  • 损失函数
    总损失 = 分类损失 + 回归损失

四、Faster RCNN里程碑(2015)

核心创新:RPN网络(Region Proposal Network)

原流程:Selective Search生成候选区域
新流程:用神经网络自动生成候选区域

RPN工作原理(重点理解)
  1. 锚点(Anchor)机制

    • 在特征图的每个点上设置9种锚框(3种尺度×3种长宽比)
    • 示例:特征图大小50x50 → 50x50x9=22500个锚框
  2. 二分类判断

    • 每个锚框预测:
      • 是否是物体(前景/背景)
      • 框的位置调整量
  3. 候选区域生成

    • 根据预测分数筛选出约300个优质候选框
    • 示例:22500锚框 → 筛选出300个候选区域

完整流程(必须掌握!)

图片 → CNN提取特征 → RPN生成候选 → ROI Pooling → 分类+回归

  • 端到端训练:所有步骤联合训练,提升精度
  • 速度提升:5fps(接近实时)

五、Mask RCNN进阶(2017)

新增功能:实例分割

  • 在检测基础上:增加像素级蒙版预测
  • 改进点
    1. ROI Align(解决ROI Pooling量化误差)
    2. 新增Mask分支(FCN网络预测每个像素类别)

ROI Align详解

  • 问题:ROI Pooling的两次量化(浮点坐标→整数)
  • 解决方案
    1. 保留浮点数坐标
    2. 使用双线性插值计算特征值

示例:要获取(2.7, 3.4)位置的特征 → 计算周围4个整数点的加权平均

六、各版本对比总结

版本 核心改进 速度 精度(VOC mAP)
RCNN 首开深度学习检测 53s 58.5%
Fast RCNN ROI Pooling + 多任务 0.3s 70.0%
Faster RCNN RPN网络 5fps 78.8%
Mask RCNN ROI Align + 实例分割 4fps 80.3%

七、动手实践建议

  1. 代码实现顺序
  • 先用PyTorch实现ROI Pooling
  • 复现Fast RCNN
  • 最后实现RPN网络
  1. 调试技巧
  • 可视化锚框生成结果
  • 检查ROI Pooling前后的特征对齐
  • 监控分类与回归损失的比例

八、常见问题解答

Q:为什么需要候选区域?
A:直接检测全图所有位置计算量太大,候选区域缩小搜索范围

Q:Anchor的尺寸如何设置?
A:根据数据集统计,通常包含面积128²,256²,512²,长宽比1:1,1:2,2:1

Q:RPN和检测头的关系?
A:RPN是粗筛选,检测头是精调。类似初试和复试的关系

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐