Training of RNP

网络结构

  • rpn_conv/3x3的bottom layer是conv5_3, 因为stride = 1, pad =1, num_output=512, 经过3×33 \times 3的卷积后得到一个与conv5_3大小完全相同的feature map: rpn/output = relu(rpn/output). 在rpn/output的每一个点上都会预测9个proposal. 具体作法是将当前点映射回原图, 以其为中心取3×33 \times 3个不同大小, 不同长宽比的矩形区域, 即anchor. 然后在anchor上回归
  • rpn/output之上有两个header:
    • rpn_cls_score用于评分, num_output=18, 对应对9个proposal的object/background评分.
    • rpn_bbox_pred用于回归bbox, num_output=36, 对应9个proposal的bbox位置与大小. 也就是说, 每一种size+aspect ratio 的anchor都有各自的4个kernel用于预测bbox的位置.

训练数据

  • data: anchor
  • label: object/background, groundtruth bbox.

object/background class label

  • 有两种anchor属于object类型(正样本):

    1. 与任意一个groundtruth bbox的IOU大于0.7
    2. 有的ground truth bbox没有符合条件1的anchor, 则取与它有最大IOU的anchor
  • 有一种anchor属于background(负样本): 与任意groundtruth bbox的IOU都小于0.3
  • 其余的anchor在计算loss时忽略, 即不参与训练.

bbox label

只有正样本anchor才有bbox label, 并且它的label为让它成为正样本的groundtruth bbox, 需要注意的是bbox label里的值都是与对应anchor的相对位置信息:

    targets_dx = (gt_ctr_x - ex_ctr_x) / ex_widthstargets_dy = (gt_ctr_y - ex_ctr_y) / ex_heightstargets_dw = np.log(gt_widths / ex_widths)targets_dh = np.log(gt_heights / ex_heights)

(from fast_rcnn.bbox_transform.py)

Loss function

Loss 由两部分组成, 分类loss: LclsL_{cls}和回归loss:LregL_{reg}.

值得注意的几点:

  • LregL_{reg}为L1SmoothLoss.
  • p∗ip^*_i: 正样本为1, 负样本为0. 也就是说负样本不参与LregL_{reg} 的计算
  • λ\lambda: Faster RCNN里的默认值取10, 目的是为了让LregL_{reg}与LregL_{reg}在loss的比例接近.
  • NclsN_{cls}与NregN_{reg}用于normalization, 通常情况下它们是不相等的. 不过Faster RCNN论文里也说了, 这个normalization是可有可无的, 可被省略. 当然了, 省略后的learning rate也相应得变小.

Faster RCNN里对应的代码实现

AnchorTargetLayer

layer {name: 'rpn-data'type: 'Python'bottom: 'rpn_cls_score'bottom: 'gt_boxes'bottom: 'im_info'bottom: 'data'top: 'rpn_labels'top: 'rpn_bbox_targets'top: 'rpn_bbox_inside_weights'top: 'rpn_bbox_outside_weights'python_param {module: 'rpn.anchor_target_layer'layer: 'AnchorTargetLayer'param_str: "'feat_stride': 16"}
}

这一层是RPN的关键所在, 它从图片信息和conv5_3中产生anchor数据及标签.
有四个输入(bottom), 但第一个rpn_cls_score只使用了它的shape信息, 并不参与其他计算.
它产生的四个输出:

  • rpn_labels: shape = (1, 1, 9 * h_conv5_3, w_conv5_3). 正样本的label为1, 负样本为0. 其余的为-1. 超出图片范围的anchor也为负样本.
  • rpn_bbox_targets: shape = (1, 4 * 9, h_conv5_3, w_conv5_3)
  • rpn_bbox_inside_weights: shape同rpn_bbox_targets, 相当于公式(1)里的p∗p_*.
  • rpn_bbox_outside_weights: shape同rpn_bbox_targets, 相当于公式(1)里的1Nreg\frac {1}{N_{reg}}(但值是其四分之一, 用于将回归loss的四部分之和规范化).

rpn_cls_loss

LclsL_{cls}在网络中对应rpn_cls_loss节点:

layer {name: "rpn_loss_cls"type: "SoftmaxWithLoss"bottom: "rpn_cls_score_reshape"bottom: "rpn_labels"propagate_down: 1propagate_down: 0top: "rpn_cls_loss"loss_weight: 1loss_param {ignore_label: -1normalize: true}
}

