Faster RCNN论文理解

文章目录

  • Faster-RCNN
    • 1. Introduction
    • 2. Related Work
    • 3. Faster RCNN
      • RPN之前的CNN(Backbone)
      • 3.1 Region Proposal Networks
        • 3.1.1 Anchors
        • 3.1.2 Loss Function
        • 3.1.3 Training RPNs
      • 3.2 Sharing Features for RPN and Fast RCNN
  • 问题
  • 参考

Faster-RCNN

1. Introduction

该论文要解决的问题
区域推荐算法还是有不足,SS速度很慢,卷积网络在GPU上运行,而区域推荐方法在CPU上运行。如果用GPU处理推荐区域,那么速度会更快。
作者的方法
引进了一个Region Proposal Networks(RPNs)方法,用深度卷积神经网络来计算推荐区域,能和检测网络分享计算层。
作者方法简介
feature map可以像Fast RCNN一样被用来做基于区域的检测,也可以用来生成推荐区域,设计RPNs来有效预测一个宽范围的尺度和方向比例的推荐区域
然后提出一个训练的计划, 在区域推荐的任务的微调和目标检测的微调之间交替进行,同时保证推荐固定,这个计划收敛的很快,而且还能在这些任务中共享计算。

就是说先粗调anchor,得到粗调的anchor,再在这个微调的anchor上同时进行位置微调和分类预测,虽然生成了更好的被调整的anchor,但是分类还是用的之前的粗调的anchor

Faster RCNN论文理解_第1张图片
作者使用在回归函数中的参考框的金字塔。

和其他方法不同,这样计算量会小很多,只需要每次对feature map的一个区域提取一次(只有一种scale的filter),然后对它进行金字塔处理就可以了。

2. Related Work

RCNN缺陷
RCNN网络通过端对端的方法,将推荐区域分成Object类别或背景。RCNN主要扮演一个分类器的角色,而没有预测物体的边界(不计算被bounding box regression重新定义的话)。它的准确性依赖于区域推荐模块的表现。

3. Faster RCNN

Faster RCNN由两个模块组成

  1. 第一个模块是一个深的卷积网络,用来推荐区域
  2. 第二个模块是一个Fast RCNN检测器,使用被推荐的区域来分类和微调边界框

整体的体系是一个单一的、统一的目标检测网络。RPN告诉Fast RCNN模组应该检测哪些区域。
Faster RCNN论文理解_第2张图片

RPN之前的CNN(Backbone)

13个conv,13个relu,4个pooling
所有的conv层都是:kernel_size=3,pad=1,stride=1
所有的relu层都是:kernel_size=2,pad=1,stride=1
所有的pooling层都是:kernel_size=2,pad=,stride=0
因此conv层和relu层不会改变输入和输出矩阵的大小,而pooling层会让输出的长宽等于输入的1/2

所以,M x N大小的矩阵经过Conv layers就会变成(M/16) x (N/16)。

3.1 Region Proposal Networks

输入
一个RPN接受一个image作为输入
目标
和Fast RCNN共享计算,所以我们假定两个网络分享一个公共的卷积层。
实现目标的方法
对最后的特征层进行滑窗操作( 3 × 3 3 \times 3 3×3),每个滑动窗口会映射成一个低维度的特征,然后把这个特征喂进两个并列的全连接层:一个是回归层,一个是分类层。
输出
一系列矩形的推荐区域,每个都带着目标分数。

3.1.1 Anchors

介绍了anchor的概念,还有使用anchor的好处

对于每个滑动窗口,都会预测对各推荐区域,然后每个position的最大可能性的推荐的数量,定义为k。所以reg层的4k个输出就能确定k个box,cls层输出的2k就是估计每个推荐区有Object和没Object的概率。这k个推荐处理后就是anchor。每个anchor的中心都在滑窗中(中心),使用了三个尺寸和三个长宽比,所以每个sliding position有9个anchor。
Faster RCNN论文理解_第3张图片
平移不变性
作者的方法的一个重要属性就是平移不变性,这些依赖于anchor计算推荐相对于anchor的函数。这个属性同时也减少了modle size。当k=9的时候,只有一个维度是(4+2)x 9的卷积输出层,输出层有2.8 x 1 0 4 10^4 104个参数(512 x ( 4 + 2 ) x 9 for VGG-16)。

