Light-Head R-CNN: In Defense of Two-Stage Object Detector(2017.11)


文章目录

  • Abstract
  • 1. Introduction
  • 2. Related works
  • 3. Our Approach
    • 3.1. Light-Head R-CNN
      • 3.1.1. R-CNN subnet
      • 3.1.2. Thin feature maps for RoI warping
    • 3.2. Light-Head R-CNN for Object Detection
  • Conclusion

原文链接

Abstract

在本文中,我们首先研究了为什么典型的两阶段方法不如单阶段快速检测器(如YOLO[26,27]和SSD[22])快。我们发现Faster R- CNN[28]和R- FCN[17]在RoI扭曲之后或之前进行了密集的计算Faster R-CNN涉及两个完全连接的层来进行RoI识别,而R-FCN则产生一个大的分数图。因此由于结构上的沉重设计,这些网络的速度很慢。即使我们大幅度降低基本模型,计算成本也不能相应大幅度降低

我们提出了一种新的两级检测器,Light-Head R- CNN,以解决目前两级方法的缺点。在我们的设计中,我们通过使用薄特征映射和便宜的R-CNN子网(池化和单个全连接层),使网络头部尽可能轻。我们基于ResNet-101的light-head R-CNN在保持时间效率的同时,在COCO上优于最先进的目标检测器。更重要的是,简单地用一个微小的网络(例如,Xception)替换主干,我们的Light- Head R-CNN在COCO上以102 FPS的速度获得30.7 mmAP,在速度和精度上都显著优于单级快速检测器,如YOLO[26,27]和SSD[22]

1. Introduction

最近基于cnn的目标检测器可分为单级检测器[26、27、22、20、4]和两级检测器[5、28、19、7]。单级探测器通常瞄准速度非常快、精度相当好的最佳点。两阶段检测器将任务分为两步:第一步(body)生成许多建议,第二步(head)专注于对建议的识别。通常,为了达到最佳精度,机头的设计很重。双级检测器具有(相对)缓慢的速度和非常高的精度的最佳点
两级检测器能否在效率和准确性上击败单级检测器?我们发现,Faster R- cnn[5]和R- FCN[17]等典型的两级目标检测器具有相似的特征:主干网络附加了一个沉重的头部。此外,ROI池化后的特征通道数量很大,这使得第一个完全连接的通道消耗大量内存,并可能影响计算速度。

与Fast/Faster R-CNN多次应用每个区域的子网不同,基于区域的全卷积网络(R-FCN)[17]试图在所有ROI之间共享计算。然而,R-FCN需要使用#classes×p×p (p是后续池大小)通道生成非常大的额外分数映射,这也会消耗内存和时间。如果我们使用小型骨干网络,Faster R-CNN或R-FCN的重头设计使两阶段方法的竞争力降低。

在本文中,我们提出了一种light-head设计,以建立一个高效而精确的两级探测器。具体来说,我们应用大核可分离卷积来产生具有小通道数的“薄”特征映射(我们的实验中使用α × p × p, α≤10)该设计大大减少了后续RoI-wise子网的计算量,使检测系统内存友好。池化层附加了一个便宜的全连接层,很好地利用了特征表示进行分类和回归。

由于我们的light-head结构,我们的检测器能够达到速度和准确性的最佳权衡,无论使用大型或小型骨干网络。如图1所示,我们的算法(点画为Light-Head R-CNN)可以明显优于SSD[22]和YOLOv2[27]等快速单级检测器,并且计算速度更快。此外,该算法对大型骨干网也具有一定的灵活性。基于ResNet-101骨干网,我们可以胜过最先进的算法,包括两级检测器,如Mask R-CNN[7]和一级检测器,如RetinaNet[20]。

2. Related works

简要回顾一下最近的一些二维目标检测工作:
准确性的角度来看: R-CNN[6]是最早将深度神经网络特征应用到检测系统中的。手工设计的方法,如选择性搜索[37],边缘盒[40],MCG[1],被用于生成R-CNN的提案。然后提出Fast R-CNN[5],将训练对象分类和边界盒回归结合起来,通过多任务训练提高性能。继Fast R-CNN之后,Faster R-CNN[28]引入了区域提案网络(Region Proposal Network, RPN),利用网络特征生成提案。得益于更丰富的建议,它略微提高了准确性。Faster R-CNN被视为R-CNN系列探测器的里程碑。以下大部分工作都是通过在网络中引入更多的计算来加强Faster R- CNN。Dai等人提出了可变形卷积网络[3],通过在没有监督的情况下学习额外的偏移量来建模几何变换。Lin等人提出了特征金字塔网络(FPN)[19],它利用深度卷积网络固有的多尺度、金字塔层次结构来构建特征金字塔。在FPN的基础上,Mask R- CNN[7]通过在边界框识别的同时增加一个额外的分支,进一步扩展了Mask预测器RetinaNet[20]是另一种基于FPN的单级检测器,它采用Focal-Loss来解决极端前景背景比导致的类不平衡问题。

