Faster R-CNN详解

参考链接:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/#ITEM-1455-2
https://zhuanlan.zhihu.com/p/31426458

Faster R-CNN

专门的Region Proposal模块是当前的速度瓶颈,Faster R-CNN 直接用CNN (Region Proposal Network, RPN) 来生成Region Proposal,并且和第二阶段的CNN共享卷积层。
整体框架如下,可以看作是Fast R-CNN+ RPN,其中RPN用来生成候选框Region Proposal。
在这里插入图片描述

Region Proposal Layer

Region Proposal Layer包括RPN和3个layers – Proposal Layer, Anchor Target Layer and Proposal Target Layer.

RPN(Region Proposal Network)

Anchor实际上为不同尺度的矩形框,用来框出原始图像中的目标,具有scale和ratio两个参数。作者使用了3个scale:{128,256,512}和3和ratio:{1:1,1:2,2:1},这些框基本满足了原始图像的不同目标。
在这里插入图片描述在这里插入图片描述
9种anchors只是初始的检测框,后面的bounding box regression会会对检测框进行微调。下面展示了对于给定3D的feature map得到进行分类和回归检测框:
在这里插入图片描述
假设我们VGG作为backbone,初始图像的输入大小为 800 × 600 800\times 600 800×600,VGG下采样16倍得到的feature map的spatial size为 c e i l ( 800 / 16 ) × c e i l ( 600 / 16 ) = 50 × 38 ceil(800/16)\times ceil(600/16)=50\times 38 ceil(800/16)×ceil(600/16)=50×38。首先通过一个普通的 3 × 3 3\times 3 3×3的卷积得到新的3Dfeature map,其维度为 50 × 38 × 256 50\times 38\times 256 50×38×256,然后经过2路的 1 × 1 1\times 1 1×1卷积分别得到 50 × 38 × 2 k 50\times 38\times 2k 50×38×2k 50 × 38 × 4 k 50\times 38\times 4k 50×38×4k,注意这里分类层cls layer和回归层reg layer都是针对3D的feature map进行操作,相当于全卷积的方式。这实际是一种“人为设置的逻辑映射”。当然,也可以不这样设置,但是无论如何都需要保证在训练和测试过程中映射方式必须一致。

介绍完过程,介绍一下原因。首先对于spatial size为 50 × 38 50\times 38 50×38的feature map,每一个像素点都对应着提前定义好的 k k k个anchor,所以需要生成 50 × 38 × k 50\times 38\times k 50×38×k个anchors。对于最终生成的 50 × 38 × 2 k 50\times 38\times 2k 50×38×2k 50 × 38 × 4 k 50\times 38\times 4k 50×38×4k 2个feature map,每个像素分别对应 2 k 2k 2k个数和 4 k 4k 4k个数。即为 k k k个anchor是前景还是后景的概率,还有 k k k个anchor的4个回归的系数(regression coefficients)。

在图中可以看到,每个anchor的中心像素对应着滑动窗口的中心像素。对于VGG降采样16倍来说,左图一个大方格对应 16 × 16 16\times 16 16×16个小蓝色像素。

Proposal Layer

过程如下图所示:
在这里插入图片描述
上路分支,输入所有的anchor的坐标和RPN得到的回归系数对anchor的坐标进行微调并clip超出边界的anchor。下路分支对RPN得到的分类概率对anchor进行分类。两路合并的anchor通过NMS进行anchor筛选。

Anchor Target Layer

该层的目的是选出合适的proposal进行RPN网络的训练:
对于分类,论文中将满足以下两种规则的 anchor 判定为 positive

  • anchor 与任一目标的 ground truth box 的IoU值最大
  • anchor 与任一目标的 ground truth box 的IoU值 > 0.7

因此,存在一个 ground truth 对应多个 anchor 的情况。当 IoU 值 < 0.3 时,则认为 anchor 为 non-positive,即背景。除此之外,其他的 anchor 不参与训练。

RPN 网络的 loss 函数同样是一个多任务的loss,包含两个部分,classification 的 loss 和 regression 的 loss:
L ( { p i , t t } ) i = 1 , 2 , . . . , N = 1 N c l s ∑ i L c l s ( p i , p i ′ ) + λ 1 N r e g ∑ i L r e g ( t i , t i ′ ) L(\{p_{i},t_{t}\})_{i=1,2,...,N}=\frac{1}{N_{cls}}\sum_{i}L_{cls}(p_{i},p_{i}')+\lambda\frac{1}{N_{reg}}\sum_{i}L_{reg}(t_{i},t_{i}') L({pi,tt})i=1,2,...,N=Ncls1iLcls(pi,pi)+λNreg1iLreg(ti,ti)
i i i是一个 mini-batch 下 anchor 的索引。 p i p_{i} pi是 anchor 为目标的概率。当anchor为目标时, p i ′ p_i' pi 为1,否则为0。 t i t_i ti是预测框的位置坐标, t i ′ t_i' ti是ground truth的坐标。 N c l s N_{cls} Ncls为mini-batch的大小(如 N c l s N_{cls} Ncls = 256), N r e g N_{reg} Nreg为anchor的数量(如 N c l s N_{cls} Ncls ~ 2400),作者在实验中验证 λ \lambda λ为10效果最好。
L c l s ( p i , p i ∗ ) = − log ⁡ [ p i ∗ p i ′ + ( 1 − p i ) ( 1 − p i ′ ) ] L r e g ( t i , t i ′ ) = s m o o t h _ l 1 _ l o s s ( t i − t i ′ ) L_{cls}(p_{i},p_{i}^{*})=-\log[p_{i}*p_{i}'+(1-p_{i})(1-p_{i}')]\\ L_{reg}(t_{i},t_{i}')=smooth\_l1\_loss(t_{i}-t_{i}') Lcls(pi,pi)=log[pipi+(1pi)(1pi)]Lreg(ti,ti)=smooth_l1_loss(titi)

Proposal Target Layer

该层的目的是选出从proposal layer出来的ROIs中的合适ROIs,这些被选出的ROIs将会被执行RoI pooling并且传递到后面。

采用交替训练(Alternating Train)

(1)使用预训练的Backbone训练RPN,并finetune backbone。
(2)用基于上一步得到的RPN生成的proposal来训练Faster R-CNN,并finetune backbone。
(3)固定共享的卷积层Backbone,训练PRN。
(4)固定共享的卷积层,基于上一步得到的RPN生成的proposal来训练训练Fast R-CNN

可以看到训练过程类似于一种“迭代”的过程,不过只执行了一次。至于只循环了2次的原因是应为作者提到:“A similar alternating training can be run for more iterations, but we have observed negligible improvements”,即循环更多次没有提升了。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页