Faster R-CNN理论

  • Post author:
  • Post category:其他




前言

本文参考来源于b站up主霹雳吧啦Wz.

原视频

.

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


在这里插入图片描述




理论部分



1.Fast R-CNN简介

在讲Faster R-CNN之前我们先来简单的看一下它的上一代算法:Fast R-CNN

在这里插入图片描述

Fast R-CNN算法的流程可以分为三个步骤:

  • 通过使用Selective Search方法在一张图片上生成1000~2000个

    候选区域

    (这种方法在Faster R-CNN中RPN网络被替代)
  • 将图像输入卷积网络生成相应的

    特征图

    ,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。(也就是相当于有了一张特征图,然后在特征图上将ss算法扫到的区域框出来)
  • 将每个特征矩阵通过ROI pooling层缩放到7×7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果



2.Faster R-CNN简介

Faster R-CNN算法的流程可分为三个步骤:

  • 将图像输入网络得到相应的

    特征图
  • 使用RPN结构生成候选框,将

    RPN生成的候选框投影到特征图上

    获得相应的特征矩阵
  • 将每个特征矩阵

    通过ROI pooling层缩放到7×7大小的特征图

    ,接着将特征图

    展平

    通过一系列全连接层得到预测结果

    在这里插入图片描述

    实际上我们的Faster R-CNN可以看作是

    RPN+Fast R-CNN

    这个形式。Faster R-CNN和Fast R-CNN最主要的区别就在于:

    Faster R-CNN将候选框的推举交给RPN网络来实现(替代了SS算法)



    因此我们的研究重点就在于RPN网络。



3. RPN网络

在这里插入图片描述



参数解释

首先,由上一步的conv layers生成了conv feature map。在这张特征图上,我们使用一个滑动窗口进行滑动。每滑动到一个位置上时候,我们就生成一个1-dim向量。在这个向量基础上再通过两个全连接层,分别输出目标概率和边界框回归参数。其中:

  • 256-d:因为我们前面的backbone网络使用的是

    ZF网络

    ,它所输出的特征图是

    256-d

    。如果使用

    VGG-16

    ,生成的特征图就是

    512-d

  • 2k:是指k个anchor boxes,每个anchor boxes生成两个概率(前景和背景)。所以k个anchor boxes会生成2k个scores。
  • 4k:对每个anchor boxes我们会生成4个边界框回归参数。所以k个anchor boxes会生成4k个coordinates。



anchor boxes解释

在这里插入图片描述

首先明确上图的含义,左边是原图,右边是相应的特征图,我们使用一个3*3滑动窗口在特征图上进行滑动的时候,特征图会存在一个中心点,通过推算出该中心点在原图上的对应位置,在原图上以这个中心点为中心,生成一系列anchor boxes。举个例子,就是如下这种效果:

在这里插入图片描述

对于k个anchor boxes,存在2k个scores。两个两个为一组(前景和背景的概率),一共k组。比如第一组:

  • 0.1代表其中一个anchor boxes框选(比如是图中的正方形框)的内容是背景的概率是0.1;
  • 0.9代表其中一个anchor boxes框选(比如是图中的正方形框)的内容是前景的概率是0.9;

这里只是对它进行背景还是前景的预测,并没有进行分类!


对于k个anchor boxes,存在4k个coordinates。每四个为一组,共k组。




  • d

    x

    ,

    d

    y

    d_x,d_y







    d










    x


















    ,





    d










    y





















    是anchor中心点的坐标;




  • d

    w

    ,

    d

    h

    d_w,d_h







    d










    w


















    ,





    d










    h





















    是anchor的宽和高的调整参数;

    在这里插入图片描述

    论文里面给出了三种尺度(面积)的anchor(



    12

    8

    2

    ,

    25

    6

    2

    ,

    51

    2

    2

    128^2,256^2 ,512^2






    1


    2



    8










    2









    ,




    2


    5



    6










    2









    ,




    5


    1



    2










    2












    ),三种比例(1:1,1:2,3:1),每个位置(每个滑动窗口)在原图上都对应



    3

    3

    3*3






    3













    3





    ,9个anchor。

    在这里插入图片描述

这里有个点需要注意:

对于ZF感受野为171;对于VGG感受野为228。可是我们从上面可以知道,生成的anchor有256和512的,那么感受野还没有这个anchor大,我们能进行判断嘛?

如上图:作者给出了相应的解释,作者认为一个比较小的感受野(也就是看见一个物体的一部分),我们也可以大概的知道这个物体是什么。(有种窥一斑也可以知全豹的感觉)。实际使用的时候也证明这样是有效的。


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



RPN训练过程中正负样本的选择标准

在这里插入图片描述

通过滑动窗口在特征图上进行滑动,我们得到了上万个anchor,这些anchor不能都用来训练RPN网络。在原论文中作者说每张图片我们随机的采样256个anchor。这256个anchor是由正样本和负样本组成。正负样本的比例为1:1。如果正样本不足一半,我们就用负样本来填充。

下面是正负样本的选择标准:

在这里插入图片描述

在这里插入图片描述

正样本的选择标准:

  1. an anchor that has an IoU overlap higher than 0.7 with any ground-truth box.
  2. the anchor/anchors with the highest Intersection-overUnion (IoU) overlap with a ground-truth box

负样本的选择标准:

We assign a negative label to a non-positive anchor if its IoU ratio is lower than 0.3 for all ground-truth boxes.

丢弃掉的anchor:

Anchors that are neither positive nor negative do not contribute to the training objective.




RPN Multi-task loss

在这里插入图片描述

其中:

i: the index of an anchor in a mini-batch




p

i

p_i







p










i





















:第i个anchor预测为object的概率




p

i

:

p_i^*:







p










i





























:





当为正样本时候为1,当为负样本时候为0




t

i

t_i







t










i





















: 表示预测第i个anchor的边界框回归参数




t

i

t_i^*







t










i






























:表示第i个anchor对应的GT Box的边界框回归参数




N

c

l

s

N_{cls}







N











c


l


s






















:表示一个mini-batch中的所有样本数量256




N

r

e

g

N_{reg}







N











r


e


g






















:表示anchor位置的个数(不是anchor个数)约2400(60*40)




λ

\lambda






λ





=10



分类损失

按多类别交叉熵损失来理解:

在这里插入图片描述

按二值交叉熵损失理解:

在这里插入图片描述

在这里插入图片描述



Fast R-CNN Multi-task loss

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



4.Faster R-CNN训练


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


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

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



5.Faster R-CNN框架

Faster R-CNN应用了端对端的思想,将Region proposal;Feature extraction;Classification;Bounding-box regression都融合进了CNN网络。

Faster R-CNN与前代算法框架的比较:

在这里插入图片描述



版权声明:本文为weixin_45042017原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。