R-CNN、Fast RCNN和Faster RCNN的详细讲解

R-CNN、Fast RCNN和Faster RCNN的详细讲解


文章目录

  • R-CNN、Fast RCNN和Faster RCNN的详细讲解
  • 前言
  • R-CNN
    • R-CNN算法流程
    • R-CNN框架
      • 1. 候选区域的生成
      • 2. 对每个候选区域,使用深度网络提取特征。
      • 3. 特征送入每一类的SVM分类器,判定类别
      • 4.使用过回归器惊喜修正候选框位置
      • R-CNN存在的问题:
  • Fast R-CNN
    • Fast R-CNN算法流程
    • Fast R-CNN框架
      • R-CNN和Fast R-CNN生成候选框的区别
      • ROI Pooling工作原理
      • 如何根据和预测的回归参数得到预测边界框?
  • Faster R-CNN
    • Faster R-CNN算法流程
    • Faster R-CNN框架
      • RPN网络结构
      • 2k个目标概率值和4k个边界框回归参数是如何影响边界框位置?
      • RPN损失计算
      • Faster R-CNN的训练
  • R-CNN、Fast R-CNN和Faster R-CNN的框架比较


前言

本文根据原论文对R-CNN、Fast RCNN和Faster RCNN网络进行了详细讲解。


R-CNN

R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。

R-CNN算法流程

R-CNN算法流程可以分为4步:

  • 一张图像生成1K~4K个候选区域(使用Selective Search方法)
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类分类器,判别是否属于该类
  • 使用回归器惊喜修正候选框位置

R-CNN框架

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第1张图片

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第2张图片


1. 候选区域的生成

利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

如下图所示,通过SS算法可以可以获得一系类的矩形框,在矩形框中可能包含我们所要检测的目标。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第3张图片


2. 对每个候选区域,使用深度网络提取特征。

通过SS算法可以再一张图片中生成大概2000个候选区域,将候选区域送到CNN网络之前先进行resize处理,将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第4张图片


3. 特征送入每一类的SVM分类器,判定类别

将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第5张图片

如图所示,最前面是2000×4096维特征向量,其中每一行表示一个候选框通过CNN网络得到的向量,因为有2000个候选区域,所以有2000行。中间是SVM权值矩阵,每一列对应一个类别的权值向量,因为有20个类别,所以有20列,最后相乘后得到2000×20的概率矩阵。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第6张图片
接下来就是使用非极大抑制剔除重叠建议框

在这里插入图片描述
R-CNN、Fast RCNN和Faster RCNN的详细讲解_第7张图片
非极大抑制剔除重叠建议框流程:

  • 寻找得分最高的目标
  • 计算其他目标与该目标的IoU值
  • 删除所有IoU值大于给定阀值的目标
  • 在剩下的边界框中重复前三步,直到将所有边界框遍历完

4.使用过回归器惊喜修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding boX。

如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第8张图片


R-CNN存在的问题:

  • 检测速度慢

