Faster-RCNN详解

Faster-RCNN详解

Faster-RCNN源码分析可以点击这里

1. 向前传播过程

1.1 CNN提取特征

就是将图片输入到预训练好的CNN网络中获取特征图feature map。

以含有四层maxpool的vgg网络为例,输入图片大小为(w,h,3),则输出特征图的大小为(w/16, h/16, 512)

1.2 RPN网络

Faster-RCNN一个重要的变化就是抛弃了前代RCNN使用SS(Selective Search)方法生成检测框,而是使用RPN网络。

1.2.1 生成anchor base

anchor base就是由两个参数scale=[8,16,32]ratio=[0.5,1,2]两个参数生成的生成的,scale指anchor的长,ratio指anchor的长宽比,有这两个参数进行组合就能得到9个anchor base,anchor base用四个坐标(x,y,w,h)保存(分别表示中心点的坐标和长宽)。如下图所示

UhIcnO.png

1.2.2 获得所有anchor box

然后让anchor base在特征图feature map(w/16, h/16, 512)的每一个像素点上移动,由此就能得到 k = 9 ∗ w 16 ∗ h 16 k = 9*\cfrac{w}{16}*\cfrac{h}{16} k=916w16h个anchor。就是下图画圈部分的操作。

(注意anchor的坐标是相对与原图上的坐标,而不是特征图上的,所以在特征图上移动时需要将坐标映射会原图,在这里直接x,y坐标乘以16即可,因为特征图相对于原图缩小了16倍)

UhbhlR.png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AoKXbQ79-1595253678225)(https://s1.ax1x.com/2020/07/20/U4p2bd.png)]

1.2.3 边框回归获得ROIs
  1. 先使用Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))对特征图进行处理,得到图中的中间层(intermediate layer)
  2. 使用Conv2d(512, 9*2, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))对中间层进行处理得到anchor box的分类参数(用于判断anchor box中的是否含有检测目标,即前景和背景)
  3. 使用Conv2d(512, 9*4, kernel_size=(1, 1), stride=(1, 1), padding=(1, 1))对中间层进行处理得到anchor box的位置修正参数,然后将参数带入坐标回归公式就能得到ROIs的坐标。

坐标回归公式如下( d ( P ) d(P) d(P)为该卷积网络输出的参数, P P P为anchor的坐标, G ^ \hat{G} G^为回归后的预测坐标 ):

Ug4Zd0.png

1.2.4 筛选去掉一部分ROIs

上一步对anchor box使用边框回归获得了所有的ROIs,但是数量太多了,直接进行后续计算会增大计算量,所需需要筛选去掉一些。

  1. 将上述边框回归过程中得到的分类参数(用于判断前景和后景)输入到softmax,在其中选择得分大于给定得分阈值的那部分ROIs
  2. 在上述基础上再进行nms(非最大抑制),进一步筛选掉一部分ROIs
  3. 最后再剩余的ROIs随机抽取R个(训练时抽取2000个,测试时抽取300个)

通过以上步骤就完成了ROIs的筛选。

1.3 ROIPooling

ROIPooling起始就是简化版的金字塔池化(SSPNet),这里参考了这篇文章

  1. 假设下图就是我们的特征图

123

  1. 然后我们需要将ROIs(是原图上的坐标)映射到特征图上,如下图所示:

342

  1. 由于不同的ROI的大小和形状都不相同,但是我们却希望得到相同的输出怎么办呢? 这就是ROIPooling的核心部分,假设我们想得到一个2*2的输出,那么我们就能将上述ROI对应的特征图划分为如下图所示的2*2的矩阵,然后再每个小矩阵上分别使用maxpool即可。

划分~

131

分别使用maxpool

U4S4cF.png

1.4 获得最后的预测结果

  1. 将上述ROIPooling后得到所有ROIs相同大小的输出特征输入到全连接层中,假设最后获得一个4096的一个输出向量。
  2. 将上述4096向量输入到用于边框回归的全连接网络,再使用上述的边框回归计算公式得到最终的边框
  3. 将上述4096向量输入到种类回归(共n_class +1 种,n_class种物体,还有一种表示背景)的全连接网络,得到各个边框的物体种类和相应的置信概率

2. 反向传播过程

2.1 RPN网络的训练

RPN网络需要训练的部分就是位置修正参数种类参数(前景和背景)的卷积网络。

对于位置修正参数,我们只需要根据人工标定的bounding box,然后结合生成的anchor box就能获得推得位置修正参数的ground truth(其实就是由anchor box和和位置修正参数推到ROI的逆过程),然后计算Smooth L1 Loss(探测边框回归)

对于种类参数,计算Softmax Loss(探测分类概率)

得到上述的两个损失值,然后根据下列的损失函数就能得到最终的损失函数:

L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N c l s ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\left\{ p_i \right\},\left\{ t_i \right\})=\cfrac{1}{N_{cls}}\underset{i}{\sum}L_{cls}(p_i,p_i^*)+\lambda \cfrac{1}{N_{cls}}\underset{i}{\sum}p_i^*L_{reg}(t_i,t_i^*) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNcls1ipiLreg(ti,ti)

2.2 最后预测网络的训练

和RPN网络的训练十分类似,就是一个位置修正参数种类参数(n_class+1种)的全连接网络的回归。

对于位置修正参数,根据人工标注的bounding box结合输入的ROIs就能得到位置修正参数,然后计算Smooth L1 Loss(探测边框回归)

对于种类参数,计算Softmax Loss(探测分类概率)

同上计算最后的损失值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值