Faster RCNN目标检测

Faster RCNN目标检测

原大佬视频

Faster RCNN是作者Ross Girshick继RCNNFast RCNN之后的又一力作,其核心在于RPN(Region Proposal Network)。

  • 同样使用VGG16作为Backbone
  • 推理速度在GPU上达到5fps(包含候选区域生成)。
  • 准确率进一步提升(@ILSVRC & COCO, 2015)

回顾Fast RCNN的算法流程:

  • 一张图像生成1K~2K个候选区域。(Selective Search)
  • 将图像输入网络,得到特征图,将SS生成的候选框投影到特征图上得到相应的特征矩阵。
  • 将每个特征矩阵通过ROI pooling(Region of Interest)Layer缩放到7 * 7大小的特征图,接着将特征图展平,通过一系列全连接层得到预测结果(类别与位置)。

Faster RCNN算法概括

  • 将图像输入网络得到相应的特征图(图中feature map)
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过RoI Pooling层缩放到7 * 7大小的特征图。紧接着将特征图展平通过一系列的全连接层得到预测结果
    Faster RCNN概述
    也就是说Faster RCNN与Fast RCNN的主要区别在于RPN网络(Faster RCNN = RPN + Fast RCNN)。

RPN网络结构

RPN
上图中Channel256的原因:在使用ZF网络作为Backbone的时候它所生成的特征图的Channel是256。如果使用VGG16,对应的应该是512。

Anchor的计算过程

Step 1. 对于特征图上每个3 * 3的滑动窗口,首先计算其中心点在原图上所对应的位置。观察下图:

anchor

上图左边是原图,右边是特征图,虚线表示对应的像素点。
如何找它们的对应关系呢?

  1. 找出x坐标
    [原图width / 特征图width ] = 步距Stride
    上图特征图的小黑点在其x坐标可以数出为3,那么原图上对应的x位置应该是 步距 * 3。
  2. 同理y坐标
    [原图height/ 特征图height] = 步距Stride
    上图特征图的小黑点在其y坐标可以数出为3,那么原图上对应的y位置应该是 步距 * 3。

Step 2. 以计算出的对应点为中心,计算出K个Anchor Box

每个anchor box都是给定的大小和长宽比例

Step 3. scores和coordinates如何影响anchors

anchor
比如第一组score,(0.1,0.9)假设对应的黄色的anchor box,那么代表它是背景的概率是0.1,前景的概率0.9。
同样的dx,dy,dw,dh也是针对此anchor中心坐标,宽高的调整。
在实际中,一个像素点可能对应多个anchor box
3anchor
在Faster RCNN中给出了多种尺度和比例的Anchor。

  • 三种尺度(面积):
  • 三种比例:{1 :1, 1 : 2,2 :1}
    也就是说,每个位置(滑动窗口),在原图上都对应 3 * 3 = 9个anchor。
    9种anchor示例:
    9种anchor
    这样,我们在每个位置,都会生成2 * 9 = 18个类别分数。4 * 9 = 16个边界框回归参数。

Step 4. anchor精简

对于一张1000 * 600 * 3的图像,大约有60 * 40 * 9 = 20K个anchor,
忽略跨边界的anchor后,剩下约6000个anchor,调整为6000个候选框,
对于RPN网络生成的候选框Proposal之间存在大量重叠,
基于候选框得分cls,采用NMS,IOU阈值设置为0.7,
这样图像就只剩下2K个候选框(约等于SS算法所提供的候选框数量)。
(PS. Anchor ≠ Poposal,我们利用RPN生成的边界框回归参数,调整到我们所需要的候选框)

RPN网络的实现过程

在RPN网络结构中,滑动窗口使用 3 * 3的卷积,
padding = stride = 1,把每一个点都覆盖到。
而后生成一个高宽深度与此feature map一样的特征矩阵,即shape没有变化。
在得到的特征矩阵上,并联两个1 * 1的卷积层,实现对类别的预测和位置参数的回归。

正负样本的判定

滑动窗口生成了20K个anchor,但不是每一个anchor都用来训练RPN网络。
在论文中,对于每张图片,在上万的anchor中,
采样256个anchor,这256个anchor,正负样本比例尽量保持在1 : 1,
如果正样本的数量不足128,则使用负样本填充。

  • 正样本的定义
    只要anchor与GT box 的IoU超过0.7,此anchor作为正样本。
    Or,anchor与某一个GT拥有最大的IoU,也指定成正样本。(即图片中,GT与一系列的anchor相交,IoU最大的为正样本)
  • 负样本
    与所有的GT box的IoU都小于0.3的anchor。
    对于正样本与负样本之外的anchor,全部丢弃。*

1. RPN Multi-task loss

RPN Multi-task loss

  • \(p_i\)表示第i个标签预测为真实标签的概率
  • \(p_i^*\)为正样本时为1,负样本时为0(艾弗森括号)
  • \(t_i\)表示预测第i个anchor的边界框回归参数
  • \(t_i^*\)表示第i个anchor对应的GT Box的边界框回归参数
  • \(N_{cls}\)表示一个mini-batch(本论文中表示一张图像)中所有的样本数量256
  • \(N_reg\)表示anchor位置的个数(不是anchor个数)约2400
  • λ = 10
    分类损失采用Softmax Cross Entropy(or Binary Cross Entropy),位置损失与Fast RCNN相同,采用SmoothL1损失。

2. Faster RCNN Multi-task loss

Faster RCNN Multi-task loss

Faster RCNN Loss与Fast RCNN相同,
在目前实际训练时,采用RPN loss + Faster RCNN Loss联合训练的方式(直接加到一起)。
而在原论文中采用了分步训练的方法,现简单介绍如下:

  1. 利用ImageNet与训练分类模型初始化前置卷积层参数(backbone),并开始单独训练RPN网络参数
  2. 固定RNP网络独有的卷积层和全连接层参数,再利用ImageNet与训练分类模型初始化前置卷积参数,并利用RPN网络生成的目标建议框训练Fast RCNN参数
  3. 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN
  4. 同样保持固定前置卷积层网络参数,微调Fast RCNN全连接层。最后RNP与Fast RCNN共享前置卷积网络层参数,构成一个同一网络。
posted @ 2022-04-13 14:23  白柒  阅读(171)  评论(0)    收藏  举报