Region Proposal Network(RPN)
RPN (Region Proposal Network) 用于生成候选区域(Region Proposal)
问题:
- RPN 是如何由 feature maps 来产生边界框(bounding boxes) ?
- 什么是 anchors?
- anchors 是如何 reshape 成各种形状的?
- 如何 RPN 的训练效果?
1.RPN的网络结构
下图是FAsterRCNN的网络结构,红框展示了RPN的网络结构。
RPN的工作流程:
首先通过一系列卷积得到公共特征图,假设他的大小是N x 16 x 16,然后我们进入RPN阶段,首先经过一个3 x 3的卷积,得到一个256 x 16 x 16的特征图,也可以看作16 x 16个256维特征向量,然后经过两次1 x 1的卷积,分别得到一个18 x 16 x 16的特征图,和一个36 x 16 x 16的特征图,也就是16 x 16 x 9个结果,每个结果包含2个分数和4个坐标,再结合预先定义的Anchors,经过后处理,就得到候选框;整个流程如图5:
(1) 分类支路为何是2个分数?
因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,那么就有两个分数,前景(物体)的分数,和背景的分数;
(2)坐标的得分指的是?
4个坐标是指针对原图坐标的偏移
RPN中输入特征图h经过3*3conv后的特征图hh的宽和高不变,通道数变成256。hh上有H x W个像素点,我们随机取一点,它跟原图肯定是有个一一映射关系的,由于原图和特征图大小不同,所以特征图上的一个点对应原图肯定是一个框,然而这个框很小,比如说8 x 8,这里8是指原图和特征图的比例,并不是我们想要的框,那我们不妨把框的左上角或者框的中心作为锚点(Anchor),然后设以这个锚点为中心的框有K个,这也就是图中所说的K anchor boxes(由锚点产生的K个框);换句话说,H x W个点,每个点对应原图有K个框,那么就有H x W x k个框默默的在原图上,那RPN的结果其实就是判断这些框是不是物体以及他们的偏移;那么K个框到底有多大,长宽比是多少?这里是预先设定好的,共有9种组合,所以k等于9,最后我们的结果是针对这9种组合的,所以有H x W x 9个结果,也就是18个分数和36个坐标。
RPN中anchor的生成
anchor的生成由generate_anchors实现
输入参数
- base_size,这个参数指定了类似感受野的区域大小,即原始图像经过卷积层和池化层之后,在feature map上每一点的感受野对应于原始图像区域的尺寸。在这里feature map上每一点对应于原始图像上16 x 16的区域,所以设置
base_size = 16
。- anchor_ratios,定义了anchor的宽高比,这里设置
anchor_ratios = [0.5, 1, 2]
。需要注意的是宽高比变化的同时保持面积不变。对于size = 16
的情况下:ratio为1时,anchor尺寸为16 x 16;ratio为0.5时,尺寸为(16*sqrt(2)) x (16/sqrt(2)),即23 x 12;ratio为2时,尺寸为11 x 22。- anchor_scales,定义了anchor的尺寸,这里设置
anchor_scales = [8, 16, 32]
。对base anchor的宽高分别乘以尺寸,从而得到各个不同尺寸的anchor。
步骤:
输入参数:
(1)首先根据base_size生成base anchor
base_anchor = np.array([1, 1, base_size, base_size]) - 1
out: array([ 0, 0, 15, 15]) #0,0是base_anchor的坐标,15是base_anchor的宽和高
这个base_anchor=[0,0,15,15]是位置在feature map左上角第一个点上生成的对应于原始图像的anchor
(2)基于base anchor,根据anchor_ratios生成各种ratio的anchor
area = base_size * base_size
ws = np.round(np.sqrt(area / anchor_ratios))
out: array([23., 16., 11.]) #宽hs = np.round(ws * anchor_ratios)
out: array([12., 16., 22.]) #高
(3)将base_anchor转成center-based的bbox
实现函数:
def _whctrs(anchor):"""Return width, height, x center, and y center for an anchor (window)."""w = anchor[2] - anchor[0] + 1h = anchor[3] - anchor[1] + 1x_ctr = anchor[0] + 0.5 * (w - 1)y_ctr = anchor[1] + 0.5 * (h - 1)return w, h, x_ctr, y_ctr
_whctrs(base_anchor)
out: (16, 16, 7.5, 7.5) #转成center-based格式的base anchor表示
#(w,h,x,y)
(4) 根据(2)生成的其它ratio的宽高、(3)生成的center(7.5, 7.5)来生成其它anchor
实现函数:
def _mkanchors(ws, hs, x_ctr, y_ctr):"""Given a vector of widths (ws) and heights (hs) around a center(x_ctr, y_ctr), output a set of anchors (windows)."""ws = ws[:, np.newaxis]hs = hs[:, np.newaxis]anchors = np.hstack((x_ctr - 0.5 * (ws - 1),y_ctr - 0.5 * (hs - 1),x_ctr + 0.5 * (ws - 1),y_ctr + 0.5 * (hs - 1)))return anchors
ratio_anchors = _mkanchors(ws, hs, 7.5, 7.5)
out: array([[-3.5, 2. , 18.5, 13. ],[ 0. , 0. , 15. , 15. ],[ 2.5, -3. , 12.5, 18. ]])
(5)得到base size的各ratio 的基于center的anchor后,以此为基础生成各scale的anchor
实现函数:
def _scale_enum(anchor, scales):w, h, x_ctr, y_ctr = _whctrs(anchor) #得到base anchor的宽、高、中心坐标的x,yws = w * scales #宽的新尺寸hs = h * scales #高的新尺寸anchors = _mkanchors(ws, hs, x_ctr, y_ctr) return anchors
def _scale_enum(anchor, scales):"""Enumerate a set of anchors for each scale wrt an anchor."""w, h, x_ctr, y_ctr = _whctrs(anchor)ws = w * scaleshs = h * scalesanchors = _mkanchors(ws, hs, x_ctr, y_ctr)return anchors
Region Proposal Network(RPN)相关推荐
- 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
原文引用:http://lufo.me/2016/10/detection/ 最近几年深度学习在计算机视觉领域取得了巨大的成功,而在目标检测这一计算机视觉的经典问题上直到去年(2015)才有了完全使用 ...
- 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全文翻译
摘要 近年来,视觉对象跟踪一直是一个基本主题,许多基于深度学习的跟踪器在多个基准测试中取得了最先进的性能.然而,这些跟踪器中的大多数很难以实时速度获得最佳性能.在本文中,我们提出了 Siamese ...
- High Performance Visual Tracking with Siamese Region Proposal Network 论文学习
文章目录 论文阅读总结 Translation Abstract 1 Introduction 2 Related Works 2.1 Trackers based on Siamese networ ...
- 论文阅读: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 ...
- 走进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 ...
- 目标检测中Regional Proposal到底是什么,RPN和Region Proposal、Proposals三者联系
候选区域-Region Proposal 目标检测是计算机视觉当中很重要的一个任务,不仅要识别出图像中包含物体的类别,还要对各个物体进行较精确的定位,定位的方式为给出一个包含该物体的框. 简单来说就是 ...
- 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 ...
最新文章
- c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...
- 1.9编程基础之顺序查找 05 最大值和最小值的差
- Vue-vue-router.js路由--进级
- 详解 equals() 方法和 hashCode() 方法
- 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
- 了解并使用Xposed 框架神器
- biggan:large scale gan training for high fidelity natural image synthesis
- 计算机选修论文,【计算机专业论文】论计算机专业选修课的实践(共2142字)
- vscode没有应用程序与此操作的指定文件有关联
- html穿越火线游戏代码,CF代码大全.doc
- zip和tgz以及exe的区别
- 从 Paxos 到 Raft,分布式一致性算法解析
- C++实验(6) string类与STL
- vcs中一个simv的诞生过程
- 查询所有上级和所有下级
- 用burpsuite实现在谷歌中对百度抓包
- python高级语言特长_中国大学慕课mooc_高级语言程序设计(Python)CAP_章节测试答案...
- Windows高手必备之十大免费系统工具
- QQ2014版—2014最新版QQ官方下载
- [生存志] 第80节 预言窥天命