RCNN系列之Fast RCNN详解

 

转自:https://blog.csdn.net/u010725283/article/details/79017158

RCNN系列:RCNN,SPPNet,Fast RCNN,Faster RCNN,R-FCN。这一系列是个递进关系,也是目标检测使用two-stage方法的一个发展过程。想要更好的理解Faster RCNN和R-FCN,只能把这些算法都梳理清楚了,才能明白算法的整个优化过程。

本篇讲解的是Fast RCNN。2015年,在SPPNet之后发表在IEEE。

理解了SPPNet之后,我们知道了RCNN已经进化到了SPPNet阶段,那么,Fast RCNN又更进一步。

 

再看SPPNet过程:

  1.  使用selective search算法为每一张待检测的图片提取出2000左右的候选框,这一点和RCNN相同;
  2. 特征提取阶段,整个图片输入到SPPNet中,提取出整张图片的feature map,然后将原图上的候选框映射到feature map上。然后对各个候选框对应的feature map上的块做金字塔空间池化,提取出固定长度的特征向量;
  3. 使用SVM算法对得到的特征向量分类识别;
  4. 使用NMS做极大值抑制。

 

Fast RCNN的过程:

  1. 使用selective search算法为每一张待检测的图片提取出2000左右的候选框,这一点和RCNN相同;
  2. 特征提取阶段,同样是提取出整张图片的feature map,然后将原图上的候选框映射到feature map上。然后对各个候选框对应的feature map上的块做ROI pooling,提取出固定长度的特征向量;
  3. 对于上一步的每一个ROI,网络输出每个类的概率和每个bounding box;
  4. 最后,使用NMS算法。

Fast RCNN的整个算法流程如下图所示:

RCNN系列之Fast RCNN详解_第1张图片

Fast RCNN的最大贡献就是将SVM给去掉了,换句话说就是将分类器整合到了网络中,那么在训练过程中,由RCNN的三个阶段(selective search,CNN,SVM)到了Fast RCNN的两个阶段(selective search ,Fast RCNN)。用机器学习的角度来看,就是一个过程的全局最优要优于多个过程的全局最优。

这样就可以把Fast RCNN看作是一个分类器和回归器的整合。这个思想作者是借鉴了deepmultibox。

可以参考这篇:http://blog.csdn.net/u010725283/article/details/78816916

具体做法即是,使用Multi-task loss。

 

其中:

具体参数的设置可以参考论文。

 

那么有了loss后,最重要的就是迭代过程的设置,具体看最后一层的网络结构:

 

RCNN系列之Fast RCNN详解_第2张图片

 

cls_score层用于分类,输出K+1维数组,表示属于K类和背景的概率;

bbox_predict层用于bounding box,输出4*K维数组,表示各个物体和Ground truth的偏移量。

 

基础网络作者使用的是VGG。

具体可以参考这篇:http://blog.csdn.net/u010725283/article/details/78967498

连接详细讲解了VGG的网络结构。

 

Fast RCNN中一个关键点:ROI pooling

其实ROI pooling是SPP的一个特殊形式。ROI pooling只使用了一种尺度,统一将feature map映射到7*7的大小。

将SPP过程弄明白,ROI pooling就会很清楚了。

如果对SPP不熟悉,可以移步:http://blog.csdn.net/u010725283/article/details/79017070

 

总结:Fast RCNN比SPPNet又更近一步,将SVM整合到网络中,将三个阶段的训练过程整合为两个阶段。这样速度会提高,训练难度同样也会降低。

 

参考:

deepMultibox:http://blog.csdn.net/u010725283/article/details/78816916

VGG16:http://blog.csdn.net/u010725283/article/details/78967498

SPPNet:http://blog.csdn.net/u010725283/article/details/79017070

Fast R-CNN

你可能感兴趣的:(神经网络,图像识别)