深度学习之 RPN(RegionProposal Network)- 区域候选网络

anchor boxes基本概念与作用:

feature map 上的一个点可以映射回输入图片上的一个点,以特征图上这个点为中心,预先人为设定 k 个 boxes,这些 boxes 就称为在这个点上生成的 k 个 anchor boxes(所有anchor boxes的中心点坐标是一样的)。一个 m∗nm*nmn 的特征图就有 m∗n∗km*n*kmnk 个 anchor boxes。请添加图片描述
anchor boxes 的作用是将 boxes 传给 RPN, 让 RPN 判断其中哪些 anchor boxes 可能存在目标,并进一步回归坐标,得到 proposals 输给后面的网络。模型回归的目标是真实 boxes 与 anchor boxes 之间坐标的偏置。将偏置和 anchor boxes 的坐标带入预先设定的公式中,就得到了最终预测的boxes坐标。

RPN

RPN的本质是 “ 基于滑窗的无类别obejct检测器 ”。

对于提取候选框最常用的 SelectiveSearch 方法,提取一副图像大概需要2s的时间,改进的 EdgeBoxes 算法将效率提高到了0.2s,但是这还不够。候选框提取不一定要在原图上做,特征图上同样可以,低分辨率特征图意味着更少的计算量,基于这个假设,MSRA的任少卿等人提出RPN(RegionProposal Network, 区域候选网络),完美解决了这个问题,它的主要功能是生成区域候选(Region Proposal)(可以看做是许多潜在的边界框,也叫 anchor,它是包含4个坐标的矩形框),如上所示。

RPN简单来说就是:假设输入一张图片,经过前面骨干网络的一系列的卷积或者池化之后之后,得到一个尺寸 m∗nm*nmn 的特征图(暂且不说通道),对应将原图划分为 m∗nm*nmn 个区域,原图的每个区域的中心由这个特征图上的一个像素点坐标表示。通过anchor机制,可以在每个像素点对应原图的区域生成k个可能存在目标的候选框(称为anchor box),如上图所示(k=9)。RPN就是用来判断每个像素点对应的k个区域是不是包含目标,如果包含(那么先根据输出的坐标偏置修正box位置)则输给后面的RCNN做进一步判断。(意思就是要从mn9个候选框中做筛选,提取proposals)

RPN 的结构如下图所示,backbone 输出的特征图经过一个 3∗33 * 333 卷积之后分别进入了不同的分支,对应不同的 1∗11 * 111 卷积。第一个卷积为定位层,输出 anchor 的4个坐标偏移。第二个卷积为分类层,输出anchor的前后景概率。
在这里插入图片描述
看完了rpn的大致结构,下面来看rpn的详细过程。主要看一下,rpn是如何生成以及处理anchor的。下图表示了rpn网络的详细结构。
在这里插入图片描述
第一步,生成基础 anchor(base_anchor),基础 anchor 的数目 = 长宽比的数目 * anchor 的缩放比例数目, 即 anchorsnum=len(ratios)∗len(scales)anchors_num = len(ratios) * len(scales)anchorsnum=len(ratios)len(scales)。这里,设置了3种长宽比(1:1, 1:2,2:1)和3种缩放尺度(8, 16, 32),因此 anchor_num = 9. 下图表示了其中一个位置对应的9个尺寸的 anchor。
在这里插入图片描述
第二步,根据 base_anchor,对特征图上的每一个像素,都会以它为中心生成9种不同尺寸的边界框,所以总共生成 60×40×9=2160060 \times 40 \times 9 = 2160060×40×9=21600 个anchor。需要注意的是,所有生成的 anchor 都是相对于原图的。

牢记:特征图上的每个点生成一个Anchors,Anchors 可以理解成9个不同的框(框的属性是长宽了,再进一步是四个点的坐标)。这个框的数据(框的左上角坐标(x0,y0),右下角坐标(x1,y1))这四个值都是对应于原图的。下面这个就是原图,红色点就是特征图上的点对应于原图的位置。每一个位置使用 9 个锚点,每个位置会生成 2×9 个目标分数和 4×9 个坐标分数。显然,通过一个中心定义9个不同的框,就是为实现多尺度这个想法。当然这样做获得检测框很不准确,后面会做2次 bounding box regression 修正检测框位置。
在这里插入图片描述
第三步,anchor的筛选。首先将定位层输出的坐标偏移应用到所有生成的 anchor,然后将所有 anchor 按照 前景概率/得分 从高到低进行排序。只取前 pre_nms_num 个 anchor(训练阶段),最后 anchor 通过 nms 筛选得到 post_nms_num(训练阶段)个anchor,也称作 roi。

下面是卷积的具体过程

在这里插入图片描述

