Faster R-CNN详解

Faster R_CNN代码实现详解参见:faster-rcnn源码详解_樱花的浪漫的博客-CSDN博客_faster rcnn源码

Faster-rcnn详细注释版源码地址:faster_rcnn源码详细注释版+每一步均有详细批注-深度学习文档类资源-CSDN下载

1.FASTER R-CNN改进层面

Fast R-CNN算法相对于R-CNN有了很大的改进:一 方面,一张图像上的各个候选框共享特征;另一方面,类别预测和位置回归在一个前向推理阶段完成。这两点使得检测算法的速度有了显著提升。但是, 候选框的生成和后面的前向推理还是两个独立的处理过程,两个过程的衔接成了制约检测流程的瓶颈。本节介绍的Faster R-CNN方法正是针对这一瓶颈进行了改进,使得整个目标检测过程构成一个端到端的完整流程。
基于候选框的算法,比如Selective Search等,都基于CPU进行计算,无法利用GPU的高并行性进行加速,而基于神经网络的方法,则可以充分利用GPU并行计算的优势,极大地提升了算法速度。如果能够通过神经网络的方法提取候选框,就可以更进一步地提升整个算法的执行速度。Faster R-CNN就是基于这个思路,将 一个全卷积网络作为候进框提取网络(Region Proposal Network,RPN),来提取各种尺度和宽高比的候连框。为了更进一步地提升效率,后续的目标检测算法和RPN网络共享卷积特征,使得整个检测过程更加流畅,整体速度得到了显著提升。
Faster R-CNN算法由两个主要的模块组成,如图所示, 第一个模块是用于提取候选框的全卷积网络(RPN),第二个模块是基于候选框的Fast R-CNN目标检测器。整个检测过程通过一个网络完成。Faster R-CNN使用了所谓的关注(attention)机制,RPN模块告诉Faster R-CNN需要关注哪里。

Faster R-CNN详解

2 候选框提取网络

候选框提取网络(RPN)其实是一个全卷积网络,以任意大小的图像作为输入,输出一系列候选框以及每个候选框对应的分数值,这个分数值用于衡量候选框框中目标的概率。为了提升算法的整体速度,Faster R-CNN在设计上采用了RPN和FastR-CNN共享部分卷积特征的方式。
为了生成候选框,Faster R-CNN使用一个卷积网络在共享特征的最后一层特征图上进行滑窗操作每次滑窗,在特征图上截取nxn×d大小的特征块(其中n表示滑窗卷积网络输入窗口的宽和高,d表示共享卷积特征最后一层特征图的通道数),经过滑窗卷积网络后输出一个低维特征,并分别送入两个并列的全连接层,其中一个全连接层用于分类,判断当前滑窗对应的图像区域是否包含目标,另一个全连接层用于回归候选框的位置,判断当前候选框相对于当前滑窗所对应图像区域的位置偏移量及缩放尺度。很显然,这一计算过程可以通过先在原先的卷积层之后加入新的与滑动窗口大小相匹配的卷积层,再并联两个全连接层的网络结构来实现。滑窗卷积网络选取n=3,共享卷积网络为ZF网络时,滑窗卷积网络对应的输出为256维,共享卷积网络为VGG16时,滑窗卷积网络对应的输出为512维,并以ReLU作为卷积网络最终输出的激活函数。在共享卷积特征的最后一层特征图上,每个特征都有很大的感受野,共享卷积网络为ZF网络时,对应的感受野为171像素×171像素,共享卷积网络为VGG16时,对应的感受野为228像素×228像素。

1.锚

在每个滑窗位置,会同 时预测多个候选框。假设需要预测的候选框的个数为k,则用于回归候选框位置的全连接层(回归层)有4k个输出,分别是规范化的水平方向及垂直方向的位置偏移量和缩放尺度;用于类别判别的全连接层(分类层)有2k个输出,分别是当前预测框框中目标或未框中目标的概率。这k个待预测的候选框中,每一个框的偏移和缩放都基于一个固定的参考框。k个待预测框对应k个参考框,每个参考框相对于滑窗的感受野的位置都是固定的,即都有固定的大小和宽高比。这样的参考框,我们称之为锚(anchor)。对于任意一个滑窗位置, 各个锚的中心点和滑动窗口在原图上感受野的中心点重合设定若干锚需要取到的面积尺度和宽高比,则对于每个滑窗位置,错的个数都是固定的(比如,面积设定为128、256和512 3个尺度,宽高比设定为1:1、1:2和2:1,则每个滑窗位置对应3×3=9个锚)。通常情况下,每个滑窗位置会设置3个面积尺度和3个宽高比,如图8-8所示,每个滑窗位置包含k=3×3=9个锚,如果一个特征图的宽和高分别为W和H,则总的锚个数为WxHxk。
这种定义锚的方法有一个显著特征: 检测结果相对于目标在图像中的位置具有平移不变性。道理很简单,在原始图像上,如果一个目标可以被某个滑窗位置对应的一个锚框中,把该目标平移到图像中的另一个位置后,也能够被另一个滑窗位置对应的锚框中。

Faster R-CNN详解

