YOLOv4: Optimal Speed and Accuracy of Object Detection(2020.4)


文章目录

  • Abstract
  • Introduction
  • Related work
    • Object detection models
    • Bag of freebies
    • Bag of specials
  • Methodology
    • Selection of architecture
    • Selection of BoF and BoS
    • Additional improvements
    • YOLOv4
  • Experiments
  • Results
    • 表8列出了使用Maxwell GPU的帧率对比结果
    • 表9列出了使用Pascal GPU的帧率对比结果
  • 表10列出了使用Volta GPU的帧率对比结果
  • Conclusions

原文链接
源代码

Abstract

据说有大量的特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论论证。一些特征只对某些模型和某些问题起作用,或者只对小规模数据集起作用;而一些特征,如批归一化和残差连接,适用于大多数模型、任务和数据集。我们假设这些通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批归一化(CmBN)、自对抗训练(SAT)和Mish-激活。
我们使用了新的特征:WRC、CSP、CmBN、SAT、Mish-激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并将其中一些特征结合起来获得了最先进的结果:MS COCO数据集在Tesla V100上以~ 65 FPS的实时速度获得了43.5%的AP(65.7%的AP50)

Introduction

大多数基于cnn的目标检测器很大程度上只适用于推荐系统。最精确的现代神经网络不是实时运行的,需要大量的gpu来进行大量的mini-batch大小的训练。提高实时对象检测器的准确性,不仅可以将它们用于提示生成推荐系统,还可以用于独立流程管理和减少人工输入

我们通过创建一个在传统GPU上实时运行的CNN来解决这些问题,并且训练只需要一个传统GPU
本工作的主要目标是在生产系统中设计一个快速运行的目标检测器,并优化并行计算,而不是低计算量理论指标(BFLOP)
我们希望所设计的对象易于训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如图1所示的YOLOv4结果
(在性能相当的情况下,YOLOv4的运行速度比EfficientDet快两倍。改进YOLOv3的AP和FPS分别提高10%和12%)
我们的贡献总结如下:

  1. 我们开发了一个高效、强大的目标检测模型。它使得每个人都可以使用1080 Ti或2080 Ti GPU来训练超级快速准确的目标检测器
  2. 我们在检测器训练过程中验证了最先进的Bag-of- Freebies和Bag-of- specials方法对目标检测的影响
  3. 我们修改了最先进的方法,使它们更有效,更适合单GPU训练,包括CBN, PAN, SAM等

Related work

Object detection models

现代检测器通常由两部分组成,在ImageNet上进行预训练的主干和用于预测对象类别和边界框的头部

对于那些运行在GPU平台上的检测器,它们的主干可以是VGG[68]、ResNet[26]、ResNeXt[86]或DenseNet[30]
对于那些运行在CPU平台上的检测器,它们的主干可以是SqueezeNet b[31]、MobileNet[28,66,27,74]或ShuffleNet[97,53]。

对于头部部分,通常分为两种,即一阶段目标检测器和两阶段目标检测器。最具代表性的两阶段目标检测器是R-CNN系列,包括Fast R-CNN、Faster R-CNN、R-FCN和Libra R-CNN。也有可能使两阶段对象检测器成为无锚点对象检测器,如RepPoints
对于单级目标检测器,最具代表性的型号有YOLO、SSD和RetinaNet

近年来发展了无锚单级目标探测器。这类检测器有CenterNet、CornerNet、FCOS等。近年来发展起来的目标检测器通常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部
通常,一个颈由几个自下而上的路径和几个自上而下的路径组成。采用这种机制的网络包括Feature Pyramid Network (FPN)、Path aggregation Network (PAN)[49]、BiFPN[77]和NAS-FPN

除了上述模型外,一些研究者强调直接建立一个新的主干(DetNet[43], DetNAS[7])或一个新的整体模型(SpineNet [12], HitDe- tector[20])来进行目标检测
综上所述,一个普通的目标检测器由几个部分组成:

Bag of freebies

通常,目标检测器是离线训练的。因此,研究人员一直喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更高的精度,我们把这些只改变训练策略或只增加训练成本的方法称为 “bag of freebies”

目标检测方法中经常采用的一种方法是数据增强,这种方法符合 “bag of freebies”的定义。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性

其他一些 “bag of freebies”方法致力于解决数据集中的语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个非常重要的问题是不同类别之间存在数据不平衡的问题,这一问题通常通过两阶段对象检测器中的硬负例挖掘[72]或在线硬例挖掘[67]来解决

