RPN (Region Proposal Network) 用于生成候选区域(Region Proposal)

问题:

  1. RPN 是如何由 feature maps 来产生边界框(bounding boxes) ?
  2. 什么是 anchors?
  3. anchors 是如何 reshape 成各种形状的?
  4. 如何 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)相关推荐

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

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

  2. RPN(Region Proposal Network)

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

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

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

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

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

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

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

  6. 论文阅读: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 ...

  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. 目标检测中Regional Proposal到底是什么,RPN和Region Proposal、Proposals三者联系

    候选区域-Region Proposal 目标检测是计算机视觉当中很重要的一个任务,不仅要识别出图像中包含物体的类别,还要对各个物体进行较精确的定位,定位的方式为给出一个包含该物体的框. 简单来说就是 ...

  10. 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 ...

最新文章

  1. c2665 “initgraph”: 2 个重载中没有一个可以转换所有参数类型_Python 命令行之旅:深入 click 之参数篇...
  2. 1.9编程基础之顺序查找 05 最大值和最小值的差
  3. Vue-vue-router.js路由--进级
  4. 详解 equals() 方法和 hashCode() 方法
  5. 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目
  6. 了解并使用Xposed 框架神器
  7. biggan:large scale gan training for high fidelity natural image synthesis
  8. 计算机选修论文,【计算机专业论文】论计算机专业选修课的实践(共2142字)
  9. vscode没有应用程序与此操作的指定文件有关联
  10. html穿越火线游戏代码,CF代码大全.doc
  11. zip和tgz以及exe的区别
  12. 从 Paxos 到 Raft,分布式一致性算法解析
  13. C++实验(6) string类与STL
  14. vcs中一个simv的诞生过程
  15. 查询所有上级和所有下级
  16. 用burpsuite实现在谷歌中对百度抓包
  17. python高级语言特长_中国大学慕课mooc_高级语言程序设计(Python)CAP_章节测试答案...
  18. Windows高手必备之十大免费系统工具
  19. QQ2014版—2014最新版QQ官方下载
  20. [生存志] 第80节 预言窥天命

热门文章

  1. UNet 、3D-UNet 、VNet 区别
  2. 有人说做运营死路一条,但他没搞清运营是做什么的!
  3. WIN7系统旗舰版安装
  4. 红外遥控切歌(好运来/天空之城)、红外模块的应用
  5. linux三种用户界面,Linux的图形用户界面-你会选择哪个?
  6. Altera FPGA 差分信号初识(3)
  7. 拼多多被“薅羊毛” 交千万学费学到了什么?
  8. React组件化开发
  9. 目前,国内的互联网发展趋势
  10. 4种方法教你如何查看java对象所占内存大小