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

news2024/12/24 3:14:57


文章目录

  • 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的检测器的原始概念已被证明是可行的,我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性,这些特性可以作为未来研究和开发的最佳实践

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

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

相关文章

一图掌握PMP49个过程组

一图掌握PMP 49个过程组

nigix安装以及遇到的问题

Nginx配置 nginx双击闪退如何解决 修改配置文件 端口冲突,将端口改为90 Nginx 动静分离(前端的代码单独运行) 将html文件夹里面的东西放到nginx里面的HTMl文件夹里面 负载均衡(轮询,权重,哈希&#xff…

Android 13.0 Settings主页面去掉FocusRecyclerView相关功能

1.前言 在13.0的系统rom产品定制化开发中,在系统Settings主页面的主菜单中,在测试某些功能的时候,比如开启护眼模式和改变系统密度会在主菜单第一项的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,所以根据系…

nginx反向代理报错合集

本文汇集了最近在使用nginx反向代理过程中遇到的一系列错误及其解决办法。 1缺乏支持项导致nginx配置错误 在利用sudo ./configure --with-http_ssl_module --with-http_stub_status_module进行配置时,往往会遇到以下类型的错误 error: the HTTP rewrite module …

字符加密A--E,B-F,W--A

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为选择结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码 #include<stdio.h> int main(){char c;cgetchar();if(c>a&&…

【C/PTA——7.数组1】

C/PTA——7.数组1 7-1 计算最大值出现的次数1.题目要求2.代码实现 7-2 求一批整数中出现最多的个位数字1.题目要求2.代码实现 7-3 装箱问题1.题目要求2.代码实现 7-4 数组-值钱的微信号1.题目要求2.代码实现 7-5 数组-吹泡泡1.题目要求2.代码实现 7-6 数组-数学鬼才1.题目要求2…

基于工业无线DTU的空气污染监测防治方案

​秋冬季是我国大气污染天气的高发、频发期&#xff0c;也是大气污染防治的关键期、敏感期。针对空气质量的监测和防治&#xff0c;可以利用佰马工业无线DTU&#xff0c;搭建分布式大气传感器监测网络&#xff0c;实现对广域空气质量、成分、变化的实时监测&#xff0c;从而实现…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下&#xff0c;随着企业数字化进程的推进&#xff0c;数字孪生可视化技术逐渐在汽车行业得到广泛应用&#xff0c;数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业&#xff0c;汽车生产包含冲压、焊接、涂…

flutter显示出底部控件的引导页

需求&#xff1a;同一个页面的两个不同的入口&#xff0c;同一个控件的位置有变化&#xff0c;显示引导页时对应这个控件的引导内容的位置也需要改变&#xff1b;同时半透明底部显示出真实的页面内容。 这样的需要如果切图然后再往页面上贴位置无法精确的对准。 思路&#xff1…

xcode SDK does not contain ‘libarclite‘

SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum deployment target解决方法 iOS13以上

线性系统的激励和响应以及与系统特性的联系

线性系统的激励和响应以及与系统特性的联系 一、系统激励和响应的定义 一个线性系统可以用一个常系数线性微分方程来表示。比如&#xff0c;RC串联电路&#xff0c;电容器两端的电压 u c ( t ) u_c(t) uc​(t)所满足的关系式为&#xff1a; R C d u c d t u c e ( t ) RC\…

掌动智能信创测试服务内容是什么

掌动智能信创测试对软件厂商依据系列《产品适配认证技术规范》&#xff0c;开展数据库、中间件、应用软件等产品适配认证服务&#xff0c;验证其在信创环境下的功能、性能、安全性等,进一步提高产品质量的可信度。 掌动智能信创测试服务内容 1、软件产品选型测试&#xff1a;在…

LabVIEW如何才能得到共享变量的引用

LabVIEW如何才能得到共享变量的引用 有一个LabVIEW 库文件 (.lvlib) &#xff0c;其中有一些定义好的共享变量。但需要得到每个共享变量的引用以便在程序运行时访问其属性。 共享变量的属性定义在“变量”类属性节点中。为了访问变量类&#xff0c;共享变量的引用必须连接到变…

SQL必知会(二)-SQL查询篇(2)-排序检索数据

第3课、排序检索数据 排序数据 OEDER BY&#xff1a;排序 进行排序 1&#xff09;按单个列排序 需求&#xff1a; 以 prod_name 字段按照字母顺序排序 SELECT prod_name FROM Products ORDER BY prod_name; -- 以 prod_name 列按照字母顺序排序输出结果&#xff1a; 2&…

vpn概述总结

一、VPN背景 在Internet的传输中 绝大部分数据的内容都是明文传输的 存在很多安全隐患 如窃听 篡改 冒充 总部 分公司 办事处 出差人员 合作单位需要访问总部网络资源的问题 二&#xff0c;VPN定义&#xff08;Vitual Private Network&#xff0c;虚拟私有网&#xff09;&…

IP代理中的动态轮换住宅代理是什么?有何作用?

随着越来越多的企业完善网络活动&#xff0c;IP代理的重要性变得显而易见。代理可确保顺利、安全且不受限制地访问互联网的大量资源。在不同类型的代理中&#xff0c;轮换代理脱颖而出&#xff0c;那么他哪里有别于其他IP代理呢&#xff1f; 一、什么是动态轮换代理&#xff1f…

SMT:引领新时代公链赛道的龙头之选!

近年来&#xff0c;区块链技术的应用越来越广泛&#xff0c;而公链作为区块链技术的重要组成部分&#xff0c;也得到了越来越多的关注。SMT公链作为新兴的公链项目&#xff0c;正在吸引着越来越多的关注。 SMT平台由拥有丰富金融行业和区块链技术经验的专业团队运营&#xff0…

【数组】【快慢指针】Leetcode 27 移除元素

【数组】【快慢指针】Leetcode 27 移除元素 解法1 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 时间复杂度O(N) 空间复杂度O(1) class Solution {public int removeElement(int[] nums, int val) {// 快慢指针…

2023年WebAssembly 现状

WebAssembly 2023的调查已经结束&#xff0c;结果揭晓……真的很吸引人&#xff01; 如果你想要简短的总结&#xff0c;这里有一些亮点&#xff1a; Rust 和 JavaScript 的使用仍在继续增加&#xff0c;但更值得注意的变化发生在下面—— Swift 和 Zig 的采纳率都有了显著的增长…