Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN

Background:

  • 论文发表之前的一段时间内,Object detection以mAP(mean Average precision)进展缓慢,于是有些大神开始将Classification和Localization进行结合,从而诞生出一系列优秀的Detection方法
     1. propose R-CNNpaper:R-CNN
     1.5.SPPNet 对R-CNN做出了重大改进paper:SPPNet
     2. 解决R-CNN瓶颈问题,提出了Fast R-CNNpaper: Fast R-CNN
     3. 解决Fast R-CNN瓶颈问题,提出了Faster R-CNNpaper:Faster R-CNN
     在此之间,还有一个SPPNet的东西,为Fast R-CNN做出了卓越贡献
    对Object Detection的理解,就是在Classification的基础上,加上Locailzation,貌似很简单哈。但是在实践过程中,会遇到各种问题,such as:object’size、angle、multi object and so on.
  • 一图理解CV task:
    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第1张图片
    图1.Computer Vision Task。现在的R-CNN/Fast R-CNN/Faster R-CNN都是在解决Object Detection,说白了,就是multi target 的Classification+Localization。
  • introduce IOU(how to evalute the accuracy of Localization?)
    我们如何衡量Localization的BBox的精度?我们一般使用IOU指标来衡量:
    IOU=SASBSASB I O U = S A ∩ S B S A ∪ S B

    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第2张图片
    图2:

R-CNN

  • 啥都不说,先上图,看图说话:
    Classification网络结构大家都懂,我们在其基础上修改尾部,将其变为Localization的网络
    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第3张图片
    图3:我们保留网络的卷积层,为了输出BBox,我们至少需要4个关于坐标信息x,y,width和height,于是我们针对specific task修改网络的output,从而变成一个回归问题,我们在Localization任务中,使用的L2 loss作为损失函数,即欧氏距离。网络结构如下所示
    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第4张图片图4:R-CNN Architecture。此model包含3个important parts:①extracts around 2000 region proposals(挑选出2K个候选框,paper中采用的是selective search选框方式)②computes features for each proposal using a large convolutional neural network(针对每一个候选框使用CNN计算其对应的feature map)③classifies each region using class-specific linear SVMs(针对每一个候选框,使用总类别个数的Linear-SVMs对其进行分类,是则positive,否则negative)。
  • 在这里我们就会发现R-CNN的一些弊端
    • 假如我们选择了2K个候选框,R-CNN对每个候选框图片均进行了卷积+池化。。。于是一幅图片活生生要进行2K次forward。。。time wasting…
    • 在Training时,Classification和Localization需要用到features map,于是我们需要存储Alexnet中P5的result,于是一幅图片大概需要2K倍的存储空间
    • 注:我们这里使用的是Alexnet,但是要求就是input data固定大小,如何保证我们的候选框是符合要求的呢?(假设输入图片大小必须为227*227),我们如何对候选框图片进行crop/wrap呢?
      • 各向异性缩放:不管图像长宽比例,直接缩放(有可能使图像变形,损失图像空间信息)
      • 各向同性缩放:①直接在原始图片中,把BBox的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充。②先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值)

SPPNet

  • 这里很有必要介绍一下SPPNet(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition),这是凯明大神的杰作。之前经典网络的结构必须要求网络的输入为固定size,这样的规定导致无法利用不同尺寸的图像或者导致图像空间信息的丢失。于是凯明大神提出了一种新的pooling方法,叫做spatial pyramid pooling,没错,就是空间金字塔池化。这种方法还用在Object Detection上。
  • 神经网络一般包含两个部分:Conv+FC=NN,其中Conv负责提取各种特征,包括低阶/高阶;FC负责组合特征。其中的Conv不受输入图像的大小影响,FC其实也不受其影响,但是Conv和FC相连接的部分,尺寸必须固定,就是说最后一次卷积操作得到的feature map大小必须是固定的,这就大大限制了图像的原始输入大小。
  • 在SPPNet之前的pooling+FC大都通过两种方式进行实现(我们将最后一次卷积得到的feature map记为 whc=fm w ∗ h ∗ c = f m ):①fm经过avg/max pooling之后得到 w1h1c w 1 ∗ h 1 ∗ c reval,之后和FC相连接;②fm经过avg/max pooling(此时的pooling kernel大小是w * h),此时得到 11c 1 ∗ 1 ∗ c ,然后通过卷积的方式实现FC,这种方式较第一种方式快。这两种方式都要求fm的size是固定的,否则没法玩。。
  • SPPNet提出了空间金字塔池化,让我们瞄一眼网络结构:Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第5张图片 好啦,网络结构大致如此
  • 之后做的实验包括image Classification和Object Detection:
    • 看下Classification的结果:Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第6张图片 可以看到,使用ssp的池化方式,可以使Classification top1/top5 error均有降低。
    • 着重看一下Object Detection,我们现在已经有了针对不同size的feature map的处理方式,那现在可以避免R-CNN重crop/warp的操作,除此之外,我们不对每个proposal都进行forward操作(这种方式包含了大量的重复操作),转而对整副图像进行。这里还是借鉴了R-CNN的selective-search方法,找到candidate window,然后采用ssp池化方式得到固定大小的特征向量。Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第7张图片
    • 但是SPPNet没有改掉R-CNN中的另外一个drawback,就是需要将目标的特征保存下来,为训练SVM准备素材,这使得消耗大量的空间,整个过程也不是很连贯,于是MSRA的rbg横空出现,提出了Fast R-CNN。

