Fast-RCNN是 Ross Girshick继RCNN之后,在2015年推出的目标检测算法,大幅提升了目标检测的速度。同样使用最大规模的网络,Fast RCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%-67%之间。
RCNN的缺点
Fast RCNN的改进
Fast-RCNN流程
框架基于VGGNet。图像归一化为224*224后直接送入网络。先提取出特征,再输入候选区。
在五层卷积层后,有一个roi pooling层。输入卷积后的feature map,和region proposal,提取固定大小的feature map。
在实际训练中,每个mini-batch包含2张图像和128个region proposal(或者叫ROI),也就是每张图像有64个ROI。然后从这些ROI中挑选约25%的ROI,这些ROI和ground truth的IOU值都大于0.5。另外只采用随机水平翻转的方式增加数据集。
测试的时候则每张图像大约2000个ROI。
roi pooling将每个候选区均匀分成M*N块,对每块进行Max pooling。将大小不一的候选区域转换为大小统一的数据。
去除末尾部分,先用CNN网络训练,结果参数作为相应层的初始化参数,其余参数随机初始化。
由于全连接层的计算占整个网络的将近一半,Fast RCNN采用SVD分解改进全连接层。一个大的矩阵可以近似分解为三个小矩阵的乘积,分解后的矩阵的元素数目远小于原始矩阵的元素数目,从而达到减少计算量的目的。通过对全连接层的权值矩阵进行SVD分解,使得处理一张图像的速度明显提升。
将提取的特征输入到两个并行的全连接层中,cls_score和bbox_predict。
其中cls_score层用于分类,输出K+1维数组,表示属于k类和背景的概率。
bbox_predict层用于调整候选区域位置,输出对应类时,平移缩放的参数。
Fast RCNN使用softmax代替SVM分类,使得目标检测的步骤减少。将整个过程简化为提取roi和CNN训练两个阶段。
loss_cls层评估分类代价。由真实分类u对应的概率决定:
Lcls=−logpu
loss_bbox评估检测框定位代价。比较真实分类对应的预测参数tu和真实平移缩放参数为v的差别:
Lloc=Σi=14g(ti−vi)
g为Smooth L1误差,对outlier不敏感:
g(x)={0.5x2∣x∣−0.5∣x∣<1otherwise
总代价为两者加权和,如果分类为背景则不考虑定位代价:
L={Lcls+λLlocLclsu为前景u为背景
reference:
本文链接:http://task.lmcjl.com/news/12538.html