论文:Faster R-CNN

2023-05-16

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

论文:https://arxiv.org/abs/1506.01497
代码:Faster R-CNN、other


作者引入了一个区域提议网络(RPN),RPN 进行端到端训练以生成高质量的区域提议,Fast R-CNN 使用这些区域提议进行检测。通过共享 RPN 和 Fast R-CNN 的卷积特征,进一步将RPN和Fast R-CNN 合并 成一个单独的网络。


架构

look上图,图像经过卷积层得到特征图。为了生成区域提议(Region Proposal),在特征图上滑动一个小网络(RPN),这个小网络的输入为特征图的 n × n 窗口每个滑动窗口映射到一个低维特征。特征被输入到两个同级的全连接的层(box 回归层和 box 分类层)。在本文中,我们使用窗口大小 n = 3,注意到输入图像上的有效感受野很大。这个小网络在下图(左)的一个位置上进行了说明。请注意,由于小网络以滑动窗口方式运行,全连接层在所有空间位置上共享。这个体系结构自然是通过 n×n 卷积层和两个同级的 1× 1 卷积层(分别用于回归和分类)来实现的。


锚位于滑动窗口的中心,每个锚同时预测 k 个(3个尺度和3个比例,k = 9)区域提议,对于大小为W × H的特征图,总共有WHk个锚点(特征图中每个像素对应一个锚点,因此有WHk个) 。因此,回归层有4k(回归有4个参数)输出,编码k个边框的坐标,分类层对每个提议输出2k(前景和背景)个估计目标概率的分数。

平移不变的锚 。这个方法一个重要性质是,它是共享参数,因此平移不变,减少了模型的规模。
在这里插入图片描述


多尺度锚作为回归参考

在这里插入图片描述

图a:多尺度输入(图像金字塔),图b:多尺度滤波器(过滤金字塔)

基于锚的方法是建立在一个锚金字塔(比例不变)上,这是更经济的。我们的方法分类和回归边界框参考锚框多尺度和比例。它只依赖于单一比例的图像和特征图,并使用单一尺寸的滤波器。我们通过实验展示了该方案对多个尺度和比例的处理效果(见下表)。

由于这种基于锚的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,正如Fast R-CNN检测器所做的那样。多尺度锚的设计是共享特性而不需要额外的尺度寻址成本的关键组件。

在这里插入图片描述


损失函数

训练 RPN ,给每个锚分配一个二进制类标签(是否为目标)。我们为两种锚分配了一个正标签:

  1. 锚与 ground-truth box 有最高的IoU
  2. 锚与 ground-truth box 有大于0.7的IoU

请注意,一个ground-truth 框可以为多个锚分配阳性标签。通常第二个条件足以确定阳性样本;但我们仍然采用第一种条件,因为在某些罕见的情况下,第二种条件可能找不到阳性样本。如果一个非正锚的IoU比在所有的ground-truth box中低于0.3,我们就给它分配一个负标签。既不正也不负的锚点对训练目标没有贡献。

利用这些定义,我们最小化了Fast R-CNN中多任务损失后的目标函数。我们对图像的损失函数定义为:
L ( { p i } , { t i } ) = 1 N c l a s s ∑ i L c l a s s ( p i , p i ∗ ) + λ 1 N r e g r e s s ∑ i p i ∗ L r e g r e s s ( t i , t i ∗ ) L(\{p_i\},\{t_i\}) =\frac{1}{N_{class}} \sum_i L_{class}(p_i, p^∗_i) + λ \frac{1}{N_{regress}} \sum_i p^∗_i L_{regress}(t_i,t^∗_i) L({pi},{ti})=Nclass1iLclass(pi,pi)+λNregress1ipiLregress(ti,ti)

分类损失 L c l a s s L_{class} Lclass 是两个类(目标与非目标)上的对数损失 。
回归损失 L r e g r e s s ( t i , t i ∗ ) = Smooth L 1 ( t i − t i ∗ ) L_{regress}(t_i, t^∗_i) =\text{Smooth}_{L_1}(t_i−t^∗_i) Lregress(ti,ti)=SmoothL1(titi)。其中 Smooth L 1 \text{Smooth}_{L_1} SmoothL1 为平滑函数,降低敏感。

这里, i i i 是一个锚框的索引 p i p_i pi 是锚框 i i i预测概率。如果定位点是正数,则 ground-truth 标签 p i ∗ p^∗_i pi 为 1,如果定位点是负数,则为0。

