[DL]深度学习_Faster R-CNN

Faster R-CNN原理讲解

目录

一、目标检测前言

1、目标检测任务

2、基于深度学习的目标检测

1)、常用目标检测方法

2)、目标检测方法类别

二、Faster R-CNN理论

1、R-CNN

1)、候选区域生成

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

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

4)、使用回归器精细修正候选框位置

5)、R-CNN存在的问题

2、Fast R-CNN

1)、一次性计算整张图像特征

2)、训练数据采样问题

3)、RoI Pooling Layer

4)、目标概率预测分类器

5)、边界框回归器

6)、损失计算

3、Faster R-CNN

1)、区域生成网络(RPN)

2)、RPN网络结构

3)、锚点框anchor boxes

4)、尺度和比例

 5)、正负样本

6)、RPN损失计算 

7)、Faster R-CNN训练


一、目标检测前言

1、目标检测任务

        目标检测是计算机视觉领域中的一个重要任务,旨在识别图像或视频中的特定物体,并确定它们的位置和边界框。

目标检测任务通常包括以下几个步骤:

  1. 特征提取:首先,从输入图像中提取特征。这些特征可以是基于像素的低级特征,如颜色、纹理和边缘等,也可以是高级特征,如深度学习中的卷积神经网络(CNN)提取的特征。

  2. 候选区域生成:在特征提取的基础上,使用候选区域生成算法生成可能包含目标的候选区域。常用的方法包括滑动窗口、基于图像分割的方法和基于超像素的方法等。

  3. 目标分类:对于每个候选区域,使用分类器判断其是否包含目标物体。常用的分类器有支持向量机(SVM)、随机森林(Random Forest)和深度学习中的CNN等。

  4. 边界框回归:对于那些被分类器判断为目标物体的候选区域,进一步优化它们的边界框位置。通常使用回归算法来修正候选区域的位置和大小。

  5. 结果后处理:根据任务需求,对检测结果进行后处理。可能的后处理步骤包括非极大值抑制(NMS)来消除重叠的边界框,或者根据目标类别进行进一步的筛选和过滤等。

        目标检测可以应用于许多领域,如自动驾驶、视频监控、人机交互等。在自动驾驶中,目标检测用于检测和跟踪道路上的车辆、行人和交通标志等。在视频监控中,目标检测用于识别和跟踪疑似嫌犯或危险行为等。在人机交互中,目标检测可以用于手势识别和人脸识别等交互操作。

        近年来,随着深度学习的进步,基于深度学习的目标检测方法取得了显著的进展。例如,基于卷积神经网络的目标检测算法,如基于区域的卷积神经网络(R-CNN)、快速的R-CNN(Fast R-CNN)、区域卷积神经网络(Faster R-CNN)和单阶段的检测器(如YOLO和SSD)等。这些方法通过端到端训练,极大地提高了目标检测的准确性和效率。

2、基于深度学习的目标检测

1)、常用目标检测方法

以下是一些具有代表性的基于深度学习的目标检测方法:

  1. R-CNN系列:

    • R-CNN(Region-based Convolutional Neural Networks):首先使用选择性搜索算法生成候选目标区域,然后将每个候选区域传入卷积神经网络(如AlexNet、VGG等)进行特征提取和分类。
    • Fast R-CNN:相对于R-CNN,Fast R-CNN将整个图像输入网络,通过RoI池化层提取每个候选区域的特征,然后进行分类和边界框回归。
    • Faster R-CNN:Faster R-CNN引入了区域提议网络(RPN),用于生成候选区域,从而实现端到端的目标检测。
  2. YOLO系列(You Only Look Once):

    • YOLOv1:将图像划分为网格,并在每个网格单元中同时预测目标的类别和边界框信息。通过使用全局上下文信息和多尺度预测,YOLOv1在速度和准确度之间取得了平衡。
    • YOLOv2:通过引入Darknet-19网络和多尺度预测,YOLOv2在准确度和速度方面都有所提升。
    • YOLOv3:采用了更加深层次的Darknet-53网络结构,并引入了多尺度预测和特征金字塔网络来提高检测性能。
  3. SSD(Single Shot MultiBox Detector):

    • SSD通过在不同层级的特征图上应用不同尺度和宽高比的卷积滤波器来预测边界框和目标类别。通过多层特征的融合和预测,SSD能够有效地检测多尺度目标。
  4. Mask R-CNN:

    • Mask R-CNN在R-CNN的基础上添加了一个分割网络,在生成目标边界框的同时生成目标的像素级分割结果。通过联合目标检测和分割,Mask R-CNN能够获得更精细的目标识别结果。

        这些基于深度学习的目标检测方法利用深度神经网络的强大特征表示能力,能够学习到更具有区分度和鲁棒性的特征,从而取得了令人瞩目的检测准确度和鲁棒性。然而,这些方法往往需要大量的计算资源和标注数据进行训练,以及较长的推理时间。近年来,一些轻量级的目标检测方法也被提出,旨在在保持一定性能的同时减少计算量,以适应于嵌入式设备等资源受限的场景。

