通俗易懂地了解faster RCNN(RPN区域建议网络)

faster RCNN[2015 Ren]

回顾

R-CNN ==> 1image/mni

Fast R-CNN ==> 1~2 fps

1. faster RCNN

faster-rcnn.png

  1. Backbone(神经网络模型)
    • pre-train(预训练)
    • fine-tuning(微调)
    • re-train
  2. RPN:Region Proposal Net(区域生成网络 )
    • 代替selective searchs生成区域建议
    • 输入feature map(特征图),输出一系列ROI(感兴趣区域)
  3. Fast RCNN:ROI + {Classification; Regression}
  4. 可近似的Faster RCNN = RPN + Fast R-CNN

2. Backbone

  1. 作用:提取特征(一次)

    • 不用给每个ROI都提取特征
    • 通过RPN将提取的特征来生成区域建议
  2. 结构:ZF / Resnet / VGG16(13 conv + 13 Relu + 4 Pooling)

    • 把网络结构当积木来用的思维
    • 比如想要算快一些,网络换成mobile net, shuffle net都是可以的
  3. 输出 Batchsize x Channel x H/16 x W / 16 (VGG16举例)

    • faster rcnn将尺寸为1000 x 800大小的feature map归一化到600 x 800的尺寸,则其输出的特征图大小为
      1 x 256 x 38 x 50
  4. backbone获取特征图信息,然后用RPN网络筛选候选框和ROIPooling输出相同尺寸的特征图,整个faster rcnn如下图

fast-rcnn_backbone_me11.png

3. RPN

Test 网络结构

fast-rcnn_RPN.png

  1. 3x3卷积主要作用是语义转化,可以增加网络复杂程度,增加RPN的拟合能力
  2. 1x1卷积用于通道转换,原则上可以转换成任意通道的特征图
  3. 例如经过上面支线的1x1卷积后的尺寸为38x50x18,经过第一个reshape将尺寸变为(2, 38x50x9)其中2表示用于二分类判断是否是ROI;判断完后再reshape回38x50x18
  4. 经过下面支线的1x1卷积后的尺寸为38x50x36,36等于4x9,其中4表示坐标信息,用于左边回归预测
  5. 3和4中的9指的是9个anchor
  6. 3x3卷积后两条支线合并,输出区域建议(坐标)信息

RPN目标

  • 生成region proposal区域建议
  • 因为流程为先RPN找出区域建议的物体,然后在做更加精细的类别划分和Bbox回归,这种方式被称为Two-Stage
  • 因此有人认为两阶段检测比一阶段检测更准

Anchor

faster-rcnn_anchor.png

  • 代表在原图中的区域(目标在的地方)
  • 有不同的大小和比例anchor去覆盖所有种类的对象
  • 3种大小(8,16,32),3种比例(1:1,1:2,2:1),共9个框
  • 以特征图w=50,,h=38为例,特征图中每个特征点对于原图中9个框(anchor)
  • 对应生成 anchor = 1 x 9 x 38 x 50 = 17100个框
  • 边缘筛除去除一些出了边界的anchor,及其去除一些比较小的anchor,得到12k左右anchor,再用IOU计算和NMS算法筛选,最后剩余2k左右anchor

Train 网络结构

faster-rcnn_net_train.png

Train网络结构中RPN的Test两条支线如下
faster-rcnn_net_train_11.png

faster RCNN 网络结构手绘制版

faster-rcnn_net_byhand.png

  • gt为图片中真实标记的框,与init anchor(anchor create)生成的anchor做iou计算和NMS算法筛选,得到分类和回归的正负样本(2k个左右anchor box),是监督网络学习的监督信息
  • 通过***gt生成anchor的过程***(对应手绘制RPN网络结构中左边的rpn-data)如下,每个anchor都有分类信息(2个)、和gt对应的偏移量(4个, △x,△y,△w,△h)
    共6个值,9个anchor共54个值

anchor_value1.png

  • 将正负样本分别和分类回归的预测做loss计算,一个为分类loss,一个为回归loss,两个loss加一起就可以训练RPN网络
  • 手绘制RPN网络结构蓝色部分为测试,红色部分为训练
  • 蓝色(20+1) x 4 中20为类别

Smooth L1 loss

  • RPN在做回归时,上图Train网络结构中绿线框选的部分,需要先做掩膜版(Mask)
    faster-rcnn_anchor_mask.png
  • Smooth L1 Loss公式
    faster-rcnn_anchor_smoothL1Loss.png
  • Smooth L1 loss作用
    • 预测偏移量
    • 对大小物体一视同仁,做归一化
  • 偏移量回归

we hope a -> t,
but actually a generate p.

So as long as p -> t,
we get a good result.

So as long as the offset of 
p-a -> t-a
We get a good result

So here we hope t. -> t.*

RPN训练细节

  • 取IOU > 0.7 的anchor作为前景FG
  • 取IOU < 0.3 的anchor作为背景BG
  • IOU在0.3和0.7的anchor去除
  • batchsize为128,fg和bg的比例为1:3

4. 训练

Faster RCNN = RPN + Fast R-CNN

问题

rpn需要训练,fast rcnn也需要训练;共用的话,训练rpn时backbone变了,用rpn的数据训练fast rcnn时,backbone又变了,会导致rpn不准确

weight share(权重共享) RPN包含backbone,Fast rcnn也包含backbone,Fast rcnn需要用到RPN的输出

训练四阶段

faster-rcnn_net_byhand.png

分布联合训练

  1. 仅训练rpn,backbone更新,rpn-unique(专有部分网络)也更新
  2. 把1中rpn的结果用于fast rcnn训练,backbone共享,backbone更新,fast rcnn(专有部分网络)也更新
  3. 使用2中更新过的backbone重新训练rpn,固定rpn,更新rpn unique
  4. 使用3中的rpn训练fast rcnn,backbone固定,更新fast rcnn unique

rpn的region proposal区域建议用于fast rcnn训练,backbone更新,fast rcnn的专有网络也更新

附:

faster rcnn代码实现

faster rcnn框架/库mmdetection

faster rcnn框架/库detectron2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值