为了提升检测算法的尺度鲁棒性,有两种思路:一 种是使用原始图像金字塔/特征图像金字塔,算法在金字塔的每一层进行检测;另一种是使用多尺度滑动窗口,分别在原始图像/特征图像上进行滑窗计算。基于锚的方法是第三种用于提升算法尺度鲁棒性的思路, 其本质就是使用不同尺度的锚覆盖图像区域,使得不同尺度的目标有更多被框中的机会。这种方法仅仅基于原始的图像/特征图像,相比前两种方法,计算开销更少。

2.损失函数

在训练候选框提取网络的时候,锚被分成两类,框中目标的锚被标记为正样本(positive),未框中目标的锚被标记为负样本(negative)。所谓正样本,是通过锚与真值相交的情况来定义的,具体而言,基于两种方式实现。对于每一个真值,所有锚与这个真值要么相交,要么不相交,在相交的情形中:与这个真值有最大交并比的那个错标记为正样本; 与这个真值的交并比>0.7的那些锚也标记为正样本。所谓负样本,指的是与所有真值的交并比

这里,i是一个小批中的一个锚的索引,

Faster R-CNN详解是锚i是一个对象的预测概率。如果锚为正,地面真实标签Faster R-CNN详解为1,如果锚为负,则为0。Faster R-CNN详解是表示预测边界框的4个参数化坐标的向量,Faster R-CNN详解是与正锚相关的地面真实框的向量。分类损失Faster R-CNN详解是两个类(对象与不是对象)的日志损失。对于回归损失,我们使用Faster R-CNN详解,其中R是[2]中定义的稳健损失函数(平滑L1)。术语Faster R-CNN详解意味着回归损失仅对正锚点被激活(Faster R-CNN详解=1),否则将被禁用(Faster R-CNN详解=0)。cls层和reg层的输出分别由{pi}和{ti}组成。

这两项用Ncls和Nreg归一化,并用平衡参数λ进行加权。在我们当前的实现中(如在已发布的代码中),Eqn中的cls术语。 (1)由小批大小(即Ncls=256)归一化,而reg项由锚定位置的数量(即Nreg∼2,400)归一化。默认情况下,我们设置了λ=10,因此cls和reg项的权重大致相等。我们通过实验表明,结果在很大范围内对λ的值不敏感(表9)。我们还注意到,上述的标准化是不需要的,可以进行简化。

3.训练候选框提取网络

训练候选框提取网络仍然采用 随机梯度下降法(SGD),为了提升训练速度,每个训练批次的锚都来自同一图像上的随机采样。一般情况下,随机选取锚在概率上会比较偏向未框中目标,为了保证训练样本的均衡, 需要人为地尽量保持框中目标的锚(正样本)与未框中目标的锚(负样本)在数量上保持1:1的比例。比如一个小批次如果包含256个锚,就要求这256个锚中,有128个为正样本,另外128个为负样本,当实际情况下确实无法选到128个正样本时,再使用负样本补齐差额。
实际训练时,一个常用的做法是基于ImageNet进行预训练。对于新增的网络层,一般使用均值为0,标准差为0.01的高斯分布进行初始化,然后对整个网络基于新的样本数据进行调优训练。

2 RPN和Fast R-CNN共享特征的方法

在检测过程中, RPN的作用是输出候选框,Fast RCNN的作用是基于候选框进行目标检测,两个网络的训练和预测过程目前彼此独立。为了更进一步地提升算法的整体效率,可以让这两个网络共享基础的卷积特征,然后设计另一个一致网络来处理候选框提取和目标检测这两个过程。为了实现这个目标,可以采取如下3种方法。
1.交替训练法
先训练RPN,然后基于RPN输出的候选框,以RPN的卷积层参数作为初值训练Fast R-CNN,再用Fast R-CNN的卷积层参数作为初值训练RPN。如此反复迭代,得到共享基础卷积层的RPN和Fast R-CNN。交替训练法在实际应用过程中,大致分为4个步骤: 第一步,基于ImageNet的预训练模型,端到端地训练用于提取候选框的RPN;第二步,同样基于ImageNet的预训练模型,使用第一步RPN输出的候选框,训练Fast R-CNN,此时RPN和Fast R-CNN两个网络尚无共享的卷积层;第三步,使用Fast R-CNN初始化RPN,在训练RPN的时候,固定底层共享的卷积层网络参数,仅迭代调优RPN中共享卷积层以外的网络参数;第四步,训练FastR-CNN,同样固定底层共享的卷积层网络参数,仅迭代调优Fast R-CNN中共享卷积层以外的网络参数。通过上述4个步骤,就得到了一个统一的共享底层卷积特征的用于目标检测的整体网络。上述交替训练的过程可以重复多次,但实验表明, 多次迭代对最终的算法性能并没有明显的提升。
2.近似联合训练法
训练网络的时候,将RPN和Fast R-CNN合并在一起,共用底层的卷积层。每次SGD迭代,网络前向传播预测的候选框被视为固定的,用作训练Fast R-CNN的候选框。反向传播时,共享的卷积层将RPN和Fast R-CNN回传的梯度相融合,使用融合后的梯度进行网络参数更新。虽然这种方法实现起来比较容易,但只是一种近似的处理,各个候选框的坐标其实也是变量,也需要参与反向传播的求导过程。在实际实验中, 通过近似联合训练法可以得到与交替训练法近似的结果,但耗费的时间只有交替训练法的25%~50%,因此也是一种经常被采用的方法。

Original: https://blog.csdn.net/qq_52053775/article/details/125233006
Author: 樱花的浪漫
Title: Faster R-CNN详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/650203/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球