2)、目标检测方法类别

单阶段目标检测方法: 单阶段目标检测方法是指在一个网络中直接预测目标的类别和位置信息。它通常将目标检测任务转化为一个回归问题,通过网络输出目标的边界框位置和目标的类别概率得分。常见的单阶段目标检测方法有:

  • YOLO(You Only Look Once):YOLO将目标检测任务转化为一个回归问题,并将整个图像划分为预定义的网格,然后同时预测每个网格中是否有目标以及目标的类别和位置信息。
  • SSD(Single Shot MultiBox Detector):SSD也是一种基于预定义的多个大小和比例的先验框的单阶段目标检测方法。SSD通过卷积网络预测目标的类别和位置信息,并通过不同层级的特征图进行多尺度的目标检测。
  • RetinaNet:RetinaNet是通过引入Focal Loss解决了单阶段目标检测中类别不平衡问题的方法。它通过在网络中使用特征金字塔网络来检测不同尺度的目标。

双阶段目标检测方法: 双阶段目标检测方法通常分为两个步骤:提取候选目标区域和对候选目标区域进行分类和回归。首先,一个区域提议网络(Region Proposal Network,RPN)被用来生成候选目标区域,然后这些候选区域在后续的分类器中进行分类和位置回归。双阶段目标检测方法可以更好地处理目标的特征表达和候选区域的生成,但相应的计算复杂度也较高。常见的双阶段目标检测方法有:

  • R-CNN(Region-based Convolutional Neural Networks):R-CNN是一种经典的双阶段目标检测方法。它通过在图像中提取候选区域,并使用卷积神经网络对这些候选区域进行分类和位置回归来实现目标检测。
  • Fast R-CNN:Fast R-CNN是对R-CNN的改进,它通过在整个图像上共享特征提取,使得目标检测的速度得到了显著提升。
  • Faster R-CNN:Faster R-CNN是在Fast R-CNN的基础上引入了RPN的方法。RPN用于生成候选区域,然后这些候选区域被用于目标的分类和位置回归。

        总体而言,单阶段目标检测方法在速度方面更快,但在定位精度和目标小目标检测方面相对较差;双阶段目标检测方法在精度方面较好,但对计算资源要求较高。在实际应用中,根据不同的需求和场景,可以选择合适的单阶段或双阶段目标检测方法。

notes:

Two-Stage:检测更准确

  • 通过专门的模块去生成候选框(RPN),寻找前景以及调整边界框(基于anchors)
  • 基于之前生成的候选框进行进一步分类以及调整边界框(基于proposals)

One-Stage:检测速度快

  • 基于anchors直接进行分类以及调整边界框

二、Faster R-CNN理论

1、R-CNN

        R-CNN(Region-based Convolutional Neural Networks,基于区域的卷积神经网络)是一种用于目标检测的深度学习算法,利用深度学习进行目标检测的开山之作。

        R-CNN算法的主要思想是利用候选区域提取算法(如Selective Search)生成一系列可能包含目标对象的区域,然后通过卷积神经网络对这些区域进行分类和边界框回归。具体来说,R-CNN算法的工作流程如下:

  1. 候选区域生成:通过候选区域提取算法(如Selective Search),对输入图像进行分割,生成1k到2k个可能包含目标对象的候选区域。

  2. 特征提取:将每个候选区域通过卷积神经网络进行特征提取。R-CNN使用预训练的卷积神经网络(如AlexNet)作为特征提取器,将每个候选区域的图像块作为输入,然后通过卷积和池化操作提取区域的特征表示。

  3. 目标分类:将提取的特征输入到一个全连接的分类器中,用于判断区域内是否包含目标对象。分类器可以是一个支持向量机(SVM)或者逻辑回归模型,根据不同的任务进行选择。

  4. 边界框回归:为了精确地定位目标对象的位置,R-CNN还会对每个候选区域进行边界框回归操作。回归器可以通过训练数据来学习目标的位置偏移量。

        R-CNN算法的优点是可以通过使用预训练的卷积神经网络来提取区域的特征,从而避免了手工设计特征的复杂过程。然而,R-CNN的缺点是效率较低,因为需要对每个候选区域进行独立的卷积和特征提取操作,导致计算量非常大。为了解决这个问题,后续的改进算法(如Fast R-CNN和Faster R-CNN)采用了共享特征提取器和区域生成网络的方式,进一步提高了目标检测的速度和准确性。

