R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

文章目录

    • 综述
    • 一、R-CNN
    • 二、Fast R-CNN
    • 三、Faster R-CNN

温馨提示:Faster R-CNN目标检测 实战手把手教程也将在下周更新,想学习的盆友,可以关注我的博客动态。

R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第1张图片


综述

R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第2张图片我们常说的R-CNN系列,一共包含三个版本:R-CNN、Fast R-CNN、Faster R-CNN。从命名上看,R是Region的缩写,CNN指我们常说的卷积神经网络。那么R-CNN其实就是使用推荐区域的卷积神经网络。由Fast、Faster很容易知道,版本的更迭解决的是一个实时性的问题

R-CNN算法最早在2013年被提出,它的出现打开了运用深度学习进行目标检测的大门,从此之后,目标检测的精准度与实时性被不断刷新。R-CNN系列算法自提出之际,就非常引人注目,以至于在之后的很多经典算法中,如SSD、YOLO系列、Mask R-CNN中都能看到它的影子。

学习R-CNN系列算法不仅能够让我们了解到基础的目标检测算法的思路,而且能够让学习者更加轻松地掌握SSD、YOLO系列、Mask R-CNN等算法。因为相比一些one-stage 的目标检测算法,Faster R-CNN作为two-stage的算法理解起来并不算简单。正是如此,当我们掌握了R-CNN系列算法后,再去学习经典的one-stage算法,就会变得异常简单。

R-CNN、Fast R-CNN采用的还是传统的SS算法生成推荐区域,计算非常耗时,达不到实时检测的效果。直到Faster R-CNN才使用RPN代替了原来的SS算法,才使得目标检测的时间大大缩短,达到实时性的效果。因此,本篇博客先会对R-CNN、Fast R-CNN进行一个简明扼要地讲解,大家只需了解算法的思路和演进过程即可;之后,会着重讲解R-CNN 系列的灵魂之作——Faster R-CNN,而这部分才是大家需要着重了解的

一、R-CNN

2013年11月,Ross Girshick等人最早提出了R-CNN算法,打开了利用深度学习进行目标检测的大门。在当时来说,R-CNN算法的目标检测水平超群,比传统的目标检测方法有了很大提升。实验表明,R-CNN算法在PASCAL VOC数据集取得了很好的成绩,这种算法的平均精确度比之前在VOC2012数据集上的测试效果(53.3%)还要高出30%。并且,由该算法提出的论文《Rich feature hierarchies for accurate object detection and semantic segmentation》获得了世界计算机视觉顶会CVPR2014的最佳论文奖

R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第3张图片
如上图所示,R-CNN目标检测算法流程主要分四个步骤:

  1. 使用SS(Selective Search)方法,使一张图片生成1000~2000个候选区域(region proposals)。
  2. 对每一个候选区域,都使用深度神经网络(AlexNet)提取特征,得到1*4096的特征向量。
  3. 将每一个特征向量送入每一类的SVM分类器,判断是否属于该类。
  4. 对已分类的推荐框进行线性回归,对这些框进行精细地调整,得到更加准确的边界框坐标。
    注:回归器细节将在后文Faster R-CNN中具体讲解。

R-CNN算法的检测效果很好,但是检测速度很慢,因此总体效率不高。其主要原因在于:

  • 提取特征操作非常冗余。检测时,需要将每个推荐区域都送入训练好的模型(AlexNet)进行前向传播,因此每张图片大约要进行1000~2000次前向传播。
  • 训练速度慢,过程繁琐。要单独分别训练三个不同的模型:CNN用来提取图像特征、SVM分类器用来预测类别、回归器精细修正建议框的位置。分开训练,耗时耗力。
  • 使用Selective Search算法生成推荐区域,这个过程大约耗时2s,也是它不能达到实时性检测的一个原因。

二、Fast R-CNN

