【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构

参考来源:太阳花的小绿豆的博客_CSDN博客-深度学习,软件安装,Tensorflow领域博主

目录

1. 目标检测任务简介

2. R-CNN网络(2014年)

2.1 算法流程及存在问题

2.2 候选区生成

 2.3 深度网络提取特征

2.4 SVM分类器

2.5 回归器修正候选框位置

3. Fast R-CNN网络(2015年)

3.1 算法流程及存在问题

3.2 网络训练数据集设置

3.3 ROI Pooling层

​3.4 分类器以及边界框回归器

 3.5 多任务损失

4. Faster R-CNN网络(2016年)

4.1 算法流程及改进之处

4.2 RPN网络

4.3 Faster R-CNN训练过程

5. FPN+Faster R-CNN网络(2016年)

5.1 FPN结构亮点

5.2 FPN网络结构

5.3 FPN+Faster R-CNN的预测过程


1. 目标检测任务简介

目标检测任务主要有两个问题需要解决:识别目标类别(分类),确定目标位置(回归)。分类问题很好理解,就是确定检测到的目标属于哪一类。回归问题是为了确定目标的位置,因为我们需要一个矩形框来框住所检测到的目标,这就需要调整矩形框的中心坐标以及宽和高到最优的位置,坐标点以及宽和高的变化是连续的,因此是回归问题。基于深度学习的目标检测算法主要分为两类Two Stage 和 One Stage。本文主要介绍Two、Stage算法

  • Two Stage算法有:R-CNN、Fast R-CNN、Faster R-CNN、SPPNet
  • One Stage算法有:YOLO系列、SSD、RetinaNet、SqueezeDet、DetectNet、OverFeat

2. R-CNN网络(2014年)

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第1张图片

2.1 算法流程及存在问题

  • 算法流程
    • 使用SS算法,将一张图像生成1k到2k个候选区域(proposal)
    • 对每个候选区域,使用深度网络(Backnone:AlexNet)提取特征
    • 将特征送入每一类的SVM分类器,判别是否属于该类
    • 使用回归器精细修正候选框位置
  • 存在问题:①测试速度慢:CPU上测试一张图片大约53s。用SS算法提取候选框需要2s,一张图像内候选框之间存在大量重叠,提取特征操作冗余。②训练速度慢:过程比较繁琐,并且需要分别训练特征提取网络、SVM分类模型、回归模型,③训练所需空间大:对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的而调整需要数百GB的存储空间。

2.2 候选区生成

SS算法:首先使用图像分割策略分割出可能的前景(目标)区域,即原始区域,这里同一个目标会有很多冗余的框,采用合并策略剔除冗余的原始区域,得到层次化的区域结构,即候选区域

  • 一张图像使用SS算法大约可以得到2k张候选区域 

 2.3 深度网络提取特征

  • Warped Region,将候选区域缩放到227*227pixel
  • 接着输入分类网络AlexNet(事先训练好),获得4096维的特征,特征矩阵:2k*4096

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第2张图片

2.4 SVM分类器

  • 将2000×4096维特征与20个SVM组成的权值矩阵4096×20(事先训练好)相乘, 获得2000×20维概率矩阵,每一行代表一个建议框归于每个目标的概率。
  • 分别对上述2000×20维矩阵中每一列即每一类进 行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第3张图片

非极大值抑制剔除重叠建议框 (NMS):IoU(Intersection over Union)表示两个区域的交并比,越大说明重合度越高,通过计算IoU,若大于给定阈值,则说明为同一物体,剔除该框

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第4张图片

2.5 回归器修正候选框位置

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

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第5张图片

3. Fast R-CNN网络(2015年)

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第6张图片

3.1 算法流程及存在问题

  • 可以对比R-CNN算法流程
    • 同R-CNN:使用SS算法,将一张图像生成1k到2k个候选区域(proposal)
    • 对每个候选区域,使用深度网络(Backnone:AlexNet)提取特征将图像输入网络得到特征图,将SS算法生成的候选区域投影到特征图上获得相应的特征矩阵
    • 将特征矩阵送入SVM分类器,判别是否属于该类。缩放到7*7大小,接着展平送入全连接层得到预测结果
    • 使用回归器精细修正候选框位置并联两个全连接层,其中一个进行边界框回归
  • 改进之处:将R-CNN中的SVM分类以及bbox回归模型去除,使用一个完整的网络(并联两个全连接层)端到端实现建议框的预测和回归
  • 存在问题:SS算法非常耗时,并且需要分步执行