1)、候选区域生成

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

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

        将2000候选区域缩放到227x227pixel(进行统一Resize处理),接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000x4096维特征矩阵。

        4096维是因为AlexNet第一个FC层维度是4096。

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

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

非极大值抑制(Non-Maximum Suppression,NMS)

        一种用于去除冗余检测框的算法,常用于目标检测任务中。

        在目标检测中,候选框生成算法(如Selective Search)可能会生成大量重叠的候选框,这些候选框在目标检测结果中会造成冗余。非极大值抑制算法的目的就是在这些重叠的候选框中选择具有较高置信度的候选框,并剔除与其高度重叠的其他候选框。

非极大值抑制算法的步骤如下:

  1. 对所有的候选框按照置信度进行排序,置信度由目标分类器给出。

  2. 选择置信度最高的候选框,并将其加入最终的检测结果集合,将其从候选框列表中移除。

  3. 按照一定的阈值(如IoU,Intersection over Union)计算当前选中的候选框与候选框列表中其他候选框的重叠度。

  4. 去除与当前选中候选框重叠度高于阈值的其他候选框

  5. 重复步骤2-4,直到候选框列表为空。

        非极大值抑制算法通过不断选择具有最高置信度的候选框,并去除与其高度重叠的其他候选框,从而实现了筛选出非冗余的目标检测结果的目的。

        非极大值抑制算法的一个重要参数是重叠度阈值(IoU)。这个阈值决定了两个候选框被认为是重叠的临界点。通常情况下,当两个候选框的IoU大于设定的阈值时,会被认为是重叠的。根据任务的要求,可以调整阈值来控制目标检测的准确性和召回率之间的权衡。

交并比(Intersection over Union,IoU)

        IoU (Intersection over Union) 是目标检测领域常用的评估指标,用于衡量目标检测模型预测结果与真实目标框之间的重叠程度。

        具体而言,IoU 是通过计算两个边界框(通常是预测框和真实框)的交集面积除以它们的并集面积得到的。换算成公式如下:

IoU = Area of Overlap / Area of Union

其中,Area of Overlap 表示两个边界框的交集面积,而 Area of Union 则表示两者的并集面积。IoU 的取值范围在 0 到 1 之间,值越大表示两个边界框的重叠程度越高。

4)、使用回归器精细修正候选框位置

        对非极大值抑制(Non-Maximum Suppression)处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的Bounding box。

        保留与真实标注目标边界框(Ground Turth)有相交,并且IoU大于设定的阈值,不满足阈值的删除,再分别使用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别修正过后的得分最高的边界框。

         黄色框的P点代表建议框Region Proposal,绿色框的G代表人工标注的真实框Ground Truth,红色窗口的\hat{G}表示Region Proposal进行回归后的预测框,可以用最小二乘法解决线性回归问题。

5)、R-CNN存在的问题

  • 测试速度慢:测试一张图片用CPU约53秒,用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
  • 训练速度慢:过程极其繁琐。
  • 训练所需空间大:对于SVM和边界框回归器bbox回归训练,需要从每个图象中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG-16,从VOC07训练集上的5k图像上提取的特征需要数百GB存储空间。

2、Fast R-CNN

        Fast R-CNN是一种用于目标检测的深度学习模型,是R-CNN的改进版本。它通过将多个计算步骤整合到一个网络中来提高速度和准确性。

