Region Proposal Network
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类型(正样本):
- 与任意一个groundtruth bbox的IOU大于0.7
- 有的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_labels
与rpn_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
经过Softmax
及Reshape
之后得到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 score
与bbox
, 有很大可能出现相互重合或包含的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相关推荐
- 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
原文引用:http://lufo.me/2016/10/detection/ 最近几年深度学习在计算机视觉领域取得了巨大的成功,而在目标检测这一计算机视觉的经典问题上直到去年(2015)才有了完全使用 ...
- High Performance Visual Tracking with Siamese Region Proposal Network全文翻译
摘要 近年来,视觉对象跟踪一直是一个基本主题,许多基于深度学习的跟踪器在多个基准测试中取得了最先进的性能.然而,这些跟踪器中的大多数很难以实时速度获得最佳性能.在本文中,我们提出了 Siamese ...
- 论文阅读: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 ...
- RPN(Region Proposal Network)
RPN(Region Proposal Network) 学习RPN前最好先过一遍RCNN和Fast RCNN,本文的图来自原论文和bvBV1af4y1m7iL,有纰漏之处欢迎在评论区指出 RPN什么 ...
- RPN(Region Proposal Network)提取候选框
前言 RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络:它是用来提取候选框的. 目录 一.RPN的由来 二.RPN思路流程 三.feature map ...
- High Performance Visual Tracking with Siamese Region Proposal Network 论文学习
文章目录 论文阅读总结 Translation Abstract 1 Introduction 2 Related Works 2.1 Trackers based on Siamese networ ...
- 走进VOT--《High Performance Visual Tracking with Siamese Region Proposal Network》阅读翻译
前言:siamRPN是Siamfc之后的又一突破.SiamFC的缺点: Siamese的方法只能得到目标的中心位置,但是得不到目标的尺寸,所以只能采取简单的多尺度加回归,这即增加了计算量,同时也不够精 ...
- CVPR 2018 Siam-RPN:《High Performance Visual Tracking with Siamese Region Proposal Network》论文笔记
理解出错之处望不吝指正. 本文模型叫做Siam-RPN.本文将Siamese Network和RPN结合,提出了一种端到端的离线训练方法,并把tracking过程视为one-shot detectio ...
- 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 ...
- 深度学习论文阅读目标检测篇(三):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 ...
最新文章
- OpenCV_颜色直方图的计算、显示、处理、对比及反向投影
- MongoDB 4.2 正式发布,支持分布式事务!
- centos内核参数优化
- ruby之添加当前文件路径到$LOAD_PATH
- lisp 揭 院长_HISLISPACSRIS EMR系统简介
- C++实现 简单 单链表
- Java扫描仪toString()方法及示例
- 你应该知道的 iTerm2 使用方法--MAC终端工具
- python自动登录qq邮箱_selenium+python实现自动登陆QQ邮箱并发送邮件功能
- Java方法实现是什么意思_Java中实现可调用的最佳方法是什么,需要一段时间才能完成...
- RS报表从按月图表追溯到按日报表
- windows下创建目录函数_mkdir
- 聊聊机器学习中的损失函数(hinge/soft/square/0-1)
- 使用虚拟环境 virtualenv
- php正则可以实现模糊匹配,正则表达式的模糊匹配功能如何实现
- TeamViewer远程连接
- Unity URP Reflection
- java 获取视频第一帧 | Java工具类
- Nginx常用rewrite跳转重定向实例
- 坐标转换(像素转换米)
热门文章
- 计算机条件格式设置方法,excel怎样利用条件格式把
- 【Excel学习笔记8】“定位”可以用来干嘛?
- 5G网络5G技术初探
- java 九宫格数独_玩转数独之九宫数独进阶技巧
- SLAM 之四元数转欧拉角再理解
- 独门秘籍 针式打印机换针小窍门
- jenkins+svn+脚本实现CIDI
- C++ 动态库、静态库、__declspec(dllexport)、符号隐藏、gcc visibility (“default“)
- 离线语音合成使用——科大讯飞or云知音or百度语音
- 正斜杠(左斜杠)和反斜杠(右斜杠)