3.2 网络训练数据集设置

  • SS算法生成的候选框并不全用于网络训练,只需采样其中一小部分
  • 另外要对采样的数据划分为正负样本(保证样本的均衡)
    • 正样本:存在检测目标(IoU>0.5)
    • 负样本:背景

3.3 ROI Pooling层

  • 无论特征矩阵是什么样的大小,全都缩放到7*7size(这样不限制输入图像尺寸)

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第7张图片3.4 分类器以及边界框回归器

  • 分类器输出N+1个类别的概率(N为检测目标的种类, 1为背景)共N+1个节点
  • 边界框回归器输出对应N+1个类别的候选边界框回归参数(dx , dy , dw, dh ),共(N+1)x4个节点
【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第8张图片 边界框回归器的输出

 3.5 多任务损失

  • 分类损失:交叉熵损失,softmax输出
  • 边界框回归损失:smooth损失

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第9张图片

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第10张图片

4. Faster R-CNN网络(2016年)

4.1 算法流程及改进之处

  • 可以对比Fast R-CNN算法流程
    • 首先:将图像输入网络得到相应的特征图
    • 使用SS算法使用RPN网络生成候选框,将一张图像生成1k到2k个候选区域(proposal)
    • 将图像输入网络得到特征图,SS算法RPN网络生成的候选区域投影到特征图上获得相应特征矩阵
    • 将特征矩阵缩放到7*7大小,接着展平送入全连接层得到预测结果
    • 并联两个全连接层,其中一个进行边界框回归
  • 改进之处:将Fast R-CNN中的SS算法替换为RPN网络

4.2 RPN网络

  • 先是在特征图上使用3*3的滑动窗口的中心点计算出对应原始图像的中心点,以此计算出k个anchor boxes
  • RPN网络的目的在于让这K个anchor含有前景物体的概率最高

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第11张图片

  •  RPN网络的训练样本:一张图像对其生成的anchor随机采样256个anchor(正负样本1:1)
    • 如何定义正负样本
      • anchor与GT-box的IoU>0.7(正样本)
      • anchor与GT-box拥有最大的IoU(正样本)
      • anchor与所有GT-box的IoU<0.3(负样本)
  • RPN网络的损失:也是多任务损失(分类和边界框回归),这里的分类是前景和背景分类
    • 注意这里的分类损失若使用多分类softmax,则输出为2k,若二分类sigmoid,则输出为k

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第12张图片

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第13张图片

4.3 Faster R-CNN训练过程

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

    • 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN参数

    • 固定RPN网络,再利用 ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数

    • 固定利用Fast RCNN训练好的前置卷积网络层参数,微调RPN 网络

    • 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络

  • 也可直接采用RPN Loss+ Fast R-CNN Loss的联合训练方法

5. FPN+Faster R-CNN网络(2016年)

5.1 FPN结构亮点

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第14张图片

  • 可以对比
    • a. 图像金字塔结构,对图像进行不同尺度的缩放,这样导致预测效率低
    • b. single feature map,像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征,针对小目标预测效果不好
    • c. pryamidal feature hierarchy,像SSD采用这种多尺度特征融合的方式,没有上采样过程即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的
    • 本文作者是采用d.这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的,确实有助于提升网络检测效果。针对目标检测任务:coco AP提升2.3个点;pascal AP提升3.8个点

在分类网络中,Backbone每次缩放feature map的时候都是以2的整数倍进行缩放的。

5.2 FPN网络结构

不同特征层采用1*1卷积调整channel数量,采用上采样(插值方式)调整特征图尺寸,最终融合C2-C5特征层,并分别通过3*3卷积得到P2-P5融合后的特征层,比如说P2层相对较底层的预测特征层会保留更多的细节信息,更适合预测小型目标

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第15张图片

5.3 FPN+Faster R-CNN的预测过程

  • 由于在RPN网络中使用了FPN结构,原本在一层特征层上生成很多候选框的情况,现在变成了在P2-P6五层特征层上生成候选框(这里每一层针对不同面积大小的anchor对于生成,也就是说P2到P6分别对应生成面积为32,64,128,256,512的anchor)
  • 另外,前置卷积层也是用FPN结构后,回程从P2-P5四层特征图
【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第16张图片 预测阶段示意图
  •  预测的时候由RPN生成的P2-P6的候选框,首先要映射到P2-P5层级,然后经过Faster R-CNN网络进行预测和回归
  • 这里映射的时候文献中给了相应的计算公式

【深度学习进阶】01目标检测理论:R-CNN、Fast R-CNN、Faster R-CNN系列以及FPN结构_第17张图片

你可能感兴趣的:(深度学习图像处理,图像处理,人工智能,计算机视觉,目标检测)