小田学CV掉头发之路——目标检测算法之Fast R-CNN

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,序号用于训练)。

img

第五阶段的特征输入到两个并行的全连层中(称为multi-task)。

img

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损失函数

1600862218539

Fast R-CNN总结

  • 由于图像只通过CNN一次,而不是让每一个候选区独立通过CNN,减少了运算量
  • R-CNN中的多个SVM的分类合并为一个DNN,让分类和定位可以同时训练
  • 但是仍然依靠Selective Search选择候选区域