二阶段目标检测系列文章
目标检测1——二阶段目标检测概述
目标检测2——R-CNN(将CNN网络应用在目标检测领域的开山之作)
目标检测3——SPPNet(空间金字塔池化可以接收任何尺度的图像)
目标检测4——Fast R-CNN(ROI Pooling、SVD、Multi-task Loss等新特性实现端到端的训练并显著提升训练和推理的速度)
目标检测5——Faster R-CNN(RPN网络代替Selective Search来获取候选框)
目录
一、基本介绍
- ICCV-2015:Fast R-CNN
- Fast R-CNN 是在 R-CNN 的基础上融入了 SPPNet 网络优点之后的一个改进网络
- Fast R-CNN的优势:
- 实现了端到端的单阶段模型训练(R-CNN 需要分别训练CNN网络,多个 SVM分类器,BB回归器)
- 所有层的参数都可以 fine-tune 重训练
- 不需要离线存储特征文件
- 使用 Softmax 替换 SVM 分类器
- 兼容任意尺寸图像 (ROI Pooling)
- 采用奇异值分解 SVD 简化 FC 全连接层的计算量
- 多任务损失函数 (Muti-task Loss)
- 训练/预测运行速度更快
- mAP评估指标更高
- 实现了端到端的单阶段模型训练(R-CNN 需要分别训练CNN网络,多个 SVM分类器,BB回归器)
- Fast R-CNN的主要问题:使用SS产生候选区域块ROI区域在整个检测过程中耗时太长(SS候选框获取2~3s,特征分类0.3s),这个问题会将后续的 Faster R-CNN 中解决
- 基于VGG16的Fast RCNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在VOC2012数据集上的mAP大约为66%
二、Fast R-CNN的主要改进
1. ROI Pooling
- ROIS 是指 Selective Search 完成后得到的所有“候选框”在特征图上的映射
- ROI(单层)就是对 SPP(三层)的简化
- 其思路如下:
- 将 Region Proposal 划分成 H×W 大小的网格
- 对每个网络做 Max Pooling
- 这样就形成固定大小为 H×W 的 Feature Map
2. SVD 改进全连接层
3. Muti-task Loss
- ground truth class u and ground truth bounding box v
- L c l s − 分类损失、 L l o c − 定位损失 L_{cls}-分类损失、L_{loc}-定位损失 Lcls−分类损失、Lloc−定位损失
- 分类损失是 log 损失 (即对真实分类的概率取负log) L c l s = − l o g p u L_{cls}=-logp_u Lcls=−logpu
- 定位损失是 smooth L1 损失
- 为了确保只有在需要定义 bounding box 时才计算定位损失
- u=0 时候选框为背景/负例
- u≥1 时后候选框对应的类别值/正例
三、整体思路
1. 训练整体架构
2. 测试整体架构
四、Fast R-CNN相关思考题
1. 为什么这里可以使用Softmax替换SVM分类器?
2. 如何处理尺度不变性问题?
- single scale
- multi-scale