它接收两个输入: rpn_labelsrpn_cls_score_reshape. 后者由前面提到过的rpn_cls_score reshape而来. RPN训练只支持batch_size = 1(意思是图片的数量, 而不是anchor的数量.), rpn_cls_score的形状为: (1,18,hconv5_3,wconv5_3)(1, 18, h_{conv5\_3}, w_{conv5\_3}). 对其进行reshape操作的layer定义为:

layer {bottom: "rpn_cls_score"top: "rpn_cls_score_reshape"name: "rpn_cls_score_reshape"type: "Reshape"reshape_param { shape { dim: 0 dim: 2 dim: -1 dim: 0 }}}

也就是说, reshape之后得到的rpn_cls_score_reshape的shape为:
(1, 2, 9 * h_conv5_3, w_conv5_3)
rpn_labels的shape为:
(1, 1, 9 * h_conv5_3, w_conv5_3)
这样reshape的目的是为了方便在SoftmaxLoss的normalization操作: 计算得到的总loss需要乘以:1shape[0]∗shape[2]∗shape[3]\frac {1}{shape[0]*shape[2]*shape[3]}, 分母为所有anchor的数量.

rpn_loss_bbox

LregL_{reg}对应的节点:

layer {name: "rpn_loss_bbox"type: "SmoothL1Loss"bottom: "rpn_bbox_pred"bottom: "rpn_bbox_targets"bottom: 'rpn_bbox_inside_weights'bottom: 'rpn_bbox_outside_weights'top: "rpn_loss_bbox"loss_weight: 1smooth_l1_loss_param { sigma: 3.0 }
}

它也是接收四个输入, 如何参数意义见SmoothL1Loss.

训练过程

  • End-to-End BP
  • 同一个mini-batch里的anchor来自于同一张图片. 从一张图片里随机取256个anchor, 让正负样本的比例达到1:1. 如果正样本的数量少于128, 则用负样本代替.

RPN In Faster-RCNN

从cls_bbox_pred 到proposal

RPN输出的rpn_cls_score_reshape经过SoftmaxReshape之后得到rpn_cls_prob_reshape, 加上rpn_bbox_pred经过ProposalLayer之后才能得到Fast RCNN可用的Proposal. 这是Faster RCNN的又一个自定义python layer(前面AnchorTargetLayer也是).

layer {name: 'proposal'type: 'Python'bottom: 'rpn_cls_prob_reshape'bottom: 'rpn_bbox_pred'bottom: 'im_info'top: 'rpn_rois'
#  top: 'rpn_scores'python_param {module: 'rpn.proposal_layer'layer: 'ProposalLayer'param_str: "'feat_stride': 16"}
}

那么在这一层里有些什么操作呢?
先弄清它的输入与输出的格式.

  • 输入

    • rpn_cls_prob_reshape: shape = (1, 18, h, w).(h,w)即之前的(h_conv5_3, w_conv5_3), 此处还是简写一下吧.
    • rpn_bbox_pred: shape = (1, 36, h, w)
    • im_info: 图片信息, 例如长,宽.
  • 输出
    • rpn_rois: shape = (n_proposals, 5). 第一列代表proposal所属的image在batch中的index, 所以全为0.

上一层的输出在内容上表示为conv5_3上的每一个点上的9个anchor都预测了它的object/background scorebbox, 有很大可能出现相互重合或包含的bbox, 肯定需要一个筛选操作. ProposalLayer完成的主要工作有两个:
1. 前面提到过, rpn_bbox_pred包含的都是proposal相对于anchor的相对位置信息, 所以需要根据它从anchor中得到相对于图片的位置信息: 见fast_rcnn.bbox_transform.bbox_transform.bbox_transform_inv方法
2. 利用NMS, non-maximum suppression在重叠的bbox筛选出得分最高的bbox.
3. 其他筛选.

