零基础彻底搞懂RCNN系列(手把手教学版)
版本核心改进速度精度(VOC mAP)RCNN首开深度学习检测53s58.5%Fast RCNNROI Pooling + 多任务0.3s70.0%RPN网络5fps78.8%Mask RCNNROI Align + 实例分割4fps80.3%
·
零基础彻底搞懂RCNN系列(手把手教学版)
一、目标检测基础概念
-
什么是目标检测:
- 输入:一张图片
- 输出:找出图中所有目标的位置(框)和类别
- 示例:输入猫咪图片 → 输出[[x1,y1,x2,y2,“猫”], […]]
-
核心难点:
- 目标可能出现在任何位置
- 目标大小形状各异
- 图片中可能有多个目标
二、初代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(关键!)
- 问题:候选区域在特征图上的大小不一
- 解决方案:
- 将特征图上的候选区域划分为7x7网格
- 每个网格做最大池化 → 得到固定大小特征
示例:输入特征区域为14x20 → 7x7网格 → 每个2x2区域取最大值 → 输出7x7特征
改进3:多任务损失
- 同时训练:
- Softmax分类(替代SVM)
- 边界框回归
- 损失函数:
总损失 = 分类损失 + 回归损失
四、Faster RCNN里程碑(2015)
核心创新:RPN网络(Region Proposal Network)
原流程:Selective Search生成候选区域
新流程:用神经网络自动生成候选区域
RPN工作原理(重点理解)
-
锚点(Anchor)机制:
- 在特征图的每个点上设置9种锚框(3种尺度×3种长宽比)
- 示例:特征图大小50x50 → 50x50x9=22500个锚框
-
二分类判断:
- 每个锚框预测:
- 是否是物体(前景/背景)
- 框的位置调整量
- 每个锚框预测:
-
候选区域生成:
- 根据预测分数筛选出约300个优质候选框
- 示例:22500锚框 → 筛选出300个候选区域
完整流程(必须掌握!)
图片 → CNN提取特征 → RPN生成候选 → ROI Pooling → 分类+回归
- 端到端训练:所有步骤联合训练,提升精度
- 速度提升:5fps(接近实时)
五、Mask RCNN进阶(2017)
新增功能:实例分割
- 在检测基础上:增加像素级蒙版预测
- 改进点:
- ROI Align(解决ROI Pooling量化误差)
- 新增Mask分支(FCN网络预测每个像素类别)
ROI Align详解
- 问题:ROI Pooling的两次量化(浮点坐标→整数)
- 解决方案:
- 保留浮点数坐标
- 使用双线性插值计算特征值
示例:要获取(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% |
七、动手实践建议
- 代码实现顺序:
- 先用PyTorch实现ROI Pooling
- 复现Fast RCNN
- 最后实现RPN网络
- 调试技巧:
- 可视化锚框生成结果
- 检查ROI Pooling前后的特征对齐
- 监控分类与回归损失的比例
八、常见问题解答
Q:为什么需要候选区域?
A:直接检测全图所有位置计算量太大,候选区域缩小搜索范围
Q:Anchor的尺寸如何设置?
A:根据数据集统计,通常包含面积128²,256²,512²,长宽比1:1,1:2,2:1
Q:RPN和检测头的关系?
A:RPN是粗筛选,检测头是精调。类似初试和复试的关系
更多推荐

所有评论(0)