预测框: [ x , y , h , w ] [x,y,h,w] [x,y,h,w]
锚框: [ x a , y a , h a , w a ] [x_a,y_a,h_a,w_a] [xa,ya,ha,wa]
预测框和锚框的偏移: t = [ t x , t y , t h , t w ] t=[t_x,t_y,t_h,t_w] t=[tx,ty,th,tw]
t x = ( x − x a ) / w a t y = ( y − y a ) / h a , t w = l o g ( w / w a ) t h = l o g ( h / h a ) \begin{aligned} t_x &= (x − x_a)/w_a\\ t_y &= (y − y_a)/h_a,\\ t_w &= log(w/w_a)\\ t_h &= log(h/h_a)\end{aligned} txtytwth=(xxa)/wa=(yya)/ha,=log(w/wa)=log(h/ha)
ground truth 框: [ x ∗ , y ∗ , h ∗ , w ∗ ] [x^*,y^*,h^*,w^*] [x,y,h,w]
锚框: [ x a , y a , h a , w a ] [x_a,y_a,h_a,w_a] [xa,ya,ha,wa]
ground truth 框和锚框的偏移: t ∗ = [ t x ∗ , t y ∗ , t h ∗ , t w ∗ ] t^*=[t_x^*,t_y^*,t_h^*,t_w^*] t=[tx,ty,th,tw]
t x ∗ = ( x ∗ − x a ) / w a t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = l o g ( w ∗ / w a ) t h ∗ = l o g ( h ∗ / h a ) \begin{aligned} \\ t^∗_x &= (x^∗− x_a)/w_a\\ t^∗_y &= (y^∗− y_a)/h_a,\\ t^∗_w &= log(w^∗/w_a)\\ t^∗_h &= log(h^∗/h_a) \end{aligned} txtytwth=(xxa)/wa=(yya)/ha,=log(w/wa)=log(h/ha)

p i ∗ L r e g r e s s p^∗_iL_{regress} piLregress 表示回归损失仅在正锚固时被激活( p i ∗ = 1 p^∗_i = 1 pi=1),否则被禁用( p i ∗ = 0 p^∗_i = 0 pi=0 )。分类层和和回归层的输出分别由 p i {p_i} pi (预测类)和 t i {t_i} ti (预测框)组成。
N c l a s s N_{class} Nclass N r e g r e s s N_{regress} Nregress 对这两项进行归一化,并用平衡参数 λ λ λ 加权。

然而,我们的方法通过不同于以前基于 RoI (Region of Interest)的方法,[2]的方式实现了边界框回归。在[1]和[2]中,对从任意大小的RoIs中汇集的特征执行边界框回归,回归权值由所有区域大小共享。在我们的公式中,用于回归的特征在特征地图上具有相同的空间大小(3 × 3)。为了解释不同的大小,我们学习了一组k界盒回归器。每个回归变量负责一个尺度和比例,k个回归变量不共享权重。因此,由于锚的设计,即使特征具有固定的尺寸/规模,仍有可能预测不同尺寸的边框。


RPN 和 Fast R-CNN 共享功能

独立训练的RPN和Fast R-CNN, 会以不同的方式修改它们的卷积层。因此,我们需要开发一种技术,使允许在两个网络之间共享卷积层,而不是学习两个单独的网络。我们将讨论三种具有共享特征的训练网络方式:

  1. 首先训练RPN,然后使用这些提议训练Fast R-CNN。然后使用Fast R-CNN调优的网络来初始化RPN,并迭代这个过程。

  2. 合并 RPN 和 Fast R-CNN 。在每一次SGD迭代中,前向传递生成区域提议,这些提议在训练快速R-CNN检测器时被当作固定的、预先计算的提议来处理。反向传播像往常一样发生,对于共享层,来自RPN损失和Fast R-CNN损失的反向传播信号被合并。这个解决方案很容易实现。但是这个解决方案忽略了导数的w.r.t.,提议框的坐标也是网络响应,所以是近似的。在我们的实验中,我们的经验发现,该求解器产生接近的结果,但减少训练时间约25-50%与交替训练。这个求解器包含在我们发布的Python代码中。

  3. 非近似联合训练。如上所述,RPN预测的边界框也是输入的函数。Fast R-CNN中的RoI池化层接受卷积特征和预测的边界盒作为输入,所以一个理论上有效的反向传播求解器也应该包含盒子坐标的梯度。这些梯度在上述近似联合训练中被忽略。在一个非近似的联合训练解中,我们需要一个RoI池化层,它是可微的w。r。t。盒坐标。这是一个重要的问题,解决方案可以通过中开发的“RoI扭曲”层给出,这超出了本文的范围。

