Fast R-CNN(2015.9)


文章目录

  • Abstract
  • Introduction
    • R-CNN and SPPnet
      • 训练是一个多阶段的流水线
      • 训练在空间和时间上都很昂贵
      • 目标检测速度慢
    • Contributions
  • Fast R-CNN architecture and training
    • The RoI pooling layer
    • Initializing from pre-trained networks
    • Fine-tuning for detection
      • Multi-task loss
      • Mini-batch sampling
      • Back-propagation through RoI pooling layers
      • SGD hyper-parameters
    • Scale invariance
  • Fast R-CNN detection
    • Truncated SVD for faster detection
  • Main results
  • Conclusion

论文链接
源代码

Abstract

本文提出了一种快速区域卷积网络(Fast R-CNN)的目标检测方法。Fast R-CNN基于以前的工作(R-CNN,SPP-net),使用深度卷积网络有效地对对象提案进行分类。与以前的工作相比,Fast R-CNN采用了几项创新来提高训练和测试速度,同时也提高了检测精度。

Introduction

由于检测需要精确地定位物体,这就产生了两个主要的挑战:
首先,必须处理许多候选对象位置(通常称为“proposals”)
其次,这些候选点只能提供粗略的定位,必须加以改进才能实现精确定位

这些问题的解决方案通常会牺牲速度、准确性或简单性
在本文中,我们简化了最先进的基于convnet的目标检测器的训练过程[9,11],提出了一种单阶段训练算法,该算法联合学习对目标建议进行分类并细化其空间位置

R-CNN and SPPnet

