(目标检测)--- Fast RCNN算法理解

Fast RCNN

继2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,构思精巧,流程更为紧凑,大幅提升了目标检测的速度。

同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间。

思想

基础:RCNN

在输入图像中确定1000-2000个候选框------>用深度网络对每个候选框内的图像块提取特征------>对特征使用分类器判别是否是属于同一特定类别的------>对属于同一特征的候选框用回归器再进一步调整其位置。

改进:Fast RCNN

Fast RCNN方法解决了RCNN方法的三个问题:

问题一:测试时速度缓慢
RCNN对于一张图像的候选框之间有大量重叠,提取特征时会有大量冗余。
Fast RCNN将整张图像归一化直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。

问题二:训练时速度慢
原因同上。
在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算

问题三:训练所需空间大
RCNN中独立的分类器和回归器需要大量特征作为训练样本。
而Fast RCNN把类别判断和位置精调都用深度网络实现,不再需要额外存储。

接下来依次介绍应对问题的方法:

特征提取网络

首先,将图像归一化为224*224,直接送入网络。
前五阶段是基础的:conv+Relu+Pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4,序号用于训练)。
在这里插入图片描述
注:文中给出了大中小三种网络,此处示出最大的一种。三种网络基本结构相似,仅conv+relu层数有差别,或者增删了norm层。

roi_pool层的测试(forward)

roi_pool层将每个候选区域均匀分成M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
在这里插入图片描述

roi_pool层的训练(backward)

在这里插入图片描述

网络参数训练

参数初始化

网络除去末尾部分如下图,在ImageNet上训练1000类分类器结果参数作为相应层的初始化参数
在这里插入图片描述
其余参数随机初始化。

分层数据
在调优训练时,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。
实际选择N=2, R=128。

训练数据构成
N张完整图片以50%概率水平翻转。
R个候选框的构成方式如下:

类别 比例 方式
前景 25% 与某个真值重叠在[0.5,1]的候选框
背景 75% 与真值重叠的最大值在[0.1,0.5]的候选框

分类与位置调整

数据结构

第五阶段的特征输入到两个并行的全连接层中(称为mutil-task)。
在这里插入图片描述
cls_score层:用于分类,输出K+1维数组p,表示属于K类和背景的概率。
bbox_prdict层:用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

SoftmaxWithLoss和Softmax是什么意思?
Softmax回归模型是logistic回归模型在多分类问题上的推广,在多分类问题中,待分类的类别数量大于2,且类别之间互斥。比如我们的网络要完成的功能是识别0-9这10个手写数字,若最后一层的输出为[0,1,0, 0, 0, 0, 0, 0, 0, 0],则表明我们网络的识别结果为数字1。

代价函数

在这里插入图片描述

全连接层提速

SVD(奇异值分解)
在这里插入图片描述

实验与结论

实验过程不再详述,只记录结论

  • 网络末端同步训练的分类和位置调整,提升准确度
  • 使用多尺度图像金字塔,性能几乎没有提高
  • 倍增训练数据,能够有2%-3%的准确度提升
  • 网络直接输出各类概率(Softmax),比SVM分类器性能略好
  • 更多候选窗不能提升性能
posted @ 2019-09-28 18:07  旅人_Eric  阅读(349)  评论(0编辑  收藏  举报