从速度的角度来看:目标检测的文献也一直在努力提高检测器的速度。回到最初的R-CNN,它通过整个网络单独转发每个提案。He等人提出SPPnet[8]在候选框之间共享计算Fast/Faster R-CNN[5,28]都通过统一检测管道来加速网络R-FCN[17]在RoI子网之间共享计算,当使用大量提案时,这加快了推断速度。另一个研究热点是无提议检测器。YOLO和YOLO v2[26,27]将目标检测简化为一个回归问题,直接预测边界框和相关的类概率,而不需要生成提议。SSD[22]通过从不同层产生不同尺度的预测进一步提高了性能。与基于盒中心的检测器不同,DeNet[36]首先预测所有盒角,然后快速搜索非平凡边界盒的角分布

总之,从精度角度来看,一级和二级探测器都以接近速度的精度达到了最先进的水平。然而,从速度的角度来看,文献中缺乏与单阶段方法相比具有竞争力的快速两阶段检测器。在本文中,我们尝试设计一种更好和更快的两级检测器,称为light-head R-CNN来填补这一空白。

3. Our Approach

3.1. Light-Head R-CNN

传统的两级目标检测器通常涉及沉重的头部,这对计算速度有负面影响。在我们的论文中,“头”指的是附着在我们的骨干基础网络上的结构。更具体地说,将有两个组成部分:R-CNN子网和ROI扭曲

3.1.1. R-CNN subnet

Faster R-CNN采用了功能强大的R-CNN,它利用两个大的完全连接层或整个Resnet stage[28,29]作为第二级分类器,这有利于检测性能。因此,Faster R-CNN及其扩展在COCO等最具挑战性的基准中执行领先的准确性。但是,当目标建议数量较大时,计算量较大。
为了加速RoI-wisesubnet, R-FCN首先为每个区域生成一组得分图,其通道号将为#classes × p × p (p是接下来的池大小),然后沿着每个RoI池并平均投票最终预测。使用免计算的R-CNN子网,R-FCN通过在RoI共享计分图生成上涉及更多的计算来获得可比的结果。

如前所述,Faster R-CNN和R-FCN头部较重,但位置不同。从精度角度来看,Faster R-CNN虽然在RoI分类方面比较好,但为了减少第一层全连接层的计算量,通常需要全局平均池化,不利于空间定位。对于R-FCN,它在位置敏感池化之后直接将预测结果池化,性能通常不如没有RoI-wise计算层的Faster R-CNN强。从速度的角度来看,更快的R-CNN通过一个昂贵的R-CNN子网独立地传递每个RoI,这降低了网络速度,特别是当提案数量很大时。R-FCN采用免费的R-CNN子网作为二级检测器。但由于R-FCN需要生成一个非常大的RoI池得分图,整个网络仍然消耗时间/内存。

考虑到这些问题,在我们的新Light-Head R-CNN中,我们建议为我们的R-CNN子网使用一个简单,廉价的全连接层,这在性能和计算速度之间做出了很好的权衡。图2 ©提供了我们的Light-Head R- CNN的概述。由于全连接层的计算和内存成本也取决于ROI操作后的通道映射数,我们接下来讨论如何设计ROI翘曲。

3.1.2. Thin feature maps for RoI warping

在将提案馈送到R-CNN子网之前,涉及到RoI warping,使特征映射的形状固定
在我们的Light-Head R-CNN中,我们建议生成具有小通道数的特征映射(薄特征映射),然后进行常规的RoI扭曲。在我们的实验中,我们发现在薄特征映射上的RoI扭曲不仅可以提高精度,而且可以节省训练和推理过程中的内存和计算量。在薄特征映射上考虑PSRoI池化,可以带来更多的计算量来增强R-CNN,减少信道。此外,如果我们在我们的瘦特征映射上应用RoI池,我们可以减少R-CNN开销并放弃全局平均池来同时提高性能。此外,在不损失时间效率的情况下,大卷积可以用于薄特征映射的生成。

3.2. Light-Head R-CNN for Object Detection

