Fast R-CNN算法

Fast r-cnn【1】是Ross Girshick在2015年对上一年的SPP-Net算法做的改进。作者在VGG16网络的测试表明:fast r-cnn在训练阶段比r-cnn快了9倍,比spp-net快了3倍;在测试阶段比r-cnn快了213倍,比spp-net快了10倍;同时精度也有一定提升。

1.解决问题

1)r-cnn 和 spp-net 的训练都需要经过多个阶段:fine-tuning得到网络卷积层的特征输出、SVM对每组特征向量的学习、位置bounding box的回归

2)对r-cnn,训练和测试的时间空间开销大。每个图像提取的大量roi特征需要存储和通过cnn

3)对spp-net,虽然roi特征在最后一个卷积层才提取,省去了多次前向cnn。但由于SVM,roi特征仍需存储。此外,spp-net中的tunning无法更新spp层之前的所有权重,因此对于比较深得网络无能为力

2.算法内容


è¿éåå¾çæè¿°

Fast R-CNN框架与R-CNN有两处不同:

① 最后一个卷积层后加了一个ROI pooling layer;ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。简单讲可以看做是SPPNet的简化版本

什么是ROI呢?
ROI是Region of Interest的简写,指的是在“特征图上的框”;
1)在Fast RCNN中, RoI是指Selective Search完成后得到的“候选框”在特征图上的映射,如下图所示;
2)在Faster RCNN中,候选框是经过RPN产生的,然后再把各个“候选框”映射到特征图上,得到RoIs。

è¿éåå¾çæè¿°

ROI Pooling的输入
输入有两部分组成: 
1. 特征图:指的是图1中所示的特征图,在Fast RCNN中,它位于RoI Pooling之前,在Faster RCNN中,它是与RPN共享那个特征图,通常我们常常称之为“share_conv”; 
2. rois:在Fast RCNN中,指的是Selective Search的输出;在Faster RCNN中指的是RPN的输出,一堆矩形候选框框,形状为1x5x1x1(4个坐标+索引index),其中值得注意的是:坐标的参考系不是针对feature map这张图的,而是针对原图的(神经网络最开始的输入)

ROI Pooling的输出
输出是batch个vector,其中batch的值等于RoI的个数,vector的大小为channel * w * h;RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框;

② 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。

猜你喜欢

转载自blog.csdn.net/qq_38284204/article/details/83626220
今日推荐