目标检测: Fast R-CNN原理
Fast R-CNN论文地址: https://arxiv.org/pdf/1504.08083.pdf
1 概述:
考虑到R-CNN速度很慢, 作者提出了一个改善模型:Fast R-CNN. 相比R-CNN, Fast R-CNN的优点在于加快了selective search的步骤和同时训练分类和回归过程, 从整体上加快了速度.
Fast R-CNN对R-CNN的改进部分:
- 将R-CNN中三个模块(CNN, SVM, Regression)整合, 极大了减少了计算量和加快了速度
- 不对原始图像进行selective search提取, 而是先经过一次CNN, 在feature map上使用selective search截取候选区域, 进行分类回归
- 为了兼容不同图片尺度, 作者使用了ROI Pooling 算法, 将特征图池化到固定维度的特征向量.
2 ROI Pooling原理
ROI Pooling论文地址: https://arxiv.org/pdf/1406.4729.pdf
ROI Pooling也叫Spatial Pyramid Pooling(空间金字塔池化).
由于图片尺寸各不相同, 需要经过缩放拉伸到统一尺寸, 再送入CNN, 这会间接导致识别精度下降, 通过ROI Pooling可以将不同尺度的特征图输出为固定维度的特征向量, 同时也获取到了图像的特征信息, 而且速度很快.
(https://sevenold.github.io/2019/04/object-detection-SPPNet/)
__________________________________________________________________
3 步骤
3.1 预训练一个分类CNN
3.2 修改CNN, 将最后一个flatten层以及后面的层删掉, 换成ROI Pooling层
3.3 将图像经过CNN, 得到特征图, 使用selectiv search选出2k个候选区域
3.4 在ROI Pooling层后跟几个FC, 最后输出2个分支:
- 第一个分支是softmax层, 输出k+1个分类
- 第二个分支是regression, 预测输出k个类别的box参数
4 损失理解
为什么要使用smooth L1?
因为2点:
- 0点可导
- loss越来越小时, 梯度也适当减小, 有助于收敛
5 与R-CNN性能比较