a.conv fetaure map 到 intermediate layer 的卷积过程

RPN网络前面是一个提特征的网络,比如VGG,Res等,传给RPN网络的是一个特征图,其实也就是一个 tensor,比如用ZF网络(论文里面用的)

输入特征图:13∗13∗25613*13*2561313256

拿到模型的特征,RPN网络首先加了一个 3∗3∗256∗2563*3*256*25633256256 步长为 1 的卷积层(可能是为了扩大感受野)

这样就会得到 11∗11∗25611*11*2561111256 的输出,前面 11∗1111*111111 是图形矩阵,其中每一个点在原图中都是一个很大的区域,256表示这个区域的特征。

在这个区域内可能有目标,为了能更能逼近目标,我们需要3种尺度,和3种形状,就是图中的那9种物体框。假设原图中有一个物体,那我们通过在原图上平移框,就总能找到一个颜色框能正好把物体框在里面(真是厉害这想法),而且尺度啊形状最接近。

那么如何平移的呢?在原图上你一个像素一个像素平移没意义啊,难道要重复提取特征?所以平移必须在特征图上平移,因为特征图最后总能映射回原图。11∗1111*111111 的特征图区域,在原图中就表示 11∗1111*111111 个大黑框,每个大黑框里面又有9个小颜色框,这样就会产生 11∗11∗911*11*911119 个不同位置,不同尺度,不同形状的物体框,基本足够框出所有物体了。

b.intermediate layer 的256维向量后面对应两条分支

在这里插入图片描述

  • cls layer 分支是目标和背景的二分类(classification),因为k等于9,所以通过 1×1×256×181×1×256×181×1×256×18 的卷积核得到 2×9=182×9 = 182×9=18 个分数,分别是目标和背景的评分。
  • reg layer分支。如果候选框是目标区域,就去判断该目标区域的候选框位置在哪,这个时候另一条分支就过 1×1×256×361×1×256×361×1×256×36 的卷积得到 4×94×94×9 个值,每个框包含4个值(x,y,w,h),就是9个候选区域对应的框应该偏移的具体位置Δxcenter,Δycenter,Δwidth,ΔheightΔxcenter,Δycenter,Δwidth,ΔheightΔxcenter,Δycenter,Δwidth,Δheight。如果候选框不是目标区域,就直接将该候选框去除掉,不再进行后续位置信息的判断操作。这里预测的值都是通过模型不断训练得到的。

c. proposals layer

proposals layer 3个输入:一个是分类器结果 foreground softmax scores,一个是 anchor 回归 regression:[dx(A),dy(A),dw(A),dh(A)][d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)][dx(A),dy(A),dw(A),dh(A)] ,还有一个是 im-info,包含图像缩放的信息。proposal layer 步骤:

  1. 生成 anchors(anchors 的坐标是相对于原图的坐标),然后利用 [dx(A),dy(A),dw(A),dh(A)][d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)][dx(A),dy(A),dw(A),dh(A)] 对所有的 anchors 做 bbox regression 回归(这里的 anchors 生成和训练时完全一致)
  2. 按照输入的 foreground softmax scores 由大到小排序 anchors,提取前pre_nms_topN(e.g. 6000) 个anchors,即提取修正位置后的 foreground anchors。
  3. 判断fg anchors是否大范围超过边界,剔除严重超出边界fg anchors,剔除非常小(width<threshold or height<threshold)的 foreground anchors
  4. 进行 nms,按照 nms 后的 foreground softmax scores 由大到小排序fg anchors,提取前 post_nms_topN(e.g. 300) 结果作为 proposal 输出。

总结起来就是:生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> Proposal Layer生成proposals。

anchors的标定规则

  1. 如果 Anchor 对应的 refrence box 与 ground truth 的 IoU 值最大,标记为正样本;
  2. 如果 Anchor 对应的 refrence box 与 ground truth 的 IoU>0.7,标定为正样本。事实上,采用第2个规则基本上可以找到足够的正样本,但是对于一些极端情况,例如所有的 Anchor 对应的 reference box 与 groud truth 的 IoU 不大于0.7,可以采用第一种规则生成.
  3. 负样本标定规则:如果 Anchor 对应的 reference box 与 ground truth 的 IoU<0.3,标记为负样本。
  4. 剩下的既不是正样本也不是负样本,不用于最终训练。
  5. 训练 RPN 的Loss是有 classification loss(即softmax loss)和 regression loss(即L1 loss)按一定比重组成的。
  6. 丢弃跨越边界的 anchor;

Loss

