faster rcnn 阅读笔记

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

原文地址
代码地址


Region Proposal Networks

  1. 输入为任何尺寸的图片,输出一组矩阵,并有各个的给分
  2. 主要使用全连接神经网络进行建模
  3. 全连接神经网络与与Fast R-CNN对象检测网络共享卷积权值信息
  4. 在最后的卷积层上使用一个小型的卷积网络。该小型网络将输入卷积特征图作为输入和空间窗口。 每个滑动窗口都映射到一个较低维的特征。实现方式是两个1*1的卷积层以及一个n*n的卷积层

使用了注意力机制
使用了注意力机制

Anchors

在每个滑动窗口的地方,对多种边界进行预测,最大可能性的地方被标注为k。reg层有4k个输出(坐标点)来对应k个预测的区域。

每个anchor在每一个滑动窗口的中心,并且与一个比率以及标准有关。

一个W*H的特征图有WHk个anchor。

比如这里一个框,有3个标准与3个尺度(k=3*3=9),所以遍历整个图之后得到的,就是WHk个anchor。
在这里插入图片描述
RPN详解

Multi-Scale Anchors as Regression References

常用的两种处理的方法:

  1. 将整个图像进行放缩,每个放缩尺度进行计算
  2. 改变滑动窗口的大小以及横纵比例(such as 5×7 and 7×5)

loss function

Intersection-over-Union (IoU) 联结交界
选择anchor的时候,操作是

  1. 一个anchor是相对来说最大覆盖一个真实框的
  2. 一个anchor覆盖率大于0.7

通常,第二个条件足以确定阳性样本。 但是仍然采用第一个条件是因为在极少数情况下,第二个条件可能找不到阳性样本。
对于小于0.3的样本,直接标记为负样本。
L ( p i , t i ) = 1 N c l s ∑ L c l s ( p i , p i ∗ ) + λ N c l s ∑ p i ∗ L c l s ( t i , t i ∗ ) L({p_i},{t_i})={{1}\over{N_{cls}}}\sum L_{cls}(p_i,p^*_i)+{{\lambda}\over{N_{cls}}}\sum p^*_i L_{cls}(t_i,t^*_i) L(pi,ti)=Ncls1Lcls(pi,pi)+NclsλpiLcls(ti,ti)

变量名说明
ianchor在一个小批量的索引
p i p_i pianchor是一个物体的预测值
p i ∗ p_i^* pianchor是一个物体的真实值,以0/1表示
t i t_i ti预测框的坐标,4个参数
t i ∗ t_i^* ti真实框的坐标,4个参数
L c l s L_{cls} Lclslog loss
L r e g L_{reg} Lregreg loss,定义是: R ( t i − t i ∗ ) R(t_i−t^∗_i) R(titi),其中 R R R是鲁棒性损失函数
p i ∗ L r e g p_i^*L_{reg} piLregreg loss只在正样本的时候被计算,因为只有正样本的时候, p i ∗ 才 等 于 1 p_i^*才等于1 pi1
N c l s N_{cls} Ncls标准化参数
N r e g N_{reg} Nreg标准化参数

在这里插入图片描述
x,y为中心坐标的位置
w,h为区域的宽度以及高度
x , x a , x ∗ 分 别 指 代 预 测 盒 子 , a n c h o r 盒 子 , 真 实 盒 子 x,x_a, x^∗分别指代 预测盒子, anchor 盒子, 真实盒子 x,xa,x,anchor,

在前文中,使用的卷积核是(3x3)固定大小的,为了适应各种形状的一套k个边界盒子的回归被学习到了。

Training RPNs

可以被反向传播以及stochastic gradient descent (SGD)训练。中心思想是以图像为中心。每个小批样本均来自包含多个正负示例锚的单个图像。

对所有样本进行损失函数的优化是可行的,但是问题是会导致偏向占据主导地位的负样本。

在图像中随机采样256个anchor,以计算小批量样本的损失函数,其中所采样的正anchor和负anchor的比例最大为1:1。 如果图像中的正样本少于128个,就用负样本填充小批量样本。

零均值高斯分布(标准偏差为0.01)中绘制权重来随机初始化所有新层。

所有其他层(即共享的卷积层)都通过预先训练ImageNet分类模型,标准实践来初始化。

sharing Features for RPN and Fast R-CNN

训练方法:

  1. Alternating training 首先训练RPN,然后使用反馈来训练Fast R-CNN。然后使用由Fast R-CNN调谐的网络初始化RPN,然后重复此过程。
  2. Approximate joint training 每个SGD迭代的时候,前向传播生成的区域在训练Fast R-CNN检测器时像固定的
  3. Non-approximate joint training RoI层接受卷积特征图作为输入,并且对于可能的盒子进行预测。

Roi layer

Roi pooling层详解:

Roi pooling层也是pooling层的一种,只是是针对于Rois的pooling操作而已。

Roi pooling层的过程就是为了将proposal抠出来的过程,然后resize到统一的大小。

Roi pooling层的操作如下:

1、根据输入的image,将Roi映射到feature map对应的位置;

2、将映射后的区域划分为相同大小的sections(sections数量和输出的维度相同);

3、对每个section进行max pooling操作;
Roi learn more
Roi learn more

4-Step Alternating Training

  1. 训练RPN网络:该网络使用ImageNet预先训练的模型进行初始化,并针对检测端到端进行了调整。
  2. 我们使用步骤1 的RPN给出的区域,通过Fast R-CNN训练一个单独的检测网络。 该检测网络也由ImageNet预训练模型初始化。 此时,这两个网络不共享卷积层。
  3. 我们使用检测器网络初始化RPN训练,但固定共享的卷积层,仅微调RPN特有的层。现在,这两个网络共享卷积层。
  4. 保持共享卷积层固定,微调Fast R-CNN的唯一层。 这样,两个网络共享相同的卷积层并形成统一的网络。 可以进行类似的交替训练进行更多的迭代,但是我们发现改进可以忽略不计。

Implementation Details

  1. 对图像放缩,使得最短边的长度为600px
  2. ZFand VGG 最后一个卷积层上的ZF和VGG网络的总步幅为 16像素(这个步长的效果已经不错,还是可以更小)

相关文章链接

Faster-RCNN代码+理论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值