2015年,Ross Girshick等人在R-CNN的基础上进行了改进,解决了上述影响R-CNN效率的前两个问题。与R-CNN相比,训练速度快了9倍;测试速度快了213倍;在Pascal VOC数据集上,准确率从62%提升到了66%。

R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第4张图片

如上图所示,Fast R-CNN算法的流程主要分为下面三个步骤:

  • 依然先使用SS(Selective Search)方法,使一张图片生成1000~2000个候选区域。
  • 将图像输入到一个CNN(VGG-16)得到相应的特征图,然后将已经生成的候选框投影到特征图上获得相应的特征矩阵。
  • 将每个特征矩阵通过ROI Pooling层缩放到7*7大小,然后将特征图展平,在通过一系列全连接层得到预测的类别信息和目标边界框信息。

Fast R-CNN的改进点:

  • ROI Pooling层。这个方法是针对R-CNN的第一个问题提出来的,用来解决提取特征操作冗余的问题,避免每个推荐区域都要送入CNN进行前向计算。核心思路是:将图像只输入CNN提取特征,只进行一次前向计算。得到的特征图由全部推荐区域共享。然后再将推荐区域(SS算法得到)投影到特征图上,获得每个推荐区域对应的特征图区域。最后使用ROI Pooling层将每个特征图区域下采样到7*7大小。
  • 将原来三个模型整合到一个网络,易与训练。R-CNN算法使用三个不同的模型,需要分别训练,训练过程非常复杂。在Fast R-CNN中,直接将CNN、分类器、边界框回归器整合到一个网络,便于训练,极大地提高了训练的速度。

Fast R-CNN的瓶颈:
虽然Fast R-CNN算法在检测速度和精确度上了很大的提升。但是它仍然不能满足实时目标检测,最大的原因在于:采用SS算法生成推荐区域的方法很耗时,处理每张图像大约需要消耗2秒,大大限制了目标检测的速度。

三、Faster R-CNN

2015年,由任少卿、何凯明、Ross Girshick、孙剑组成的微软研究团队,提出了Region Proposal Networks取代了原来的SS算法,几乎不消耗计算时间,使得生成推荐区域过程变得非常高效,解决了Fast R-CNN的瓶颈问题

Faster R-CNN算法将Region Proposal Networks与Fast R-CNN进一步合并为一个单个网络。当采用非常深的VGG-16模型作为骨干网络时,基于该方法的检测系统在GPU上的帧速率为5fps,基本达到实时检测的水平。同时在PASCAL VOC2007、2012和MS COCO数据集上,其检测精度也达到了最好的水平。

R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第5张图片
如上图所示,Faster R-CNN算法流程主要有以下4个步骤:

  1. Conv layers。首先将图像输入到CNN(VGG-16)提取图像特征,得到的feature maps 将被共享用于后面的RPN和ROI Pooling。
  2. Region Proposal Networks。RPN用于生成推荐区域。该网络通过softmax判断anchors属于positive还是negative,再利用边界框回归修正anchors获得精确的推荐框proposals。
  3. ROI Pooling。该层以feature maps和proposals同时作为输入,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
  4. Classifer。将proposal feature maps输入全连接层与预测proposals的类别;同时再次进行边界框回归,获得检测框最终的精确位置。

相比Fast-RCNN,改进后的Faster R-CNN算法不仅速度上很很大提升,基本可以达到实时的检测帧率;检测精度也有所提高
Faster R-CNN在 PASCAL VOC 数据集上的检测效果:
R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第6张图片
Faster R-CNN在 MS COCO 数据集上的检测效果:
R-CNN系列算法详解:R-CNN —》Fast R-CNN —》Faster R-CNN 进阶之路_第7张图片
想要深入了解Faster R-CNN算法的盆友,可以参见我的另一篇博文:Faster R-CNN论文详解

本博文会持续更新,敬请期待。。。

你可能感兴趣的:(深度学习->目标检测,计算机视觉,神经网络,目标检测,RCNN,深度学习)