Fast R-CNN的主要步骤包括:

  1. 提取候选区域:与R-CNN一样,Fast R-CNN首先通过选择性搜索算法从图像中提取多个候选区域,这些候选区域可能包含目标对象。
  2. 特征提取:Fast R-CNN将整个图像输入卷积神经网络(CNN)中,然后通过CNN的后半部分提取出每个候选区域的特征向量。这个特征向量包含了候选区域中的区域信息。
  3. Region of Interest (RoI)池化:对于每个候选区域,Fast R-CNN使用RoI池化层将其特征向量转换为固定长度的向量。RoI池化层通过将特征图分割为固定大小的子区域,并对每个子区域进行最大值池化来实现。
  4. 分类和边界框回归:Fast R-CNN使用全连接层将RoI池化的特征向量输入到两个不同的分支中。一个分支用于分类,用于预测候选区域的类别,另一个分支用于边界框回归,用于预测候选区域的位置。

        Fast R-CNN的主要改进之处在于整合了之前的R-CNN的多个独立步骤,并且在RoI池化层中使用了共享的卷积特征。这种整合和共享可以大大减少计算量,并提高模型的速度和准确性。同时,Fast R-CNN还引入了RoI池化层来处理不同大小的候选区域,使得模型对于不同大小的目标具有更好的适应性。

notes:

  • 一张图像生成1k到2k个候选区域(使用Selective Search方法)
  • 将图像输入网络得到相应的特征图,将Selective Search方法生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过感兴趣区ROI Pooling(Region of Interest Pooling)层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

1)、一次性计算整张图像特征

         Fast R-CNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算

  • 这样就避免原始图像中的同一部分在不同候选框中反复提取特征
  • Fast R-CNN是先对整张图像提取特征,然后对提取出的特征图生成候选框
  • 先得到整张图像的特征图,接着根据输入输出的前后映射关系,将候选框映射到特征图上

2)、训练数据采样问题

        训练过程中并不是使用Selective Search算法提供的所有的候选区域,通过Selective Search算法得到大约2k个候选框,但是训练过程中只需要使用一小部分。

        对于训练数据的采样可用正样本和负样本,正样本是候选框中确实存在需要检测的样本,负样本则是背景,不含所需检测的目标。

七、倾斜数据集问题

        对于每张图像,在2k个候选框中,采集64个候选区域,64个候选区域当中,一部分是正样本,一部分是负样本。正样本定义为候选框与真实的目标边界框的交并比IoU大于0.5。负样本定义为与所有真实的目标边界框的交并比IoU最大的在0.1到0.5之间的。

notes:

        在真实世界的数据集中,正样本和负样本的数量可能会非常不平衡。例如,在疾病预测中,患者通常是少数,而健康人士是多数。如果我们不将数据集分为正样本和负样本,模型可能会偏向于预测为多数类别。通过分离正样本和负样本,我们可以更好地处理不平衡数据,从而提高模型的性能。

3)、RoI Pooling Layer

        将用于训练样本的候选框,通过RoI Pooling层将其缩放到统一的尺寸。将得到的特征矩阵划分为所需等分,对每个区域进行池化下采样。无论特征图候选区域的尺寸是多少,都可以通过划分为所需等分来池化下采样,将其转换为统一尺寸。

4)、目标概率预测分类器

        分类器输出N+1个类别的概率(N为检测目标的种类,1为背景),一共N+1个节点。输出概率已经经过Softmax处理,是满足概率分布的,总概率之和为1。

5)、边界框回归器

        输出对应N+1个类别的候选边界框回归参数(d_{x},d_{y},d_{w},d_{h}) ,共(N+1)\times 4个节点。

6)、损失计算

  • p是分类器预测的softmax概率分布p=(p_{0},...,p_{k})
  • u对应目标真实类别标签
  •  t^{u}对应边界框回归器预测的对应类别u的回归参数(t^{u}_{x},t^{u}_{y},t^{u}_{w},t^{u}_{h})
  • v对应真实目标的边界框回归参数(v_{x},v_{y},v_{w},v_{h})

分类损失计算:

L_{cls}(p,u)=-\log p_{u}

         softmax交叉熵损失,分类器预测当前候选区域为类别u的概率。

边界框回归损失: 

回归损失函数对比

notes: 

        \lambda是一个平衡系数,用于平衡分类损失和边界框回归损失。

        [u\geq 1]是艾弗森括号, 艾弗森括号使用方括号 "[ ]" 来表示一个条件的真假,其符号可以理解为一个条件函数。具体地,艾弗森括号的使用规则如下:

  1. 如果条件为真,代表候选区域确实属于所需检测的某一个类别当中,对应正样本,则艾弗森括号中的值为1;
  2. 如果条件为假,代表候选区域应该是背景,对应负样本,则艾弗森括号中的值为0,没有边界框回归损失。

