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

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


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


综述

我们常说的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》获得了世界计算机视觉顶会CVPR的最佳论文奖

在这里插入图片描述
如上图所示,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%。

在这里插入图片描述

如上图所示,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 VOC 2007、2012和MS COCO数据集上,其检测精度也达到了最好的水平。

想要深入了解Faster R-CNN算法的盆友,可以参见我的另一篇博文:Faster R-CNN论文详解

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

原创文章 68 获赞 1126 访问量 4万+

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/105930512
今日推荐