Fast R-CNN
继2014年的R-CNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。在Github上提供了源码。
同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间.
改进:
- 将R-CNN中下面3个独立模块整合在一起,减少计算量:
- CNN:提取图像特征
- SVM:目标分类识别
- Regression模型:定位
- 不对每个候选区域独立通过CNN提取特征,将整个图像通过CNN提取特征,然后从CNN的特征图中根据Selective Search的候选区域通过Rol Pooling层提取区域特征
网络基本结构
图像归一化为224×224直接送入网络。前五阶段是基础的conv+relu+pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4,序号用于训练)。
第五阶段的特征输入到两个并行的全连层中(称为multi-task)。
cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。
bbox_prdict层用于调整候选区域位置,输出4 * K维数组t,表示分别属于K类时,应该平移缩放的参数。
Rol Pooling
- 将任意大小的特征图(CNN的输出)使用Max Pooling转换为固定大小的特征图
- 假设Rol Pooling的输入为H1 * W1像素,输出为H2 * W2像素(H2 < H1; W2 < W1),那么输入特征图会被均分为H2 * W2个格子(每一个格子包含H1 / H2 * W1 / W2个像素,然后对每一个格子做Max Pooling
loss损失函数
Fast R-CNN总结
- 由于图像只通过CNN一次,而不是让每一个候选区独立通过CNN,减少了运算量
- 将R-CNN中的多个SVM的分类合并为一个DNN,让分类和定位可以同时训练
- 但是仍然依靠Selective Search选择候选区域