3、Faster R-CNN

        Faster R-CNN(Region-based Convolutional Neural Networks)是一种用于目标检测的深度学习模型,由Shaoqing Ren、Kaiming He、Ross Girshick和Jian Sun等人提出。Faster R-CNN在RCNN和Fast R-CNN的基础上做了进一步的改进,通过引入区域生成网络(Region Proposal Network,RPN)来实现端到端的目标检测。

        在传统的目标检测算法中,通常需要两个阶段来实现目标检测:1)生成候选区域;2)对候选区域进行分类和位置回归。而Faster R-CNN通过RPN实现了这两个阶段的一体化,有效地提升了检测速度和准确率。

具体来说,Faster R-CNN的架构包含三个主要部分:

  1. 特征提取网络(Backbone Network):通常使用卷积神经网络(如VGG或ResNet)将输入图像转化为特征图。这些特征图用于后续的目标检测任务。

  2. 区域生成网络(Region Proposal Network,RPN):RPN是Faster R-CNN的核心组件,用于生成候选目标区域。它在特征图上滑动一个滑动窗口,并通过卷积操作来预测候选区域的边界框(即候选目标框)及其置信度得分。RPN使用锚框(Anchor Box)作为候选目标框的基准,根据候选目标框和真实目标框之间的IoU(Intersection over Union)来计算目标框的正负样本,并进行位置回归。

  3. 区域分类网络(Region Classification Network):在生成候选目标区域后,将这些区域输入分类网络,对目标进行分类和位置微调。通常使用全连接层和softmax分类器对每个候选目标区域进行分类,并进行位置回归,以获取最终的目标检测结果。

        Faster R-CNN的训练过程是端到端的,在训练过程中,RPN和区域分类网络同时进行训练。通过使用基于梯度下降的反向传播算法来优化模型参数,使得模型能够准确地预测目标框的位置和类别。

notes:

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

1)、区域生成网络(RPN)

        区域生成网络(RPN,Region Proposal Network)是Faster R-CNN模型中的一个核心组件,用于生成候选目标区域。

        RPN的作用是在输入特征图上滑动一个滑动窗口(也称为锚点,Anchor),并通过卷积操作来预测候选目标框(候选区域)的边界框(bounding boxes)及其置信度得分。RPN通过从特征图中提取的特征来检测图像中的候选目标,并生成一系列候选目标框。

具体来说,RPN的结构如下:

  1. 锚点(Anchor)的生成:RPN在滑动窗口上生成一组预定义的锚点。锚点通常是以不同尺度和长宽比生成的一系列框,这些框在特征图上以不同的位置和大小滑动。每个锚点表示一种可能的目标区域。

  2. 特征提取:将输入图像经过特征提取网络(如VGG或ResNet)得到特征图。这些特征图对应于不同尺度和空间位置上的图像特征。

  3. 卷积操作:将特征图作为输入,通过卷积操作计算每个锚点的边界框和置信度得分。这些边界框包括了锚点的位置和尺寸。

  4. 锚框正负样本筛选:根据锚点和真实目标框之间的IoU(Intersection over Union)计算得分,将锚框划分为正样本(包含目标)和负样本(不包含目标)。通常,IoU大于设定阈值的锚框被认为是正样本,而IoU小于设定阈值的锚框被认为是负样本。

  5. 边界框位置回归:对于每个正样本的锚框,计算其与真实目标框之间的偏移量,即位置回归。这个偏移量用于调整锚框的位置,使其更准确地框住真实目标。

        通过RPN生成的候选目标框(候选区域),会被送入后续的区域分类网络进行目标的分类和位置微调。