Region Proposal Network相关推荐

  1. 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)

    原文引用:http://lufo.me/2016/10/detection/ 最近几年深度学习在计算机视觉领域取得了巨大的成功,而在目标检测这一计算机视觉的经典问题上直到去年(2015)才有了完全使用 ...

  2. High Performance Visual Tracking with Siamese Region Proposal Network全文翻译

    摘要   近年来,视觉对象跟踪一直是一个基本主题,许多基于深度学习的跟踪器在多个基准测试中取得了最先进的性能.然而,这些跟踪器中的大多数很难以实时速度获得最佳性能.在本文中,我们提出了 Siamese ...

  3. 论文阅读:Saliency-Guided Region Proposal Network for CNN Based Object Detection

    论文阅读:Saliency-Guided Region Proposal Network for CNN Based Object Detection (1)Author (2)Abstract (3 ...

  4. RPN(Region Proposal Network)

    RPN(Region Proposal Network) 学习RPN前最好先过一遍RCNN和Fast RCNN,本文的图来自原论文和bvBV1af4y1m7iL,有纰漏之处欢迎在评论区指出 RPN什么 ...

  5. RPN(Region Proposal Network)提取候选框

    前言 RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络:它是用来提取候选框的. 目录 一.RPN的由来 二.RPN思路流程 三.feature map ...

  6. High Performance Visual Tracking with Siamese Region Proposal Network 论文学习

    文章目录 论文阅读总结 Translation Abstract 1 Introduction 2 Related Works 2.1 Trackers based on Siamese networ ...

  7. 走进VOT--《High Performance Visual Tracking with Siamese Region Proposal Network》阅读翻译

    前言:siamRPN是Siamfc之后的又一突破.SiamFC的缺点: Siamese的方法只能得到目标的中心位置,但是得不到目标的尺寸,所以只能采取简单的多尺度加回归,这即增加了计算量,同时也不够精 ...

  8. CVPR 2018 Siam-RPN:《High Performance Visual Tracking with Siamese Region Proposal Network》论文笔记

    理解出错之处望不吝指正. 本文模型叫做Siam-RPN.本文将Siamese Network和RPN结合,提出了一种端到端的离线训练方法,并把tracking过程视为one-shot detectio ...

  9. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(更快的RCNN:通过区域提议网络实现实时)

    原文出处 感谢作者~ Faster R-CNN: Towards Real-Time Object Detection with Region ProposalNetworks Shaoqing Re ...

  10. 深度学习论文阅读目标检测篇(三):Faster R-CNN《 Towards Real-Time Object Detection with Region Proposal Networks》

    深度学习论文阅读目标检测篇(三):Faster R-CNN< Towards Real-Time Object Detection with Region Proposal Networks&g ...

最新文章

  1. OpenCV_颜色直方图的计算、显示、处理、对比及反向投影
  2. MongoDB 4.2 正式发布,支持分布式事务!
  3. centos内核参数优化
  4. ruby之添加当前文件路径到$LOAD_PATH
  5. lisp 揭 院长_HISLISPACSRIS EMR系统简介
  6. C++实现 简单 单链表
  7. Java扫描仪toString()方法及示例
  8. 你应该知道的 iTerm2 使用方法--MAC终端工具
  9. python自动登录qq邮箱_selenium+python实现自动登陆QQ邮箱并发送邮件功能
  10. Java方法实现是什么意思_Java中实现可调用的最佳方法是什么,需要一段时间才能完成...
  11. RS报表从按月图表追溯到按日报表
  12. windows下创建目录函数_mkdir
  13. 聊聊机器学习中的损失函数(hinge/soft/square/0-1)
  14. 使用虚拟环境 virtualenv
  15. php正则可以实现模糊匹配,正则表达式的模糊匹配功能如何实现
  16. TeamViewer远程连接
  17. Unity URP Reflection
  18. java 获取视频第一帧 | Java工具类
  19. Nginx常用rewrite跳转重定向实例
  20. 坐标转换(像素转换米)

热门文章

  1. 计算机条件格式设置方法,excel怎样利用条件格式把
  2. 【Excel学习笔记8】“定位”可以用来干嘛?
  3. 5G网络5G技术初探
  4. java 九宫格数独_玩转数独之九宫数独进阶技巧
  5. SLAM 之四元数转欧拉角再理解
  6. 独门秘籍 针式打印机换针小窍门
  7. jenkins+svn+脚本实现CIDI
  8. C++ 动态库、静态库、__declspec(dllexport)、符号隐藏、gcc visibility (“default“)
  9. 离线语音合成使用——科大讯飞or云知音or百度语音
  10. 正斜杠(左斜杠)和反斜杠(右斜杠)