在上述讨论之后,我们给出了一般目标检测的实现细节。我们的方法的流水线如图2 ©所示。我们有两个设置:1)设置“L”来验证我们的算法在与大型骨干网络集成时的性能;2)设置“S”,验证算法在小型骨干网下的有效性和效率。除非另有说明,否则设置L和设置S共享相同的其他设置。
基本特征提取器:对于设置L,我们采用ResNet 101[9]作为基本特征提取器。另一方面,我们利用类似于exception的小基模型进行设置s。Xception模型的网络结构如表7所示。在图2中,“转换层”表示我们的基本模型。conv4和conv5的最后一个卷积块记为c4, c5。
Thin feature maps. 我们在c5上应用了大的可分离卷积层[35,25],结构如图3 C所示。在我们的方法中,我们让k为15,设置S为C mid = 64,设置l为C mid = 256。我们还将C out减少到10×p×p,这与R-FCN中使用的有限#类×p×p相比是非常小的。得益于大内核带来的更大的有效接受域,我们所汇集的特征映射更加强大。
R-CNN subnet. 这里我们只在R-CNN子网中使用一个具有2048个通道(无辍学)的全连接层,然后是两个兄弟的全连接层来预测RoI分类和回归。每个边界框位置只应用了4个通道,因为我们在不同的类之间共享回归。得益于强大的RoI扭曲特征图,一个简单的Light- Head R-CNN也可以在保持效率的情况下取得显著的效果。

RPN(区域建议网络) 是一种滑动窗口类无关的目标检测器,它使用了c4的特征。RPN预先定义了一组锚,这些锚由几个特定的尺度和纵横比控制。在我们的模型中,我们设置了三种纵横比{1:2,1:1,2:1}和五种比例尺{32 2,64 2,128 2,256 2,512 2}来覆盖不同形状的物体。由于存在大量相互严重重叠的提案,因此采用非最大抑制(NMS)来减少提案的数量。然后将其输入RoI预测子网。我们将NMS的IoU阈值设置为0.7。然后,我们根据锚点的IoU比和真值边界框对锚点训练标签进行签名。如果锚的IoU超过0.7,任何接地真值框,它将被设置一个积极的标签。对于ground-truth box具有最高IoU的锚也将被分配一个正面标签。同时,如果所有接地真值框的IoU小于0.3,则其标签为负。更多细节可参考[28]。

Conclusion

在本文中,我们提出了Light Head R-CNN,它涉及到一个更好的两级目标检测器的设计原则。与传统的两级检测器(如Faster R-CNN和R-FCN)通常具有重头相比,我们的light-head设计使我们能够在不影响计算速度的情况下显著提高检测结果。更重要的是,与YOLO和SSD等快速单级检测器相比,我们在计算速度更快的情况下获得了更优越的性能。例如,我们的Light Head R-CNN加上小型的Xception-like基础模型可以在102 FPS的速度下实现30.7 mmAP。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

参考信号速度变化存在跳跃时容易发生不稳定的阻抗调节

问题描述 当参考信号速度存在跳跃变化时,阻抗调节系统容易发生不稳定。这是因为阻抗调节系统需要根据参考信号的速度来调整其输出阻抗,以匹配负载阻抗,从而保持系统的稳定性。 当参考信号速度突然变化时,阻抗调节系统可能无法及…

【QML】QML与cpp交互(一)—— QML直接调用cpp函数

目录 1、cpp 创建一个类 2、将类对象暴露给QML 3、QML通过对象直接调用cpp函数 1、cpp 创建一个类 类模板如下: #include <QtCore/QObject>class vacUdpClient: public QObject {Q_OBJECT public: vacUdpClient(QObject* parent nullptr): QObject(parent) {}// Q…

hive-3.1.2环境安装实验

1.修改hadoop相关参数 1-修改core-site.xml [bigdata@master hive]$ vim /opt/module/hadoop/etc/hadoop/core-site.xml <!-- 配置该bigdata(superUser)允许通过代理访问的主机节点 --><property><name>hadoop.proxyuser.bigdata.hosts</name><va…

[VSCode] Java开发环境配置

文章目录 1 VSCode & Java 安装1.1 安装 VSCode1.2 安装 JDK 2 环境变量配置3 在 VSCode 中安装 Java 扩展4 运行测试 1 VSCode & Java 安装 1.1 安装 VSCode Visual Studio Code 官方下载 地址&#xff1a; https://code.visualstudio.com/详细安装步骤这里不做赘…

笔记本用gpu运行tensorflow-gpu,keras写的老程序,结果与原来不一样,一脸懵逼。

先说结论我笔记一是rtx3050ti, 重点RTX30系列最低要求CUDA版本为11.1&#xff0c;否则最后跑程序会报错。再说现象&#xff0c;突发奇想想在笔记本上运行一个以前在1080titensorflow-gpu1.5.2,keras2.2.4上面写的一个图像分类模型&#xff0c;先用cpu模式 运行一下一切正常。如…