2)、RPN网络结构

         在通过骨干网络生成的特征图上,使用一个滑动窗口进行滑动,每滑动到一个位置上就生成一个一维的向量,在这个向量的基础上通过两个全连接层分别去输出目标概率和边界框回归参数。

        2k scores针对k个锚框anchor boxes,对每一个锚框生成了两个概率参数,一个是前景概率,一个是背景概率,则k个锚框就生成了2k个scores。

        针对每个anchor boxes又生成了4个边界框回归参数,则k个锚框生成了4k个参数。

        RPN网络实现,实际是使用3x3卷积,采用步距为一,padding也为1,这样滑动窗口就可以从特征图第一个像元开始覆盖,经过处理之后就得到高度宽度都与特征图大小相同的特征矩阵,深度也相同(?)。通过得到的特征矩阵上并联两个1x1卷积层实现对于类别的预测和边界框回归参数的预测。对于类别预测分支,使用卷积核大小1x1,个数2k个的卷积层进行处理,边界框回归参数的分支使用卷积核大小1x1,个数4k的卷积层进行处理。 

        如果使用ZF网络作为骨干网络,所生成的特征图深度为256维,即256通道数,如果使用VGG-16网络作为骨干网络则生成的特征图为512维的。则滑动窗口获取的一维向量元素的个数是根据特征图的维度决定的。

3)、锚点框anchor boxes

        对于特征图上每一个3x3的滑动窗口,首先计算滑动窗口中心点在原图上对应的位置,方法如下:

  • x轴上,将原图的宽度除以特征图的宽度,取整得到一个步距, 滑动窗口中心点在特征图上的x轴坐标乘以步距得到原图中x轴的值
  • y轴上,将原图的高度除以特征图的高度,再取整得到一个步距,滑动窗口中心点在特征图上的y轴坐标乘以步距得到原图中y轴的值
  • 再以原图中得到的中心点计算出k个anchor boxes,每一个anchor boxes都是提前预设好的长宽比例。

        anchor中可能包含所需检测的目标,也可能没有包含。 

        cls layer生成的2k个scores每两个为一组,两个值对应一个anchor,一组值里第一个值是预测锚框中是背景的概率,第二个值是预测锚框中是所需检测目标的概率。只是去预测是前景还是背景,并没有去分类,只要是被检测的目标就都归类为前景,否则就归类为背景。

        reg layer生成的4k个coordinates每四个为一组,四个值对应一个anchor,d_{x}d_{y}代表对应的anchor的中心坐标预测的偏移量,d_{w}d_{h}代表的是对应anchor的宽度和高度的调整。通过边界框回归参数调整过后,希望尽可能地准确框选出检测目标。

4)、尺度和比例

  • 三种尺度(面积){128^{2},256^{2},512^{2}}
  • 三种比例{1:1,1:2,2:1}
  • 每个位置(每个滑动窗口)在原图上都对应有3x3=9个anchor。

        对于一张1000x600x3的图像,经过特征提取网络之后,会生成60x40大小的特征图,在每个位置上进行滑动,每个位置上又有9个anchor,就会有60x40x9 (21.6k个anchor),忽略跨越边界的anchor之后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。

notes:

        在感受野没有锚框尺度大的情况下,通过一个小的感受野去预测比他大的目标的边界框是有可能的,通过经验,看到物体的一部分也能够大致猜出目标的完整区域。

 5)、正负样本

        通过滑动窗口在特征图上进行滑动,会在原图上生成上万个anchor,但是并不是每个anchor都用来训练网络,对于每张图片,从上万个anchor中采样256个anchor,这256个anchor是由正样本和负样本组成,比例大致为1:1,如果正样本个数不足128,那么就用负样本进行填补。

正样本:

  • 只要anchor与标注准确的真实目标边界框交并比IoU超过0.7,那么该anchor就是正样本。
  • anchor与某一个标记真实目标边界框拥有最大的IoU,那么也指定为正样本。即在一个标记的真实目标边界框中所有的相交anchor里,IoU最大的anchor,也就是该anchor是与该真实目标边界框相交的anchor中IoU最大的一个,那么将该anchor标记为正样本。

负样本: 

  • 与所有真实目标边界框的IoU值都小于0.3的anchor,将其定义为负样本。 

对于正样本和负样本之外的anchor就丢弃。 

6)、RPN损失计算 

  • p_{i}表示第i个anchor预测为目标的概率
  • p^{*}_{i}当为正样本时为1,当为负样本时为0
  • t_{i}表示预测第i个anchor的边界框回归参数
  • t^{*}_{i}表示第i个anchor对应的真实目标边界框的回归参数
  • N_{cls}表示一个mini-batch中的所有样本数量256
  • N_{reg}表示anchor滑动窗口位置的个数(不是anchor个数)约2400 
  • \lambda表示一个平衡参数,用来平衡分类损失以及边界框回归损失

