Faster RCNN 论文阅读

1.网络架构

1677898772354

1677898794137

VGG16网络

anchors:人工放上去的

RPN对anchors进行二分类,正样本,负样本

RoIP:前面的框框已经圈出目标,但还不知道具体属于哪个类,它就是干这个工作的

2.VGG网络

VGG网络可以任意替换其他的任意神经网络,resnet等

以VGG网络为例:

  1. 首先缩放至固定大小MxN。VGG网络输出Feature Map
  2. 放入共享Conv layers
  3. RPN计算proposals
  4. Roi Pooling层则利用,proposals从feature maps中提取proposal features
  5. 送入后续全连接和softmax网络作classification。

1677898815454

3.共享卷积层

以VGG网络为例:

  • Conv layers部分共有13个conv层, 13个relu层,4个pooling层。
  • 所有的conv层都是:kernel_size=3,pad=1, stride=1
  • 所有的pooling层都是:kernel_size=2,pad=0, stride=2
  • 在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。
  • pooling层kernel_size=2,stride=2。这样每个经过 pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。
  • 一个MxN大小的矩阵经过Conv layers固定变为 (M/16)xN/16) (注:有四层pooling,2^4=16)

1677898831882

图像的大小改变都是有pooling造成的

为什么叫共享?因为VGG产生的Feature Map用于RPN的训练,同时也用于RCNN的训练

4.Anchors

绿框框逐行的扫描

备选框:有一定的可能性包含物体在里面

  • 4个值表示矩形左上和右下角点坐标:(x1,y1,x2,y2)
  • 九个矩阵共有三种形状,长宽比大约为:
  • 为每一个点都配备这9种anchors作为初始的检测框

1677898845416

对每一个点都生成这样的框框,量是非常巨大的

  • 原文中使用的是ZF model中,其 Conv Layers中最后的conv5层 num_output=256,对应生成256 张特征图,所以相当于feature map每个点都是256-dimensions.
  • 训练程序会在合适的anchors中随机选取128个postive anchors+128 个negative anchors进行训练

1677898857320

例如:1677898869043

一个feature map 就产生17100个anchors

4.1对Anchor分配标签

  • 区分前景与背景Anchor,标记标签(1 正例, -1 负例,0忽略)

    • 正例:对于每一gt box,交并比最大的 anchor、与任一 gt box交并比超过一定阈值(0.7)
    • 负例:与所有gt boxes交并比小于一定阈 值(0.3) 其他忽略
  • 对每一前景anchor,根据对应的gt box计算回归值

回归值的计算,使得框框的位置挪到一个更精确的位置

5.RPN(Region Proposal Network)

目的:判定哪些anchors有可能包含物体。

输入:所有的anchors (数量巨大)

输出:(1)包含物体的概率

(2)调整anchors的位置1677898889400

anchors人工标定的9种大小,RPN把背景区分出来

1677898905424

  • 上面一条用softmax分类anchors获得positive和negative
  • 下面一条用于计算对于anchors的bounding box regression偏移量
  • 最后的proposal获取positive anchors的正确proposal, 剔除太小和超出边界的 proposal

生成检测框是非常耗时的,例如使用SPP(金字塔特征获取)

6.正负样本的判定

1677898918631

9*2=18

7.Bounding Box Regression

  • 我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’。
  • Anchor box与predicted box, ground truth之间的平移量:1677898933613
  1. VGG输出50x38x512, 对应50x38xk个anchors
  2. RPN输出:
    1. 50x38x2k的positive/negative softmax分类特征矩阵
    2. 50x38x4k的regression坐标回归特征矩阵

8.Proposal Layer

  1. Proposal Layer负责综合变换量和positive anchors, 计算出精准的proposal。
  2. 3个输入: anchors分类结果,对应bbox的变换量和缩放信息
  3. 缩放信息:若经过4次pooling后WxH=(M/16)x(N/16),则缩放量为16。

1677898950462

处理流程:

  1. 生成anchors,依据变换量对所有的anchors做bbox regression回归。
  2. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors。
  3. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界。
  4. 剔除尺寸非常小的positive anchors。
  5. 对剩余的positive anchors进行NMS。
  6. 之后输出proposal=[x1, y1, x2, y2],对应的是MxN的图像尺度。

生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

9.Roi pooling

  • 目前的proposals还 没有具体的物体信息。
  • 因此需要从已有的 bounding boxes中 提取特征。1677898968374

两个输入:

  1. 原始的feature maps
  2. RPN输出的proposal boxes1677898978507

为何要RoI Pooling

  1. proposals大小形状各不相同
  2. 从Spatial Pyramid Pooling发展而来1677898989755

信息的丢失

图像的失真

处理步骤:1677899009637

1677899022369

10.分类

  1. 通过全连接和softmax对proposals进行分类
  2. 再次对proposals进行bounding box regression,获 取更高精度的bbox

1677899034734

11.Faster RCNN的训练

  1. 训练RPN,该网络用ImageNet预训练的模型初始化;
  2. 我们利用第一步的RPN生成的建议框,由 Fast R-CNN训练一个单独的检测网络,这个检测网络同样是由ImageNet预训练的模型初始化的;
  3. 我们用检测网络初始化RPN训练,但我们固定共享的卷积层,并且只微调RPN独有的层, 现在两个网络共享卷积层了;
  4. 保持共享的卷积层固定,微调Fast R-CNN的 fc层。这样,两个网络共享相同的卷积层, 构成一个一的网络。

12.网络总结

  1. 基于ZF或VGG16提取输入图像特征
  2. 生成anchors
  3. RPN计算:特征图feature map通过RPN预测anchor参数:置信度 (foreground)和转为预测框的坐标系数
  4. 根据anchors和RPN预测的anchors参数,计算预测框的坐标系数, 并得到每个预测框的所属类别labels。
  5. ROI Pooling把目标转为统一的固定尺寸。
  6. Fast RCNN 预测预测框的类别,和转为目标框的平移缩放系数。注意:这里要与RPN区分.

猜你喜欢

转载自blog.csdn.net/m0_57385165/article/details/129341991