本文采用一种实用的四步训练算法,通过交替优化学习共享特征。在第一步中,我们按照前面的描述训练RPN。该网络使用预先训练的imagenet模型初始化,并针对区域提议任务进行端到端微调。在第二步中,我们使用第一步RPN生成的提议,用Fast R-CNN训练一个单独的检测网络。该检测网络也由imagenet -预训练模型初始化。在这一点上,两个网络不共享卷积层。在第三步中,我们使用检测器网络初始化RPN训练,但是我们固定了共享的卷积层,只微调了RPN特有的层。现在这两个网络共享卷积层。最后,保持共享的卷积层固定,我们微调独特的层Fast R-CNN。因此,两个网络共享相同的卷积层,形成一个统一的网络。类似的交替训练可以用于更多的迭代,但是我们已经观察到了微不足道的改进。


实现细节

我们在单一尺度[1],[2]的图像上训练和测试区域提议和目标检测网络。我们重新缩放图像,使其较短的边是s = 600像素[2]。多尺度特征提取(使用图像金字塔)可以提高精度,但没有表现出良好的速度-精度权衡[2]。在重新缩放的图像上,ZF和VGG网络在最后一个卷积层上的总跨度是16像素,因此在调整大小之前,典型的PASCAL图像上的跨度是约为10像素(约为500×375)。即使是这样一个大的步幅也能提供良好的结果,虽然精度可以通过更小的步幅得到进一步提高。

对于锚点,我们使用3个缩放,边框区域为1282、2562和51222像素,3个高宽比为1:1、1:2和2:1。这些超参数不是为特定的数据集精心选择的,我们在下一节提供有关它们影响的消融实验。如前所述,我们的解决方案不需要图像金字塔或滤波器金字塔来预测多个尺度的区域,节省了相当多的运行时间。下图(右)显示了我们的方法对于各种尺度和比例的能力。下表显示了使用ZF网学习到的每个锚的平均提议大小。我们注意到,我们的算法允许比潜在的接受域更大的预测。这样的预测并非不可能——如果一个物体只有中间是可见的,人们仍然可以粗略地推断出它的范围。
在这里插入图片描述
在这里插入图片描述

需要小心处理跨图像边界的锚框。在训练期间,我们忽略了所有的跨界锚,因此他们不会造成损失。对于一个典型的1000 × 600图像,总共大约有20000(≈60 × 40 × 9)个锚点。忽略了跨界锚点,每幅图像大约有6000个锚点用于训练。如果在训练中没有忽略跨越边界的异常值,它们会在目标中引入大的、难以修正的误差项,并且训练不会收敛。然而,在测试过程中,我们仍然将完全卷积RPN应用于整个图像。这可能会生成跨边界的提议框,我们将其剪辑到图像边界。

一些RPN方案彼此高度重叠。为了减少冗余,我们采用非极大值抑制(non-maximum suppression, NMS)对基于分类评分的提议区域进行抑制。我们将NMS的 IoU 阈值固定在0.7,这使我们在每张图像上留下大约2000个提议区域。正如我们将要展示的那样,NMS并不会损害最终的检测精度,而是大大减少了提议的数量。在NMS之后,我们使用排名前n的提议区域进行检测。下面,我们使用2000个RPN提议训练Fast R-CNN,但是在测试时评估不同数量的提议。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文:Faster R-CNN 的相关文章

