目标检测(五)——Fast R-CNN

arxiv: http://arxiv.org/abs/1504.08083
github: https://github.com/rbgirshick/fast-rcnn
slides: http://tutorial.caffe.berkeleyvision.org/caffe-cvpr15-detection.pdf
目标检测(五)——Fast R-CNN_第1张图片

针对SPP-Net算法的问题,2015年微软研究院的Ross B. Girshick又提出一种改进的Fast R-CNN算法,借鉴SPP-Net算法结构,设计一种ROI pooling的池化层结构,有效解决R-CNN算法必须将图像区域剪裁、缩放到相同尺寸大小的操作。

算法流程

  1. 输入的是一张完整图片图像归一化为224×224和一组(约2000个)物体建议框(也叫RoIs)送入网络。
  2. 对Conv feature map进行特征提取。每一个区域经过RoI pooling layer和FC layers得到一个固定长度的feature vector,这里需要注意的是,输入到后面RoI pooling layer的feature map是在Conv feature map上提取的。虽然在最开始也提取出了大量的RoI,但他们还是作为整体输入进卷积网络的,最开始提取出的RoI区域只是为了最后的Bounding box 回归时使用,用来输出原图中的位置。
  3. 这些特征向量在经过全接连层之后进入两个并列的输出层。第一个是分类,使用softmax,第二个是每一类的bounding box回归。利用SoftMax Loss和Smooth L1 Loss对分类概率和边框回归(Bounding Box Regression)联合训练。
    整个结构是使用多任务损失的端到端训练(trained end-to-end with a multi-task loss)。

创新点

  • 提出RoI Pooling 层,它将不同大小候选框的卷积特征图统一采样成固定大小的特征。
  • 独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间,Fast-RCNN把类别判断和位置回归统一用深度神经网络实现,不再需要额外存储。

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

ROI Pooling的输入
输入有两部分组成:

  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)的矩形框;

ROI Pooling的过程
  先把ROI中的坐标映射到feature map上,映射规则比较简单,就是把各个坐标除以“输入图片与feature map的大小的比值”,得到了feature map上的box坐标后,使用Pooling得到输出;由于输入的图片大小不一,所以这里使用的类似Spp Pooling,在Pooling的过程中需要计算Pooling后的结果对应到feature map上所占的范围,然后在那个范围中进行取max或者取average。


目标检测(五)——Fast R-CNN_第2张图片

  • cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。
  • bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

最后一个阶段的特征输入到两个并行的全连层中。
一个是对区域的分类Softmax(包括背景),另一个是对bounding box回归的微调。在SVM和Softmax的对比实验中说明,SVM的优势并不明显,故直接用Softmax将整个网络整合训练更好。总代价为两者加权和,Fast-RCNN把两个回归的loss进行联合训练。

##参考
Fast R-CNN

你可能感兴趣的:(目标检测)