R-CNN、Fast R-CNN、Faster R-CNN和Mask R-CNN——双阶段目标检测算法的进阶之路

综述

R-CNN(CVPR 2014)、Fast R-CNN(ICCV 2015)、Faster R-CNN(Nips 2015)以及何凯明大神的Mask R-CNN(ICCV 2017)是双阶段目标检测网络的代表作。从命名上看,R是Region的缩写,CNN指卷积神经网络。那么R-CNN指的就是使用推荐区域的卷积神经网络。而后续的Fast和Faster版本解决的是检测实时性的问题,Mask解决的是在检测大致位置基础上检测形状的问题。其中,R-CNN和Fast R-CNN采用的是传统的SS算法生成推荐区域,计算非常耗时。Faster R-CNN在它们的基础上将区域建议的生成融入了网络,大大提高了图像处理的效率。而Mask R-CNN在Faster R-CNN的基础上增加了一个额外的分支(用于生成像素级对象掩码Mask的部分),用于进行像素级别的对象分割。这允许它不仅定位和识别图像中的每个对象,还能精确地绘制出每个对象的形状

在本文中,我们将对这四个双阶段目标检测算法进行探究,一同探索R-CNN的进阶之路。

一、R-CNN

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

如上图所示,R-CNN目标检测算法流程主要分为四个步骤:

1.接收输入的图像;

2.采用SS(Selective Search)方法,提取大约2000个自下而上的推荐区域(region proposals);

3.通过AlexNet(CNN的一种)提取每个推荐区域的特征,得到1*4096的特征向量;

4.将每一个特征向量送入每一类的线性SVM分类器,判断是否属于该类。对已分类的推荐区域进行线性回归,对这些框进行精细地调整,得到更加准确的边界框坐标;

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

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

二、Fast R-CNN

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

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

  1. 接收输入的图片;
  2. 使用SS(Selective Search)方法,使一张图片生成2000个左右的推荐区域;
  3. 将完整的图像输入到VGG-16(CNN的一种)得到相应的特征图,然后将已经生成的候选框投影到特征图上获得相应的特征矩阵;
  4. 将每个特征矩阵通过ROI Pooling层缩放到7*7大小,然后通过两个全连接层(FCs)将特征图展平为一维向量,再通过一系列全连接层和激活函数/回归器得到预测的类别信息和目标边界框信息;

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数据集上,其检测精度也达到了最好的水平。

                       

如上图所示,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 R-CNN通过SS算法在原始图像上生成推荐区域,Faster R-CNN通过RPN特征图上生成推荐区域。RPN在特征图上滑动,根据特征来提出可能包含目标的区域。这个过程更加高效,因为它避免了在原始图像上单独运行区域建议算法的需要,而是直接在特征提取阶段集成了这一步骤。

直接在特征图上生成推荐区域(如在Faster R-CNN中所做的)通常比在原始图像上生成推荐区域(如在Fast R-CNN中所做的)更快,原因有几个:

  1. 计算效率:在原始图像上生成区域建议,如选择性搜索等算法,通常是计算密集型的,且与深度学习模型的其他部分是分离的。这意味着需要额外的计算步骤。而在特征图上生成区域建议,如Faster R-CNN中的RPN,是与模型的主体卷积层共享计算资源(特征图)的。这种共享减少了总体计算量。

  2. 尺度变化:特征图通常比原始图像有更小的尺寸(由于卷积和池化操作)。在这些较小的特征图上操作比在原始的、通常更大的图像上操作计算成本要低。

  3. 端到端训练:在Faster R-CNN中,区域建议网络(RPN)与检测网络可以同时训练。这种端到端的训练方式比分步骤的训练(先独立生成区域建议,再进行目标检测)更高效。这不仅加快了训练速度,还有助于提高模型整体的性能。

  4. 特征重用:在Faster R-CNN中,RPN和主目标检测网络共享相同的卷积层。这意味着对于区域建议和目标检测,都使用了同一套提取的特征。这种特征的重用使得模型更加高效,因为不需要为两个不同的任务分别计算特征。

总之,直接在特征图上生成区域建议的方法更快,主要是因为它更加计算高效,能够重用特征,并且能够与目标检测网络进行更好的集成。

四、Mask R-CNN

在2017年,由何凯明、吉拉德·皮奥特、Ross Girshick 和 He Sun 组成的研究团队提出了Mask R-CNN,这是一种革命性的用于实例分割的算法,它在Faster R-CNN的基础上进一步扩展。Mask R-CNN不仅能够进行高精度的目标检测,还能为每个检测到的对象生成一个高质量的分割掩膜(mask),从而实现了对图像中每个对象的精确像素级分割