Anchor的多尺度
作者的方法是建立一个anchor的金字塔,这样的成本效益更好。作者方法参考多尺度和多纵横比anchor box分类回归边界框。它只依赖一个单尺度的 image 和 feature map ,并且使用一个单尺度的过滤器(就是滑窗只滑一次就够了)。这个多尺度的anchor是不附加额外计算成本的关键。

Faster RCNN没有FPN,但有多尺度anchor

3.1.2 Loss Function

讲的是如何训练,其中包括如何划分正负样本损失函数如何定义,以及算是函数中的含义,还有后面回归框的计算,最后是关于anchor的一部分细节。

正负样本选择
为了训练RPNs, 给每个anchor分配一个二分类标签(决定有没有object)。

  • 正样本:
    • 和ground-truth box 有最高IoU的Anchor
    • 和ground-truth box 的IoU超过0.7的

注意: 一个ground-truth box可能会将好几个anchor都设置为正样本,一般情况下,第二个条件已经能满足我们的需求了,但我们还是要采用第一个条件,因为如果只用第二个条件,有的时候会找不到正样本。

  • 负样本:
    如果和所有的ground-trurh box的IoU都小于0.3的话,就把该anchor设置为负样本。

剩下的Anchor对训练没有帮助。

损失函数
Faster RCNN论文理解_第4张图片
i i i是一个batch中的anchor的index
p i p_i pi 是被预测anchor中有object的可能性
p i ∗ p^*_i pi是,如是正样本,就是1,如果是负样本,就是0
p i ∗ L r e g p^*_iL_{reg} piLreg是说,如果是正样本,就激活,负样本就不激活
t i t_i ti 代表了被预测的bounding box
t i ∗ t^*_i ti 是和正样本anchor关联的ground-truth box。。
L c l s L_{cls} Lcls是一个二分类器。
对于回归损失来说,我们用 L r e g ( t i , t I ∗ ) = R ( t i − t i ∗ ) L_{reg}(t_i,t^*_I)=R(t_i-t^*_i) Lreg(ti,tI)=R(titi),其中 R R R是smooth L 1 L_1 L1

在这里插入图片描述
cls和reg层的输出由 p i p_i pi t i t_i ti组成。
N c l s N_{cls} Ncls N r e g N_{reg} Nreg是用来标准化的,前者是mini-batch size, 后者是number of anchor locations。
λ \lambda λ是用来平衡二者权重的,默认是10。
Faster RCNN论文理解_第5张图片
不带 ∗ * 的是真实值,带 ∗ * 的是预测值。

在我们的方程式中,被使用的特征是相同大小的(3x3),来自feature maps.为了计算变化的尺寸,设计了多个回归量(k,9)来学习。每个回归量都代表一个scale和一个aspect ratio,而且这k个回归量不共享权重

3.1.3 Training RPNs

可以通过反向传播SGD来进行端对端的RPNs训练。
训练的mini-batch来自包含很多正负样本anchor的单个图片。全部的anchor的loss函数都是有可能优化的,但是偏置会指向负样本,因为负样本占主体地位
我们从一个图片中采集256个anchor来计算mini-batch的损失函数,其中被采样的正样本和负样本的数量是1:1。如果正样本不足128的话,我们就用负样本填充
随机初始化所有的新的层的weigths(均值为0,方差为0.01的高斯分布),然后其他的层的权重就用预训练ImageNet classficition模型初始化 。
使用的是 学习率为0.001,mini-batch是60k,接下来的是学习率为0.0001,mini-batch是20k

3.2 Sharing Features for RPN and Fast RCNN

接下来是用一个由RPN和Fast RCNN组成的共享卷积层的统一的神经网络。
RPN和Fast RCNN是独立训练的,都会用不同的方法来修改他们的卷积层。因此我们需要开发一个技术,能让他们两个网络之间共享卷积层,而不是学习两个独立的网络,我们讨论三种方法来训练一个特征共享的网络:

(1) Alternating training:我们先训练RPN,然后用RPN生成的推荐来训练Fast RCNN,然后用Fast RCNN 调优的神经网络来初始化RPN。(Fast RCNN调优了什么神经网络?就是最开始的那个没训练的?VGG?)重复这个过程。在这篇论文的实验中,用到的都是这个方法。
(2)Approximate joint training: RPN和Fast RCNN在训练期间被整合到一块,就像Figure 2。在每次的SGD迭代中,将RPN生成的推荐区域,当成是一个固定的、与计算的推荐区域给Fast RCNN训练。反向传播就和往常一样,对联合起来的一整个共享layer进行方向传播。但是,我们忽略了w.r.t的导数,而推荐区域的坐标也是卷积层的产物(应该就是这个东西没参与反向传播的计算),所以我们叫做近似计算。
(3)Non-approximate joint training:超出本文范围,不讨论

4-Step Alternatingh Training:
使用交替优化的四步学习共享特征训练算法
一、像3.1.3描述的那样训练RPN。用Image-Net-pre-trained model来初始化RPN网络。
二、使用第一步RNP生成的推荐区域来训练Fast RCNN(此时Fast RCNN是一个单独的网络),Fast RCNN的权重通过Image-Net-pre-trained model来初始化,这个时候并没有什么共享,这两个网络是连续的。
三、用训练好的网络来初始化RPN,固定被共享的卷积层的参数不变(通过设置learning_rate=0),然后对RPN独有的层进行微调(如何微调???)
四、还是固定共享的卷积层参数不变,对Fast RCNN独有的层进行微调。
上面的交替训练可以迭代很多次,但是提升不大。

问题

anchors的postivate和negative分类是softmax搞出来的???(我懂了,训练的时候是使用的与ground-truth box的IoU来分P或N,但是使用的时候,是用softmax来预测是P或N)
用boduning box regression修正anchors获得精准的proposals.
预测出来的是bounding box regression的偏移量?
最后的proposals层综合positive anchors和bounding box regression偏移量来得到精确的proposals,同时剔除太小或超出边界的proposals.

aaa
这两次是哪两次?RPN layer一次,ROI layer 的FC之后又一次
最后的预测,每个anchor都有偏移量?不是,只有被选中的正样本才有偏移量吧
之后会从其中随机选128个正和负样本?(正负样本怎么来(anchor生成层出来的),训练的时候可以是IoU,这会呢???(应该还是用的上一层RPN的标签))

在这里插入图片描述
怎么判断有没有目标?不是还有box回归吗

RPN环节:softmax判定positive和negative(应该判断的是有没有object的置信度吧?这里的正样本和后面的不太相同?后面是根据Anchor来调整softmax的参数?)

Faster RCNN论文理解_第6张图片
在进入reshape和Softmax中,先做了1x1的卷积。经过1x1的卷积输出的图像为 W x H x 18的大小,对应feature maps中的9个anchor,信息都保存在 W x H x (9*2)矩阵中,对应这每个cell的9个anchor的positive和negative情况。这就相当于初步确立了推荐区域box,为什么这么说呢,应为anchor本来就是一个框,positive就是假定框里有object的情况。

RPN的bounding box regression

Faster RCNN论文理解_第7张图片
另一条线路: 这个1x1输出的维度是W x H x (4*9) 就是说对于每个anchor,都有一个预测的回归量

Proposal Layer
综合所有的regression box量和positive anchors,
1.对所有生成的anchor进行regression box处理,得到所有修正过的anchors
2.提取前N个softmax的positive分数最高的修正过的anchors
3.限定超过图像边界的positive anchor为图像边界
4.剔除掉size非常小的anchor
5.对所有的anchors进行非极大值抑制

anchor基本是覆盖了800x600的各个尺度和形状

关于anchor的置信度:每个点都是256维的向量,通过全连接变成2k,然后softmax ,2k
变成k??

训练
1.

Faster RCNN论文理解_第8张图片

Faster RCNN论文理解_第9张图片

Faster RCNN论文理解_第10张图片

参考

文章链接
知乎文章

你可能感兴趣的:(Detection)