测试一张图片约53s (CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。

  • 训练速度慢

过程极其复杂

  • 训练所需空间大

对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOCO7训练集上的5k图像上提取的特征需要数百GB的存储空间。


Fast R-CNN

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。

Fast R-CNN算法流程

Fast R-CNN算法流程可分为3个步骤

  • 一张图片生成1K~2K个候选区域(使用Selective Search方法)
  • 将图像输入到网络得到相应的特征图。将SS算法生成的候选区域投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层错放到7 X 7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

Fast R-CNN框架

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第9张图片

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第10张图片


R-CNN和Fast R-CNN生成候选框的区别

如图为R-CNN生成候选框的过程,首先对每一个候选区域进行缩放,然后在输入到网络中获得特征,所以通过SS算法获得2000个候选框,那么就要进行2000正向传播,这就造成了冗余,因为候选区域存在大量重叠的部分。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第11张图片

下图为Fast R-CNN生成候选框的过程,它时是直接将整张图像输入到CNN中得到特征图,然后根据候选区域和特征图对应的映射关系,直接在特征图中获取特征矩阵,这样可以避免重复区域部分的计算。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第12张图片

ROI Pooling层将后将候选框统一缩放到统一尺寸


ROI Pooling工作原理

假设下图中的左边图为一个候选区域对应的一个特征矩阵,将特征矩阵划分为7X7 的49等份,然后对分一个区域进行最大池化下采样操作,得到如图右所示的7X7特征矩阵。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第13张图片

在Fast R-CNN的最后并联了两个全连接层,第一个全连接层用于目标概率的预测,第二个全连接层用于边界框回归参数的预测

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第14张图片

对目标概率预测分类器的说明

目标概率预测分类器输出N+1个类别概率,其中N为检测目标的种类,1
为背景,以PASCAL VOC为例,它有20个类别,则会输出21个概率类别,第一个概率为候选框为背景的概率,全连接中有21个节点。

在这里插入图片描述

对边界框回归器的说明

边界框回归器会输出N+1个类别候选边界框回归参数(d_x,d_y,d_w,d_h),因为每个类别对应四个候选边界框回归参数,所以全连接层有(N+1)x4个节点。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第15张图片


如何根据和预测的回归参数得到预测边界框?

根据如下公式根据回归参数计算得到边界框的横纵坐标和宽度和高度,就可以将黄色框调整到红色框的位置,红色框就是我们最后的预测边界框。

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第16张图片

Fast R-CNN损失计算

因为Fast R-CNN进行了目标概率的预测和回归参数的预测,所以Fast R-CNN损失包括分类损失和边界框回归损失

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第17张图片

其中分类损失为交叉熵损失:

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第18张图片
边界框损失:

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第19张图片


Faster R-CNN

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用vGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及cOCo竞赛中获得多个项目的第一名。

Faster R-CNN算法流程

Faster R-CNN算法流程可分为3个步骤

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

Faster R-CNN框架

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第20张图片

其实Faster R-CNN就是在FastR-CNN中加入了RPN,如图

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第21张图片

所以,这里我们主要说明RPN。


RPN网络结构

在特征图上使用滑动窗口在特征涂上进行滑动,每滑动到一个位置就生成一个向量,在向量的基础上通过两个全连接层输出2k个目标概率值和4k个边界框回归参数
R-CNN、Fast RCNN和Faster RCNN的详细讲解_第22张图片


2k个目标概率值和4k个边界框回归参数是如何影响边界框位置?

在2k个scores中两两一组,其中第一个值为背景的概率,第二个值为不是背景的概率,只判断目前anchor中是背景还是前景。
R-CNN、Fast RCNN和Faster RCNN的详细讲解_第23张图片

将4k个coordinates4各参数为一组,其中前两个为anchor的中心坐标偏移量,后两个为anchor的相对宽度和高度

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第24张图片

Faster R-CNN中共使用三种尺度和三种比例的anchor,每个位置在原图上都对应3x3=9个anchor:

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第25张图片

对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。


RPN损失计算

RPN损失同样包含分类损失和边界框回归损失

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第26张图片

其中分类损失如下:

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第27张图片

边界框回归损失如下:

RPN边界框损失和Fast R-CNN边界框损失相同

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第28张图片


Faster R-CNN的训练

原论文中采用分别训练RPN以及Fast R-CNN的方法:

  • 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
  • 固定RPN网络独有的卷积层以及全连接层参数,再利用lmageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数。
  • 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。
  • 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast
    RCNN网络共享前置卷积网络层参数,构成一个统一网络。

R-CNN、Fast R-CNN和Faster R-CNN的框架比较

R-CNN、Fast RCNN和Faster RCNN的详细讲解_第29张图片


本文参考:https://blog.csdn.net/qq_37541097?type=blog


如果本文对您有帮助的话请点赞支持哦!
您的支持是对我最大的鼓励!!!

你可能感兴趣的:(目标检测算法,目标检测,RCNN,Fast,RCNN,Faster,RCNN)