最后一类“bag of freebies”是边界盒(Bounding Box, BBox)回归的目标函数传统的目标检测器通常使用均方误差(Mean Square Error, MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即{x中心,y中心,w, h},或者左上点和右下点,即{x左上,y左上,x右下,y右下}。基于锚点的方法是估计相应的偏移量,例如{x中心偏移量,y中心偏移量,w偏移量,h偏移量}和{x左上偏移量,y左上偏移量,x右下偏移量,y右下偏移量}

Bag of specials

对于那些只增加少量推理成本,却能显著提高目标检测精度的插件模块和后处理方法,我们称之为“bag of specials”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受野、引入注意机制或增强特征集成能力等,后处理是对模型预测结果进行筛选的一种方法

通常用于目标检测的注意模块主要分为通道型注意和点型注意,这两种注意模型的代表分别是挤压-激发(Squeeze-and-Excitation, SE)[29]和Spatial注意模块(SAM)[85]

基于深度学习的目标检测中常用的后处理方法是NMS,它可以过滤掉那些对同一目标预测不好的bbox,只保留响应较高的候选bbox

Methodology

根本目标是神经网络在生产系统中的快速运行和并行计算的优化,而不是低计算量的理论指标(BFLOP)。我们提出了两种实时神经网络的选择:
对于GPU,我们在卷积层中使用少量组(1 - 8):CSPResNeXt50 / CSPDarknet53
对于VPU -我们使用分组卷积,但我们避免使用挤压和兴奋(SE)块-具体包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / Mo- bileNetV3

Selection of architecture

我们的目标是在输入网络分辨率、卷积层数、参数数(filter_size² * filters * channel / groups)和输出层数(过滤器)之间找到最佳平衡

下一个目标是为不同的检测器级别(如FPN, PAN, ASFF, BiFPN)选择额外的块来增加接受野和来自不同骨干级别的参数聚合的最佳方法

对于分类来说最优的参考模型对于检测器来说并不总是最优的。与分类器不同,检测器需要满足以下条件:
1. 更高的输入网络大小(分辨率)-用于检测多个小尺寸目标
2. 更多的层-用于更高的接受域,以覆盖增加的输入网络大小
3. 更多参数-为了提高模型在单个图像中检测不同大小的多个目标的能力

我们可以假设应该选择一个具有更大的接受野大小(具有更多的卷积层数3 × 3)和更多参数的模型作为主干。表1显示了CSPResNeXt50、CSPDarknet53和Effi- cientNet B3的信息,这一理论证明,连同我们的大量实验,表明CSPDarknet53神经网络是两者的最佳模型作为一个检测器的骨干

不同大小感受野的影响总结如下:
1. 达到目标大小-允许查看整个目标
2. 达到网络大小-允许查看目标周围的上下文
3. 超过网络大小-增加图像点和最终激活之间的连接数

我们在CSPDarknet53上添加了SPP块,因为它显着增加了接受野,分离出最重要的上下文特征,并且几乎没有导致网络运行速度的降低。我们使用PANet作为不同检测级别的不同骨干级别的参数聚合方法,而不是YOLOv3中使用的FPN

最后,我们选择CSPDarknet53骨干、SPP附加模块、PANet路径聚合颈和YOLOv3(基于锚点的)头作为YOLOv4的架构

Selection of BoF and BoS

为了改进目标检测训练,CNN通常使用以下方法:
对于训练激活函数,由于PReLU和SELU较难训练,而ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除
我们毫不犹豫地选择DropBlock作为我们的正则化方法,对于归一化方法的选择,由于我们关注的是只使用一个GPU的训练策略,所以没有考虑syncBN

Additional improvements

为了使所设计的检测器更适合在单GPU上进行训练,我们进行了额外的设计和改进如下:
1.本文介绍了一种新的数据增强方法Mosaic, and Self-Adversarial Training (SAT)
2.采用遗传算法选择最优超参数
3.我们修改了一些现有的方法,使我们的设计适合于有效的训练和检测-改进的SAM,改进的PAN和交叉小批量正态化(CmBN)

Mosaic是一种新的数据增强方法,它将4张训练图像混合在一起,因此混合了4种不同的上下文,而CutMix只混合了2个输入图像。这使得在正常环境之外的对象检测变得容易。此外,批处理规范化计算每层上4个不同图像的激活统计信息。这大大减少了对大型mini-batch大小的需求

**自对抗训练(SAT)**也代表了一种新的数据增强技术,它分为两个向前和向后的阶段。在第一阶段,神经网络改变原始图像,而不是改变网络权重。通过这种方式,神经网络对其自身进行对抗性攻击,改变原始图像以制造图像上没有期望对象的欺骗。在第二阶段,对神经网络进行训练,对修改后的图像进行正常的目标检测)