基于区域的卷积网络(R-CNN[9]通过使用深度卷积神经网络对目标提案进行分类,实现了优异的目标检测精度。然而,R-CNN也有明显的缺点

训练是一个多阶段的流水线

训练在空间和时间上都很昂贵

目标检测速度慢

Contributions

我们提出了一种新的训练算法,该算法修正了R-CNN和SPPnet的缺点,同时提高了它们的速度和准确性。我们称这种方法为快速R-CNN,因为它的训练和测试速度相对较快。快速R- CNN方法有几个优点:

  1. 检测质量(mAP)高于R-CNN、SPPnet
  2. 训练是单阶段的,使用多任务损失
    3.训练可以更新所有的网络层
  3. 特征缓存不需要磁盘存储

Fast R-CNN architecture and training

Fast R-CNN网络将一整张图像和一组目标建议作为输入。该网络首先用几个卷积(conv)和最大池化层来处理整个图像,以产生一个conv特征图。然后,对于每个目标候选框,感兴趣区域池化层从特征映射中提取固定长度的特征向量

输入图像和多个感兴趣区域(RoI)被输入到一个全卷积网络中。每个RoI被汇集成一个固定大小的特征映射,然后通过全连接层(fc)映射到一个特征向量。该网络每个RoI有两个输出向量:softmax概率和每个类的边界盒回归偏移量。该体系结构是端到端训练的,具有多任务损失

The RoI pooling layer

RoI池化层使用最大池化将任何有效感兴趣区域内的特征转换为具有固定空间范围H ×W(例如7×7)的小特征图,其中H和W是独立于任何特定RoI的层超参数
RoI最大池化的工作原理是将h × w RoI窗口划分为大小近似为h/ H × w/ W的子窗口的H × W网格,然后将每个子窗口中的值最大池化到相应的输出网格单元中(RoI层只是SPPnets[11]中使用的空间金字塔池层的特殊情况,其中只有一个金字塔层)

Initializing from pre-trained networks

Fine-tuning for detection

用反向传播训练所有网络权重是Fast R-CNN的一项重要能力

让我们来解释为什么SPPnet无法更新空间金字塔池层以下的权重
根本原因是,当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播效率非常低,这正是R-CNN和SPPnet网络的训练方式,这种低效率源于这样一个事实,即每个RoI可能有一个非常大的接受域,通常跨越整个输入图像。由于前向传递必须处理整个接受野,所以训练输入很大(通常是整个图像)

我们提出了一种更有效的训练方法,利用训练过程中的特征共享。在Fast R- CNN训练中,随机梯度下降(SGD)小批量分层采样,首先通过采样N个图像,然后从每个图像中采样R/N RoI
关键的是,来自同一图像的RoI在向前和向后传递中共享计算和内存,使N变小减少小批量计算

除了分层采样,Fast R-CNN使用了一个精简的训练过程,其中一个微调阶段联合优化softmax分类器和边界盒回归器,而不是在三个单独的阶段训练softmax分类器、svm和回归器

Multi-task loss

每个训练RoI都被标记为一个真值类u和一个真值边界盒回归目标v,我们在每个标记的RoI上使用一个多任务损失L来联合训练分类和边界盒回归:
其中L cls (p,u) = - logp u为真类u的对数损失
对于边界盒回归,我们使用损失:

Mini-batch sampling

在微调期间,每个SGD迷你批都是由N = 2个随机选择的图像构建的(作为通常的做法,我们实际上对数据集的排列进行了迭代)。我们使用大小为R = 128的小批量,从每张图像中采样64个RoI

我们从具有交集/联合(IoU)重叠且ground- truth bounding box至少为0.5的目标提案中提取25%的roi。这些roi包括用前景对象类标记的示例,即u≥1。剩余的roi是从在区间[0.1,0.5)内具有最大iou的目标提案中采样的

Back-propagation through RoI pooling layers

SGD hyper-parameters

用于softmax分类和边界盒回归的全连接层分别从零均值高斯分布初始化,标准差分别为0.01和0.001。偏差被初始化为0。所有层对权重和偏差的每层学习率分别为1和2,全局学习率为0.001

Scale invariance

我们探索了实现尺度不变目标检测的两种方法:(1)通过“蛮力”学习和(2)通过我们的图像金字塔

Fast R-CNN detection

Truncated SVD for faster detection

对于全图像分类,计算全连接层所花费的时间比计算转换层要少。
相反,对于检测,要处理的roi数量很大,并且近一半的前向传递时间用于计算完全连接的层(见图2)。在这里插入图片描述

用截断的奇异值分解(SVD)对大的全连接层进行压缩,可以很容易地加速它们[5,23]。在这种技术中,一个由u × v权重矩阵W参数化的层被近似分解为

Main results

三个主要结果支持本文的贡献:
1.在VOC07, 2010和2012取得最先进的mAP
2. 与R-CNN, SPPnet相比,快速训练和测试
3.在VGG16中微调转换层可以改善mAP

Conclusion

本文提出了Fast R-CNN,它是对R-CNN和SPP-net的一种干净、快速的更新.
特别值得注意的是,稀疏对象候选框似乎提高了检测器的质量。这个问题在过去花费太大(时间上)而无法探究,但它在Fast R-CNN上是可行的。当然,可能存在一些尚未被发现的技术,可以让密集的盒子表现得和稀疏候选框一样好。这种方法,如果发展,可能有助于进一步加快目标检测

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

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

相关文章

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】

文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…

OTA: Optimal Transport Assignment for Object Detection 论文和代码学习

OTA 原因步骤什么是最优传输策略标签分配的OT正标签分配负标签分配损失计算中心点距离保持稳定动态k的选取 整体流程代码使用 论文连接: 原因 1、全部按照一个策略如IOU来分配GT和Anchors不能得到全局最优,可能只能得到局部最优。 2、目前提出的ATSS和P…

井盖异动传感器丨井盖状态监测仪助力排水管网系统装上“眼睛”

智慧排水技术作为现代城市管理的重要组成部分,正在以其高效、可持续和环保的特点在全球范围内得到广泛应用。 随着城市化进程的不断加速,城市面临着日益严重的排水管理挑战。国家政府也在《全国城市市政基础设施建设“十三五”规划》等明确要求建设城市…

vue2.x封装svg组件并使用

第一步&#xff1a;安装svg-sprite-loader插件 <!-- svg-sprite-loader svg雪碧图 转换工具 --> <!-- <symbol> 元素中的 path 就是绘制图标的路径&#xff0c;这种一大串的东西我们肯定没办法手动的去处理&#xff0c; 那么就需要用到插件 svg-sprite-loader …

福建三明大型工程机械3D扫描测量工程零件开模加工逆向抄数-CASAIM中科广电

高精度3D扫描测量技术已经在大型工件制造领域发挥着重要作用&#xff0c;可以高精度高效率实现全尺寸三维测量&#xff0c;本期&#xff0c;CASAIM要分享的应用是大型工程机械3D扫描测量案例。 铣轮是深基础施工领域内工法先进、技术复杂程度高、高附加值的地连墙设备&#xff…

基于QT的图书管理系统

获取代码&#xff1a; 知识付费时代&#xff0c;低价有偿获取代码&#xff0c;请理解&#xff01; (1) 下载链接: 后发(2) 添加博主微信获取&#xff08;有偿&#xff09;,备注来源: mryang511688(3) 快速扫码咨询&#xff1a; 项目描述 技术&#xff1a;C、QT等 摘要&#…

YOLOv5 添加 OTA,并使用 coco、CrowdHuman数据集进行训练。

YOLO-OTA 第一步&#xff1a;拉取 YOLOv5 的代码第二步&#xff1a;添加 ComputeLossOTA 函数第二步&#xff1a;修改 train 和 val 中损失函数为 ComputeLossOTA 函数1、在 train.py 中 首先添加 ComputeLossOTA 库。2、在 train.py 修改初始化的损失函数3、在 train.py 修改一…

黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman

文章目录 1、为什么要使用Postman&#xff1f;2、什么是Postman&#xff1f; 1、为什么要使用Postman&#xff1f; 目前我们开发项目大都是前后端分离项目&#xff0c;前端采用h5cssjsvue基于nodejs&#xff0c;后端采用java、SpringBoot、SSM&#xff0c;大型项目采用SpringC…

【C语言】实现通讯录管理系统

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家实现通讯录&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 前言二. 通讯录的实现2.1 写出基本框架2.2 制作menu菜单2.3 创建联系人和通讯录结构体2.4 …

LSM Tree 深度解析

我们将深入探讨日志结构合并树&#xff0c;也称为LSM Tree&#xff1a;这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构&#xff0c;例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…

驱动开发4 使用字符设备驱动的分步实现编写LED驱动(LED亮灯)

一、思维导图 二、通过字符设备驱动的分步实现编写LED驱动&#xff0c;另外实现特备文件和设备的绑定 应用程序 test.c #include<stdlib.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include…

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…

Parallels Client for Mac:改变您远程控制体验的革命性软件

在当今数字化的世界中&#xff0c;远程控制软件已经成为我们日常生活和工作中不可或缺的一部分。在众多远程控制软件中&#xff0c;Parallels Client for Mac以其独特的功能和出色的性能脱颖而出&#xff0c;让远程控制变得更加简单、高效和灵活。 Parallels Client for Mac是…

08数据结构——排序

8.2 插入排序 8.2.1 直接插入排序 直接插入排序&#xff08;用哨兵&#xff09;代码如下&#xff1a; void InsertSort(ElemType A[],int n){int i,j;for(i2;i<n;i) //依次将A[2]~A[n]插入前面已排序序列if(A[i]<A[i-1]){ //若A[i]关键码小于其前驱…

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流

在当今数字化时代&#xff0c;抖音作为一款备受欢迎的短视频平台&#xff0c;不仅吸引了大量用户的关注&#xff0c;还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一&#xff0c;凭借其独特的营销策略和优质的产品&#xff0c;成为了抖音电商领…

PyCharm改变代码背景图片的使用教程

一个好的集成环境是学习和使用一门编程语言的重中之重&#xff0c;这次我给大家分享如何改变PyCharm软件的代码背景图片。 说明&#xff1a;本教程使用的是汉化版PyCharm软件。 打开PyCharm软件。 点击软件最上方导航栏的文件&#xff0c;然后找到设置。 打开设置然后点击外观…

总结使用React做过的一些优化

一、修改css模拟v-show {!flag && <MyComponent style{{display: none}} />} {flag && <MyComponent />}<MyComponent style{{ display: flag ? block : none }} />二、循环使用key const todosList todos.map(item > {<li key{it…

Web APIs——焦点事件以及小米搜索框

一、事件类型 二、焦点事件 <body><input type"text"><script>const input document.querySelector(input)input.addEventListener(focus,function(){console.log(有焦点触发)})input.addEventListener(blur,function(){console.log(失去焦点触…

如何使用 JMeter 进行 HTTPS 请求测试?

本文将介绍如何使用 JMeter 测试 HTTPS 请求&#xff0c;并提供相关的技巧和注意事项。 在进行性能测试时&#xff0c;很多网站都采用了 HTTPS 协议。当我们测试 HTTPS 请求&#xff0c;如果服务端开启了双向认证&#xff0c;则需要客户端发送请求时带上证书。本文介绍如何在 …

【Axure视频教程】曲线图

今天教大家在Axure制作可视化曲线图的原型模板&#xff0c;鼠标移入曲线图后&#xff0c;会显示弹窗并回显对应折点的具体数据&#xff0c;该模板是用Axure原生元件制作的&#xff0c;所以使用方便&#xff0c;可以任意修改对应样式或者交互效果。该原型模板的具体效果可以参考…