计算 softmax loss 需要的是 anchors 对应的 ground truth 标定结果和预测结果,计算regression loss 需要三组信息:

  1. 预测框,即 RPN 网络预测出的 proposal 的中心位置坐标x,y和宽高w,h;
  2. 锚点 reference box:之前的9个锚点对应9个reference boxes,每一个reference boxes都有一个中心点位置坐标 xa,yax_a,y_axa,ya 和宽高 wa,haw_a,h_awa,ha
  3. ground truth:标定的框也对应一个中心点位置坐标x,y和宽高w,h.因此计算regression loss和总Loss方式如下:
    在这里插入图片描述
    在这里插入图片描述

note

  • 只有在train时,cls+reg 才能得到强监督信息(来源于ground truth)。即ground truth会告诉 cls+reg 结构,哪些才是真的前景,从而引导cls+reg结构学得正确区分前后景的能力;在 reference 阶段,就要靠 cls+reg 自力更生了。
  • 在train阶段,会输出约2000个proposal,但只会抽取其中256个proposal来训练RPN的cls+reg结构;到了reference阶段,则直接输出最高score的300个proposal。此时由于没有了监督信息,所有RPN并不知道这些 proposal 是否为前景,整个过程只是惯性地推送一波无tag的proposal给后面的Fast R-CNN。
  • RPN的运用使得region proposal的额外开销就只有一个两层网络。
  • two stage型的检测算法在 RPN 之后还会进行再一次的分类任务和边框回归任务,以进一步提升检测精度。
  • 在 RPN 末端,通过对两个分支的结果进行汇总,来实现对 anchor 的初步筛除(先剔除越界的 anchor,再根据 cls 结果通过NMS算法去重)和 初步偏移(根据 bbox reg结果),此时输出的都改头换面叫 proposal 了。
  • RPN之后,proposal 成为 RoI (感兴趣区域) ,被输入 RoIPooling 或 RoIAlign 中进行 size上的归一化。当然,这些都是 RPN网络 之后的操作了,严格来说并不属于 RPN 的范围了。
  • 但是如果只在最后一层 feature map 上映射回原图像,且初始产生的 anchor 被限定了尺寸下限,那么低于最小 anchor 尺寸的小目标虽然被 anchor 圈入,在后面的过程中依然容易被漏检。
  • 但是FPN的出现,大大降低了小目标的漏检率,使得RPN如虎添翼。

从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式描述为: 1)根据现有网络初始化权值w,训练RPN; 2)用RPN提取训练集上的候选区域,用候选区域训练FastRCNN,更新权值w; 3)重复1、2,直到收敛。

参考:

  • https://blog.csdn.net/ying86615791/article/details/72788414
  • https://www.cnblogs.com/chaofn/p/9310912.html
  • ttps://blog.csdn.net/sinat_33486980/article/details/81099093#commentBox

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)

文章来源&#xff1a;安世亚太官方订阅号&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技术在泵的内流数值模拟、研究泵内部流动规律和结构方面已广泛应用&#xff0c;取得了很多成果。但是初步设计的产品如果通过CFD仿真得到的性能曲线不能满足使用要求&#xff0c;…

深度学习之 TensorRT

1 简介 TensorRT是一个高性能的深度学习推理&#xff08;Inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxne…

进制转换中dbho是什么意思_什么是网段?二进制十进制如何互相转换?看完这篇,你就全明白了...

之前的文章讲了ip&#xff0c;子网掩码&#xff0c;网关的关系&#xff0c;今天着重讲一下网段。我们用傻瓜交换机通讯时&#xff0c;一个网段的设备才能互相通讯&#xff0c;怎么能判断两个ip是同一个网段呢&#xff1f;今天就简单的说一下。(这篇文章用语音听可以起到催眠作用…

软件需求与问题解决

&#xff08;一&#xff09; 小满当上项目经理后不久&#xff0c;参与了一个大项目。当时市场签下来的时候&#xff0c;公司里面是欢天喜地的。项目做了一年多。到了交付的时候&#xff0c;用户却很不满意&#xff0c;当初说好的东西&#xff0c;好多都变了卦。用户是上帝&…

flex 换主轴后子元素占满_Chrome72 嵌套 flex 布局修改,你的网站可能会发生布局错乱...

起源2019 年 1 月 29 日&#xff0c;Chrome72 正式版(72.0.3626.81)发布&#xff0c;本次发布带来了一个改变&#xff0c;且没有在更新日志中提及&#xff0c;该改变导致某些网站发生了布局错乱。该改变主要针对的是嵌套的flex布局&#xff0c;下面我们一起看下是怎么回事。问题…

路由到另外一个页面_Nextjs使用解读一(项目搭建与路由系统)