利用proteus实现串口助手和arduino Mega 2560的串口通信

本例用到的proteus版本为8.13&#xff0c;ardunio IDE版本为2.2.1&#xff0c;虚拟串口vspd版本为7.2&#xff0c;串口助手SSCOM V5.13.1。软件的下载安装有很多教程&#xff0c;大家可以自行搜索&#xff0c;本文只介绍如何利用这4种软件在proteus中实现arduino Mega 2560的串…

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述&#xff08;456.01&#xff09; 1.1 为什么学 学习目标依然是Linux系统&#xff0c;平台是ARM架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设…

分布式系统理论基础

目录 引言 CAP定理 CAP的工程启示 1、关于 P 的理解 2、CA非0/1的选择 3、跳出CAP 小结 本文转自&#xff1a;https://www.cnblogs.com/bangerlee/p/5328888.html 该系列博文会告诉你什么是分布式系统&#xff0c;这对后端工程师来说是很重要的一门学问&#xff0c;我们会逐步了…

报表多源关联

报表多源关联 需求背景 在项目中会遇到多种数据展现在一起的报表。例如部分指标在关系型数据库中&#xff0c;部分指标通过restful接口获得到json&#xff0c;然后根据共同的维度关联一起&#xff0c;形成新的数据集。 解决方案 在硕迪报表中有两种方式实现该多源报表&…

MySQL数据库从小白到入门(二)

多表关系&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构。由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种。 外键&#xff1a; 创…

优思学院|六西格玛质量管理的工具、方法和手段

质量管理涉及多种技术不同的手段&#xff0c;包括了理性分析的和数据分析的工具&#xff0c;绝大部分工具都可以在六西格玛绿带和黑带知识领域中找到&#xff0c;因此&#xff0c;质量人应该学好六西格玛。以下&#xff0c;我们列举一些常见的技术手段。 六西格玛项目方法&…

单片机学习13——串口通信

单片机的通信功能&#xff1a; 实现单片机和单片机的信息交换&#xff0c;实现单片机和计算机的信息交换。 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。 在多微机系统以及现在测控系统中信息的交换多采用串行通信方…

【二叉树】

文章目录 树形结构注意要点细分概念树在生活中的应用 二叉树什么是二叉树二叉树特点&#xff1a;两种特殊的二叉树二叉树的性质二叉树性质的练习二叉树的存储二叉树的遍历前序遍历中序遍历后序遍历遍历练习 树形结构 树是一种非线性的数据结构&#xff0c;它具有以下的特点&am…

type property can‘t be changed 报错问题解决

问题 在使用 jQuery的 attr 方法对 input 输入框的 type 类型进行修改的时候报 type property can’t be changed 这个错误。 $psd.attr(type,text)原因 jQuery 的版本问题&#xff0c;当前使用的 jQuery 版本不允许修改 input 的 type属性所以报错。 解决方法 换原生 js …

类和对象,this指针

一、类的引入&#xff1a; 如下&#xff0c;在C中&#xff0c;我们可以在结构体中定义函数&#xff0c;如下&#xff0c;之前我们学习C中中一直是在结构体中定义变量。 struct student{void studentinfo(const char* name,const char* gener,int age){ strcpy(_name,name);st…

YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版

点击阅读YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版原文 YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版的作用是在您的商店中创建特别优惠&#xff0c;将产品捆绑在一起提供折扣和特价。 您如何从中受益&#xff1a; 您将…

刷题记录--算法--简单

第一题 2582. 递枕头 已解答 简单 相关标签 相关企业 提示 n 个人站成一排&#xff0c;按从 1 到 n 编号。 最初&#xff0c;排在队首的第一个人拿着一个枕头。每秒钟&#xff0c;拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾&#xff0c;传递…

03_W5500TCP_Client

上一节我们完成了W5500网络的初始化过程&#xff0c;这节我们进行TCP通信&#xff0c;w5500作为TCP客户端与电脑端的TCP_Server进行通信。 目录 1.TCP通信流程图&#xff1a; tcp的三次握手&#xff1a; tcp四次挥手&#xff1a; 2.代码分析&#xff1a; 3.测试&#xff1a…

TA-Lib学习研究笔记(九)——Pattern Recognition (3)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;3&#xff09; 最全面的形态识别的函数的应用&#xff0c;通过使用A股实际的数据&#xff0c;验证形态识别函数&#xff0c;用K线显示出现标志的形态走势&#xff0c;由于入口参数基本上是o…

【动态规划】03使用最小花费爬楼梯(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…
最新文章