CmBN表示CBN的修改版本,如图4所示,定义为Cross mini-Batch Normalization (CmBN)。这只收集单个批内的小批之间的统计信息
我们将SAM从空间注意改为点注意,将PAN的快捷连接改为串联,分别如图5和图6所示

YOLOv4


YOLO v4 uses
Bag of Freebies (BoF) for backboneCutMixMosaic数据增强DropBlock正则化类标签平滑
Bag of Specials (BoS) for backboneMish激活,跨级部分连接(CSP),多输入加权残差连接(MiWRC)

Bag of Freebies (BoF) for detectorCIoU-loss, CmBN, DropBlock正则化Mosaic数据增强自对抗训练SAT,消除网格敏感性,使用多个锚点为一个ground truth,余弦退火调度程序[52],最优超参数,随机训练形状
Bag of Specials (BoS) for detectorMish激活,SPP-block, SAM-block, PAN路径聚合block, DIoU-NMS

Experiments

我们在ImageNet (ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器精度的影响,然后在MS COCO (test-dev 2017)数据集上测试了不同训练改进技术对检测器精度的影响




Results

与其他最先进的目标探测器获得的结果的比较如图8所示。我们的YOLOv4位于帕累托最优曲线上,在速度和精度方面都优于最快和最准确的检测器

表8列出了使用Maxwell GPU的帧率对比结果

可以是GTX Titan X (Maxwell)或Tesla M40 GPU

(MS COCO数据集上不同目标检测器的速度和精度比较(test- dev 2017)。(此处高亮显示FPS为30或更高的实时检测器。我们将结果与batch=1进行比较,而不使用tensorRT)

表9列出了使用Pascal GPU的帧率对比结果

可以是Titan X (Pascal)、Titan Xp、GTX 1080 Ti、Tesla P100 GPU

表10列出了使用Volta GPU的帧率对比结果

可以是Titan Volta或者Tesla V100 GPU

Conclusions

我们提供了一个最先进的检测器,比所有可用的替代检测器更快(FPS)和更准确(MS COCO AP 50…95和AP 50)。所描述的检测器可以在具有8-16 gb vram的传统GPU上进行训练和使用,这使得其广泛使用成为可能。基于一阶段anchor的检测器的原始概念已被证明是可行的,我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性,这些特性可以作为未来研究和开发的最佳实践

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

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

相关文章

asp.net生产线远程故障诊断系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 生产线远程故障诊断系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用 c#语言开发 asp.net生产线远程故障诊断…

ARMday03(寄存器读写、栈、程序状态寄存器、软中断和异常、混合编程)

单寄存器内存读写指令 将一个寄存器中的数值写入到内存,或者从内存中读取数据放在某一个指定寄存器中 指令码和功能 1.向内存中写: str{条件码} 目标寄存器,[目标地址]:将目标寄存器的4字节数值写入到目标地址为首地址的空间中 strh{条件码…

openvino学习(一)ubuntu20.04安装openvino2022

安装openvino2022要求 操作系统 Ubuntu 18.04 长期支持 (LTS),64 位 Ubuntu 20.04 长期支持 (LTS),64 位 软件 CMake 3.13 或更高版本,64 位 GCC 7.5.0(适用于 Ubuntu 18.04)或 GCC 9.3.0(适用于 Ubunt…

[ Linux Busybox ] flash_eraseall 命令解析

文章目录 相关结构体flash_eraseall 函数实现flash_eraseall 实现流程图 文件路径:busybox-1.20.2/miscutils/flash_eraseall.c 相关结构体 MTD 相关信息结构体 struct mtd_info_user {__u8 type; // MTD 设备类型__u32 flags; // MTD设…

一篇文章带你搞懂DNS全流程

1.DNS与CDN DNS是域名系统的缩写,它是一种将域名和IP地址相互映射的分布式数据库,能够使人更方便地访问互联网。 DNS的主要功能是将域名解析为IP地址。当你在浏览器中输入一个网址时,浏览器会向DNS服务器发送一个请求,以获取该网…

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

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

换服还是掀桌?哪条才是程序员的出路?

站在时代的风口浪尖,猪都能起飞。 大数据互联网正是时代的宠儿,IT行业的发展也正如火如荼。 人人都眼红程序员的高薪资,认为他们吃着时代的红利。 但是三百六十行,行行出社畜。”996“也好,甚至"007"也罢…

软件测试面试题【2023最新合集】

收集了各大公司的面试经验,现整理出来,希望能给正在找工作的志同道合的小伙伴一些指引,本文会持续更新的哦。 1、 CPU 和 GPU的区别 一个是通用计算,一个是专用计算。 CPU主要负责操作系统和应用程序,GPU主要负责跟…

TensorFlow学习笔记--(1)张量的随机生成

张量的生成 如何判断一个张量的维数:看张量的中括号有几层 0 1 2 :零维数列 [2 4 6] : 一维向量 [ [1 2 3] [4 5 6] ] : 二维数组 两行三列 第一行数据为 1 2 3 第二行数据为 4 5 6 以此类推 n维张量有n层中括号 tf.zeros(%指定一个张量的维数%) 生成一…

汽车标定技术(二)--基于XCP的标定测量实战

目录 1.工程创建 1.1 新建工程 1.2 设备配置 1.3 标定观测 1.4 刷写 2.原始hex文件与标定文件的合并 2.1 修改memory segment file 2.2 标定量地址偏移 ​编辑 2.3 标定后与原始hex文件合并 2.4 标定后直接merge 2.5 不用对ram地址进行偏移实现hex文件合并 本文使用…

【机器学习】梯度下降预测波士顿房价

文章目录 前言一、数据集介绍二、预测房价代码1.引入库2.数据3.梯度下降 总结 前言 梯度下降算法学习。 一、数据集介绍 波士顿房价数据集:波士顿房价数据集,用于线性回归预测 二、预测房价代码 1.引入库 from sklearn.linear_model import Linear…

【Docker】设置容器系统字符集zh_CN.UTF-8退出失效:关于Docker容器配置环境变量,再次进入失效问题

设置容器系统字符集zh_CN.UTF-8退出失效:关于Docker容器配置环境变量,再次进入失效问题 修改正在运行的Docker容器内的字符集: 先进入Docker容器:docker exec -it 容器ID /bin/bash查看是否支持中文字符集:locale -a | grep zh&a…

案例 | 3D可视化工具HOOPS助力SolidWorks edrawings成功引入AR/VR技术

HOOPS中文网慧都科技是HOOPS全套产品中国地区指定授权经销商,提供3D软件开发工具HOOPS售卖、试用、中文试用指导服务、中文技术支持。http://techsoft3d.evget.com/达索系统SolidWorks面临的挑战 达索系统SolidWorks公司开发和销售三维CAD设计软件、分析软件和产品…

五、计算机网络

(一)OSI/RM 七层模型 七层模型是计算机网络的基石,整个计算机网络是构建与七层模型之上的。 在数据链路层,数据开始以帧为单位,网卡的 MAC 地址就是数据帧的地址,数据的传输开始有地址了。 局域网是工作…

国自然中标越来越难,怎样才能赢在起跑线上?

众所周知,国自然在学术界的地位和影响力不容小觑。“国自然在手,天下我有”,对于科研人来说,成功申报国自然,有助于职称评审、职业升迁,同时,获得不菲的科研经费。据了解,有些高校还…

https网站加载http资源问题

https网站加载http资源问题 前言:最近项目对接了一个第三方的平台、我们需要展示第三方平台返回来的图片资源、由于我们的服务器设置为了https、但是第三方平台返回的图片链接是 http 资源。所以就出现了图片无法加载出来的问题,在此记录一下问题的解决…

ps人像怎么做渐隐的效果?

photoshop怎么制作人像渐隐的图片效果?渐隐效果需要使用渐变来实现,下面我们就来看看详细的教程。 首先,我们打开Photoshop,点击屏幕框选的【打开】,打开一张背景图片。 下面,我们点击左上角【文件】——【…

如何在Jetpack Compose中显示PDF?

当读取和显示 PDF 的组件缺失时该怎么办? 声明式编程可以拯救你. Jetpack Compose已经存在好几年了, 但_在某些方面它的使用仍然面临挑战_. 例如, 缺少用于查看PDF的官方组件, 而为数不多的第三方库通常也是有代价的. 在我们的应用中, 我们会遇到在许多场景中显示 PDF 的需求…

1.1 HTML4

一. 前言 1. 两位先驱 艾伦麦席森图灵 二战时期,破译了德军的战争编码一英格玛。让二战提前2年结束,拯救了上千万人的生命。设立图灵奖,被后人誉为:人工智能之父。 约翰冯诺依曼 制订了现代计算机标准一一冯诺依曼体系结构。提出:计算机要…