文章说明&#xff1a;1. 之前想搭建个人博客&#xff0c;由于学习的是react技术栈&#xff0c;所以就到处搜罗资料学了nextjs&#xff0c;配合koa就把博客搭起来了。该系列文章基于我的学习笔记&#xff0c;重新整理了一遍&#xff0c;如果有错误之处&#xff0c;还请指正。2. …

微信获取token -1000

最终翻看微信开发api找到需要去配置IP白名单。只需要配置访问来源IP即可。 转载于:https://www.cnblogs.com/yangjinqiang/p/8184663.html

产品技术和管理

为啥纯粹为消费者传递体验的活动可以价格不菲&#xff0c;几为暴利&#xff1f;——谈客户体验作为客户价值提升之源 不论产品还是服务&#xff0c;如果能够为消费者传递有益的体验&#xff0c;其价值就可以在一般的产品服务之上得以体现&#xff1b;附加了体验的产品&#xff…

jquery ztree 设置勾选_047 JAVA-jQuery

jQuery操作元素属性的值表单:<body><input type"button" name"" id"but1" value"测试获得属性值" /><hr />账号&#xff1a;<input type"text" name"sxtzh" id"zhanghao" value&q…

Opencv undefined reference to `cv::imread() Ubuntu编译

Ubuntu下编译一个C文件&#xff0c;C源程序中使用了opencv&#xff0c;opencv的安装没有问题&#xff0c;但是在编译的过程中出现如下错误&#xff1a; undefined reference to cv::imread(std::string const&, int)undefined reference to cv::noArray()undefined referen…

深度学习目标检测之 YOLO v1

这是继 RCNN&#xff0c;fast-RCNN 和 faster-RCNN 之后&#xff0c;rbg&#xff08;RossGirshick&#xff09;针对DL目标检测速度问题提出的另外一种框架。YOLO V1 增强版本GPU中能跑45fps&#xff0c;简化版本155fps。 论文名&#xff1a; 《You Only Look Once&#xff1a;…

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因…

BT下载原理分析

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 BitTorrent协议。 BT全名为BitTorrent,是一个p2p软件,你在下载download的同时&#xff0c;也在为其他用户提供上传upload&#xff0c;因为大家是“互相帮助”&#xff0c;所以不会随着用户数的增加而…

表格列求和_excel表格制作,Excel表格的基本操作,包含制作一个表格10方面的知识...

创建表格&#xff0c;插入与删除一行一列或多行多行&#xff0c;一次移动一行一列或多行多列&#xff0c;拆分与合并单元格&#xff0c;单元格内换行&#xff0c;表格求和与求平均值是Excel表格的基本操作&#xff1b;除此之外&#xff0c;Excel表格的基本操作还包括调整行高列…

深度学习之 FPN (Feature Pyramid Networks)

论文题目&#xff1a;Feature Pyramid Networks for Object Detection论文链接&#xff1a;https://arxiv.org/abs/1612.03144论文代码&#xff1a;Caffe版本 https://github.com/unsky/FPN 《Feature Pyramid Networks for Object Detection》这篇论文主要解决的问题是目标检…

ISLR—第二章 Statistical Learning

Statistical Learning Y 和X的关系why estimate f 用来预测 预测的时候可以将f^当成一个black box来用&#xff0c;目的主要是预测对应x时候的y而不关系它们之间的关系。用来推断 推断的时候&#xff0c;f^不能是一个black box&#xff0c;因为我们想知道predictor和response之…

提高编程思想

虚函数和抽象函数有什么区别 虚函数是有代码的并明确允许子类去覆盖&#xff0c;但子类也可不覆盖,就是说可以直接用&#xff0c;不用重写 抽象函数是没有代码&#xff0c;子类继承后一定要重写 ****************************************************************** 在一…

Windows数据库编程接口简介

数据库是计算机中一种专门管理数据资源的系统&#xff0c;目前几乎所有软件都需要与数据库打交道&#xff08;包括操作系统&#xff0c;比如Windows上的注册表其实也是一种数据库&#xff09;&#xff0c;有些软件更是以数据库为核心因此掌握数据库系统的使用方法以及数据库系统…

2019如何转换2010_9102年,你还不知道PPT怎么转换成视频吗?小心落伍了

你在刷抖音的时候有没有刷过这类视频&#xff1a;成为人生赢家必备的书单、5个让你看透人性的电影、6个让你升职加薪的APP...如果你细心观察的话&#xff0c;会发现这类视频的做法基本都是一个样的&#xff0c;像在翻相册一样&#xff0c;一页页过去&#xff0c;所以它们也叫做…

深度学习之RetinaNet

总述 Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重&#xff0c;也可理解为一种困难样本挖掘。 目标识别有两大经典结构: 第一类是以Faster RCNN为代表的两级识别方法&#xff0c;这种结构的第…