Fast R-CNN

  • 将R-CNN/SPPNet的运算的主要瓶颈问题解决掉,就是Fast R-CNN,先看下”fast”了多少( is 213× faster at test-time, and achieves a higher mAP on PASCAL VOC 2012. Compared to SPPnet, Fast R-CNN trains VGG16 3× faster, tests 10× faster, and is more accurate)。理解为 又快又好。
    • 在faster R-CNN中,rbg大神详尽分析了R-CNN的drawbacks:
      • 1).训练是个多阶段的过程:①使用微调的ConvNet对proposals进行训练(使用log loss做损失函数);②使用SVMs取代softmax做分类器,效果更好;③bbx的回归,使得proposal更精确
      • 2).训练模型消耗了大量的时间和空间资源:我们从每一张图片中提取proposal(roughly 2K)的特征并保存到disk中。
      • 3).测试时 太慢:features are extracted from each object proposal in each test image. Detection with VGG16 takes 47s / image (on a GPU)
    • 批评完人家,就到了褒奖自己的时候:
      • 1).Higher detection quality (mAP) than R-CNN, SPPnet:达到了比R-CNN和SPPNet更好的mean average precision;
      • 2).Training is single-stage, using a multi-task loss:通过改变传统的损失函数为多目标损失函数,将训练过程简化为单一的过程;
      • 3).Training can update all network layers:训练可以更新所有层的参数,而R-CNN和SPPNet则不行(说实话,这个不大明白)
      • 4).No disk storage is required for feature caching:节省了disk空间
  • 上图,看图说话:
    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第8张图片
    图5:R-CNN进化版Fast R-CNN,摒弃了提取2K个候选框图片进行CNN forward的工程,将整个图片只进行一次CNN forward。
    • 图中有一个ROI pooling,可理解为只有一层的SSP pooling,详细解释下:
      • 假设我们的proposal映射到feature map上为(r,c,h,w)表示,其中(r,c)表示左上角,而(h,w)则代表高度和宽度。这一层使用max pooling,将RoI区域转化成固定大小的 H*W 的特征图(H和W是取决于任何特定RoI层的超参数),RoI 最大池化通过将 h×w RoI窗口划分为 h / H × w / W个子窗口网格,子窗口大小固定为 H × W ,然后将每个子窗口中的值max pooling到相应的输出网格单元 。这是SPP pooling层的一个简化版,即只有一层的。
      • 其作用主要有两个:①将原始图像中的proposal映射到feature map中的patch上;②通过SPP pooling的简化版–ROI pooling,将图像中的proposal转化为固定长度的特征。
    • 做了很多实验,总之就是 “fast” 了。

Faster R-CNN

  • 将Fast R-CNN的瓶颈问题解决掉,就是Faster R-CNN,还有啥drawback?那个那个耗时0.3s的提取selective-search方法就是瓶颈,卧槽真牛X
  • 先上图,看图说话
    Object Detection 之 R-CNN/SPPNet/Fast R-CNN/Faster R-CNN_第9张图片
    图6:好了,现在放弃了候选框的选择了,变成了使用网络来学习BBox,其中有个重要的改变就是引入了RPN net,这个神奇的RNP网络可以说是一个独立的网络,由conv/FC组成,有自己的损失函数并产生建议框。
    • 改进Fast R-CNN的drawback:依靠selective-search产生proposal,Faster R-CNN通过网络学习proposal。具体做法:在Fast R-CNN的基础上,通过Conv之后得到feature map之后,进入由conv/Fc构成的RPN,产生自己的损失函数和输出建议框,于是此时的Faster R-CNN就有4个损失函数:
      • Fast R-CNN Classification loss
      • Fast R-CNN regression loss
      • RPN regression loss
      • RPN classification loss
    • 于是Faster R-CNN的过程如下:①使用ConvNet产生feature map,称为fm;②将fm送入RPN,得到候选框的信息,产生两个损失函数(RPN regression loss/RPN classification loss);③将fm和RPN产生的建议框组合,使用ROI pooling,判断是不是属于目标类;④使用regression对bbx进行回归。

至此,Object Detection的R-CNN/SPPNet/Fast R-CNN/Faster R-CNN分析完毕。

作者:gengmiao 时间:2018.05.05,原创文章,转载请保留原文地址、作者等信息

你可能感兴趣的:(Deep,Learning,RNN,DL,RNN进化史,Object,Detection)