随机推荐

  • Python爬虫开发的3大难题,别上了贼船才发现,水有多深

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 写爬虫 xff0c 是一个非常考验综合实力的活儿 有时候 xff0c 你轻而易举地就抓取到了想要的数据 xff1b 有时候 xff0c 你费尽心思却毫无所获 好多Pytho
  • OpenStack推出最新版本Newton,显著提升单一云平台 对虚拟化、裸机和容器的管理...

    2016 年 10 月 1 0 日 北京 OpenStack社区日前发布其命名为 Newton 的第14个版本 OpenStack是用于构建云的部署最广泛的开源软件 此次推出的新功能包括 xff1a Ironic裸机开通服务 xff0c M
  • BGP Extended Communities for OSPF PE-CE Routing-域ID

    要让OSPF路由的特性能够穿过MPLS 骨干网络 xff0c 就需要额外定义一些BGP扩展团体属性 可以通过MP BGP 传递的OSPF属性包括 xff1a MP BGP 扩展属性可是使得OSPF的路由可以完全的在远端PE路由器上重建 LS
  • ESP32 Arduino http协议digest认证 接入海康威视摄像机

    注意 xff1a 使用的是ArduinoHttpClient xff0c 与ESP32内部的HTTPClient库有较大的差别 海康摄像机http接入时候 xff0c 由于没有认证信息 xff0c 会返回401无权限信息 xff0c 这时需
  • 头条 offer,记一次 JAVA 面试经历和总结

    作者 xff1a 想去大厂的小菜鸡 本文的 我 xff0c 不是我 xff0c 是文中的作者 国庆期间公司的项目很闲 xff0c 很多人觉得没意思陆续走了 xff0c 我也考虑到自己的发展 xff0c 从9月底开始面 xff0c 面到11月
  • Centos6.4部署OpenStack

    现在好多公司都使用Openstack xff0c 我做这个也是小菜鸟一个 xff1b 网上看了一些资料说的都是openstack xff0c 但是现在openstack的版本不一样 所以亲们安装的时候一定要注意看一下你要安装的是那个版本 x
  • 【论文笔记】多任务学习(Multi-Task Learning)

    1 前言 多任务学习 xff08 Multi task learning xff09 是和单任务学习 xff08 single task learning xff09 相对的一种机器学习方法 在机器学习领域 xff0c 标准的算法理论是一次
  • 常用 API 函数(5): 文本和字体函数

    AddFontResource在Windows系统中添加一种字体资源CreateFont用指定的属性创建一种逻辑字体CreateFontIndirect用指定的属性创建一种逻辑字体CreateScalableFontResource为一种T
  • ElasticSearch笔记系列(7)——删除文档和删除索引

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 本文介绍删除文档和删除索引的基本方法 本来想把这几篇合成一篇的 xff0c 但最近事情太多 xff0c 好多比较长的文章总是写了一半便束之高阁 xff0c 其中有几篇还日久
  • 经验分享——嵌入式工程师必看书籍(转载)

    从事嵌入式研发行业十年 xff0c 认为学习就是要不断的吸纳知识 xff0c 在研发过程中 xff0c 经常会遇到一些问题 xff0c 这种发现问题并解决问题的过程就是进步 为什么选择学习嵌入式 xff1f 嵌入式系统无疑是当前最热门最有发
  • VS好用系列之代码片段

    背景 xff1a 同学们 xff0c 我们后台写接口 xff0c 有过没这样的困扰 每个接口都需要写这么一串相似的代码 xff0c 正常都是复制粘贴一下 xff0c 如下图代码所示 xff1a 那么我们有没更好 更方便快捷方法 xff0c
  • 在虚拟机里面安装Linux操作系统

    在这篇文章中以VMware14为例 xff0c Linux操作系统采用CentOS7进行讲解如何在虚拟机中安装Linux操作系统 一 选择创建新的虚拟机 二 在选择虚拟机配置界面选择 自定义 高级 选项 xff0c 然后点击 下一步 三 在
  • [译] OpenStack Pike 版本中的 53 个新功能盘点

    原文 xff1a https www mirantis com blog 53 things to look for in openstack pike 作者 xff1a Mirantis Nick Chase 发布日期 xff1a 08
  • vsftp锁定用户在家目录

    vsftpd锁定用户在家目录 1 锁定所有本地用户在家目录 xff1a 更改vsftpd conf配置文件 添加 chroot local user 61 YES 2 锁定列表中的用户在家目录 更改vsftpd conf 添加 chroot
  • 使用cas-overlay-template搭建cas服务器

    背景 在多服务统一帐号的应用集中 xff0c 单点登录是必不可少的 CAS就是成熟的单点登录框架之一 Github地址 https github com apereo cas 现在我们就通过一系列快速简单的构建方式实现一个简单的单点登录系统
  • /var/log目录下的20个Linux日志文件功能详解

    如果愿意在Linux环境方面花费些时间 xff0c 首先就应该知道日志文件的所在位置以及它们包含的内容 在系统运行正常的情况下学习了解这些不同的日志文件有助于你在遇到紧急情况时从容找出问题并加以解决 以下介绍的是20个位于 var log
  • 很喜欢博客园这个平台

    经朋友推荐来到博客园的 xff0c 非常喜欢 希望在这里能学到更多知识 转载于 https www cnblogs com rickons p 4580253 html
  • 被我误解的max_connect_errors

    实为吾之愚见 望诸君酌之 闻过则喜 xff0c 与君共勉 第一节 什么是 span style font size 10pt line height 50 color 000000 border none 1pt max connect e
  • ONOS SDN平台之Intent Framework

    开放网络操作系统 xff08 ONOS xff09 SDN操作系统有一个组件或子系统叫Intent Framework 那么 xff0c Intent Framework到底能给使用SDN操作系统的服务提供商做什么呢 xff1f Will
  • 论文:Faster R-CNN

    Faster R CNN Towards Real Time Object Detection with Region Proposal Networks 论文 xff1a https arxiv org abs 1506 01497 代码