notes:

        mini-batch表示一次输入进模型的数量大小,即batch_size。

分类损失计算: 

Softmax Cross Entropy多类别交叉熵损失

        分类层预测生成2k个参数,k为使用的anchor的个数,cls中每两个参数为一组,每一组对应一个anchor,每组中第一个参数对应背景的概率,第二个参数对应所需检测目标的概率。使用多类别损失的计算公式

L_{cls}=-\log (p_{i})

  •  p_{i}表示第i个anchor预测为真实标签的概率
  • p_{i}^{*}表示当为正样本时为1,当为负样本时为0

        如第一个anchor的真实值是1,则第二个参数对应的是所需检测目标的概率为0.9,则此时损失值为L_{cls}=-\log_{e}(0.9);又如第二个anchor的真实值为0,则第二组第一个参数对应的是为背景的概率为0.2,则此时损失值为L_{cls}=-\log_{e}(0.2)

notes:

        实际中使用的\log都是以e为底的\log_{e} 

Binary Cross Entropy二分类交叉熵损失 

        二分类生成的cls layer层就不是2k个预测参数了,而是k个预测参数,anchor只预测1个值,该值是通过sigmoid函数得出的概率,如果趋近于0则表示为背景,如果趋近于1则表示为待测物体。使用二分类损失的计算公式

L_{cls}=-[p^{*}_{i}\log (p_{i})+(1-p^{*}_{i})\log (1-p_{i})]

  •  p_{i}表示第i个anchor预测为目标的概率
  • p_{i}^{*}表示当为正样本时为1,当为负样本时为0

        如第一个anchor的真实值为1,则p_{i}^{*}为1,此时公式等价为L_{cls}=-\log (0.9);第二个anchor的真实值为0,对应的p_{i}^{*}为0,此时公式等价为L_{cls}=-\log (1-0.2)

notes:

        需要注意的是,在softmax多分类中,cls的值是2k个,每两个对应一个anchor,计算损失值时的p_{i}对应的是真实标签所对应的背景参数或待测目标参数的其中一个。真实标签为1,即为待测目标的情况下,p_{i}使用该anchor对应的两个参数中的待测目标的概率值;当真实标签为0,即为背景的情况下,p_{i}使用该anchor对应的两个参数中的背景的概率值。

        在binary二分类中,cls的值是k个,每个anchor对应一个参数,该参数由sigmoid函数计算得出为待测目标的概率值,参数越接近0,则越为背景,参数越接近1,则越为待测目标。

边界框回归损失:

         边界框回归损失使用了smooth L1函数进行处理。其中t_{i}的值是通过回归层直接预测出的结果,而t^{*}_{i}的值是根据anchor所对应的真实目标框以及anchor的坐标计算得到的。

L_{reg}(t_{i},t^{*}_{i})=\sum smooth_{L_{1}}(t_{i}-t_{i}^{*})

smooth_{L_{1}}=\left\{\begin{matrix} 0.5x^{2} & if\left | x \right |< 1\\ \left | x \right |-0.5&otherwise \end{matrix}\right. 

  • p^{*}_{i}当为正样本时为1,为负样本时为0
  • t_{i}表示预测第i个anchor的边界框回归参数
  • t^{*}_{i}表示第i个anchor对应的真实目标框的回归参数

t_{i}=[t_{x},t_{y},t_{w},t_{h}] 

t_{i}^{*}=[t_{x}^{*},t_{y}^{*},t_{w}^{*},t_{h}^{*}]

t_{x}=(x-x_{a})/w_{a} ,   t_{y}=(y-y_{a})/h_{a} 

t_{w}=\log (w/w_{a}),    t_{h}=\log (h/h_{a})

t_{x}^{*}=(x^{*}-x_{a})/w_{a},   t_{y}^{*}=(y^{*}-y_{a})/h_{a}

t_{w}^{*}=\log (w^{*}/w_{a}),    t_{h}^{*}=\log (h^{*}/h_{a})

7)、Faster R-CNN训练

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

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

  1. 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
  2. 固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast R-CNN网络参数;
  3. 固定利用Fast R-CNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数;
  4. 同样保持固定前置卷积网络层参数,去微调Fast R-CNN网络的全连接层参数。最后RPN网络与Fast R-CNN网络共享前置卷积网络层参数,构成一个统一网络。
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IAz-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值