在实例分割中,掩膜是对图像中每个像素点的分类,以确定它们是否属于某个特定的物体实例。如果特征(物体自身的特征空间特征)提取更加精确,那么掩膜生成也将更加精确,从而提高整个模型的分割性能。

  • Mask R-CNN采用了一种称为RoIAlign的技术。它通过使用双线性插值来避免量化操作,从而更精确地从特征图中提取对应RoI的富含空间信息的特征,而这种精确性直接影响到掩膜的生成。同时这项技术可以精确地保持空间位置信息,解决了Faster R-CNN中使用的RoIPooling方法的定位不准确问题。
  • Mask R-CNN算法在Faster R-CNN的架构基础上增加了一个并行的掩膜预测分支。这个分支在每个感兴趣区域(Region of Interest, RoI)上,使用全卷积网络(FCN)来预测对象的掩膜。此设计使得网络能够更细致地学习物体的空间特征,如形状和轮廓,因为掩膜生成要求网络精确地识别和理解每个像素点是否属于前景对象。
  • 此处的空间特征指的是物体的形状、轮廓对象内部各个像素点的相对位置和排列方式等。

当使用深度残差网络(如ResNet)作为其骨干网络时,基于Mask R-CNN的系统在GPU上能够实现高效的运算性能,并且在PASCAL VOC和MS COCO等多个重要的数据集上达到了当时的最佳分割和检测精度。Mask R-CNN凭借其出色的准确度和灵活性,成为了计算机视觉领域实例分割任务的重要里程碑。

                         

Mask R-CNN是一种用于实例分割的深度学习模型,它用ROI Align替换了ROI Pooling,并扩展了Faster R-CNN的目标检测框架,添加了一个用于生成对象掩码(Mask)的分支。如上图所示,Mask R-CNN算法流程主要有以下5个步骤:

  1. 特征提取:Mask R-CNN首先将输入图像通过一个深度卷积网络(如ResNet加上特征金字塔网络FPN),生成高级的特征图。与Faster R-CNN相同,这一步骤生成的计算资源(特征图)和后续的区域建议共享,提高了计算效率。

  2. 区域提议:利用区域提议网络(RPN)在特征图上生成区域提议(Region Proposals)。这一步骤整合在深度学习模型中,使得模型可以端到端训练,提高了训练的效率和性能。

  3. RoI Align:为了保持特征的空间精度,Mask R-CNN使用了RoI Align代替Faster R-CNN中的RoI Pooling。RoI Align通过双线性插值精确地对齐特征图和原始RoI,避免了RoI Pooling中的量化误差,从而更加准确的获取推荐区域的空间特征。

  4. 分类与边界框回归:每个区域提议通过RoI Align后,特征被送入两个并行的全连接层分支:一个用于分类(Class)和边界框回归(Box),与Faster R-CNN相似,这两个分支共享RoI Align得到的特征。

  5. 掩码预测:与此同时,RoI Align的特征被送入第三个分支——掩码预测分支。这个分支由几个卷积层构成,并最终通过sigmoid激活函数输出每个像素是否属于对象的概率。这样,模型生成了每个区域提议的像素级掩码,用于实例分割。

综上所述,Mask R-CNN通过Rol Align增加掩码预测分支,不仅能够检测和分类图像中的对象,还能生成每个对象的精确像素级掩码,实现了比Faster R-CNN更为高级的实例分割功能。同时,它继承了Faster R-CNN的计算效率端到端训练的优点,即Mask R-CNN的所有部分——特征提取、RPN、分类、边界框回归以及掩码预测——可以在一个统一的网络中端到端训练。这样的训练方式不仅提高了模型的性能,也保证了检测和分割任务之间的一致性和精度,使得模型在实例分割任务中表现出色。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-18 12:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-18 12:50:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-18 12:50:01       82 阅读
  4. Python语言-面向对象

    2024-02-18 12:50:01       91 阅读

热门阅读

  1. 上传包到npm

    2024-02-18 12:50:01       51 阅读
  2. 建造者模式

    2024-02-18 12:50:01       45 阅读
  3. 基于stm32的厨房安全系统设计

    2024-02-18 12:50:01       43 阅读
  4. html5移动端适配;检测浏览器信息函数

    2024-02-18 12:50:01       52 阅读
  5. C语言系列9——动态内存分配与释放

    2024-02-18 12:50:01       56 阅读
  6. CCF编程能力等级认证GESP—C++4级—20231209

    2024-02-18 12:50:01       81 阅读