论文链接:https://arxiv.org/abs/2004.10934v1

代码链接:https://github.com/AlexeyAB/darknet

摘要

据说有许多功能可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。一些功能仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小规模数据集上运行。而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。我们假设此类通用功能包括加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。我们使用新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CIoU丢失,并结合其中的一些来达到最先进的结果:在MS VCO数据集上,Tesla V100的实时速度为〜65 FPS时为43.5%AP(65.7%AP50)。

第一个记录

有大量的功能,据说提高卷积神经网络(CNN)的准确性。需要对大型数据集上此类要素的组合进行实际测试,以及结果的理论论证。某些功能仅针对某些模型,仅针对某些问题,或仅适用于小规模数据集;而某些功能(如批处理规范化和剩余连接)适用于大多数模型、任务和数据集。我们假设此类通用功能包括加权剩余连接 (WRC)、跨阶段-部分连接 (CSP)、交叉小批量规范化 (CmBN)、自对抗训练 (SAT) 和”密斯激活”。我们使用新功能:WRC、CSP、CmBN、SAT、Mish 激活、马赛克数据扩增、CmBN、DropBlock 正化和 CIoU 损耗,并结合其中一些功能实现最先进的结果:43.5% AP (65.7% AP 50),实时速度为特斯拉 V100 上的 MS COCO 数据集 ~65 FPS。源代码位于https://github.com/AlexeyAB/darknet。

大多数基于CNN的目标检测器大多仅适用于推荐系统。例如,通过城市摄像机搜索免费停车位是通过缓慢准确的模型执行的,而汽车碰撞警告则与快速不准确的模型有关。提高实时目标检测器精度,不仅可以将其用于提示生成建议系统,还可用于独立的过程管理和人工输入减少。传统图形处理单元(GPU)上的实时目标检测器操作允许以实惠的价格大规模使用。最精确的现代神经网络无法实时运行,并且需要大量的 GPU进行大型小型批处理大小的训练。我们通过创建一个在传统 GPU 上实时运行的 CNN 来解决这些问题,为此训练只需要一个常规 GPU

图1:对拟建的YOLOv4和其他最先进的目标检测器进行比较。YOLOv4 的速度比高效德特快两倍,具有同等的性能。YOLOv3的AP和FPS分别提高了10%和12%。

这项工作的主要目标是设计生产系统中目标检测器的快速运行速度,优化并行计算,而不是低计算量理论指标(BFLOP)。我们希望设计的对象能够轻松训练和使用。例如,任何使用传统 GPU 进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如图1所示的 YOLOv4 结果所示。我们的贡献总结如下:

  1. We develope an efficient and powerful object detection model. It makes everyone can use a 1080 Ti or 2080 Ti GPU to train a super fast and accurate object detector.
  2. 我们开发一种高效、强大的物体检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU来训练超快速和准确的目标检测器。
  3. We verify the inuence of state-of-the-art Bag-ofFreebies and Bag-of-Specials methods of object detection during the detector training.
  4. 在检测器训练期间,我们验证最先进的免费包和特殊包检测方法的影响。
  5. We modify state-of-the-art methods and make them more effecient and suitable for single GPU training, including CBN [89], PAN [49], SAM [85], etc
  6. 我们修改最先进的方法,使其更高效,适合单次GPU训练,包括 CBN [89]、PAN [49]、SAM [85]等

2 Related work

2.1 Object detection models

目标检测器通常由两部分组成,一个是在ImageNet上预先训练的骨干网,另一个是用于预测物体的类和边界框的头部。对于在 GPU 平台上运行的检测器,其主干可以是 VGG [68]、ResNet [26]、ResNeXt [86]或密集网[30]。对于在CPU平台上运行的检测器,其主干可以是挤压网 [31]、移动网络 [28、66、27、74]或 ShuffleNet [97, 53]。至于头部部分,通常分为两类,即一级目标检测器和两级目标检测器。最具代表性的两级目标检测器是R-CNN[19]系列,包括快速R-CNN[18],更快的R-CNN[64],R-FCN[9]和天秤座R-CNN[58]。也可以使两级目标检测器成为无锚目标检测器,如 RepPoints [87]。至于一级目标检测器,最具代表性的型号是YOLO[61、62、63]、SSD[50]和视网膜[45]。近年来,研制了无锚式单级目标检测器。此类检测器有 CenterNet [13]、角网 [37、 38]、FCOS [78]等。近年来开发的目标检测器通常插入骨干和头部之间的一些层,这些层通常用于收集不同阶段的要素图。我们可以称它为目标检测器的脖子。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备此机制的网络包括特征金字塔网络(FPN)[44]、路径聚合网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。

In addition to the above models, some researchers put their emphasis on directly building a new backbone (DetNet[43],DetNAS[7])or a new whole model (SpineNet [12], HitDetector [20]) for object detection.除了上述模型外,一些研究人员还强调直接构建一个新的主干(DetNet [43],DetNAS [7])或新的完整模型(SpineNet [12],HitDetector [20])用于物体检测。

To sum up, an ordinary object detector is composed of several parts:总之,普通目标检测器由几个部分组成:

通常,传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们将这些方法称为”免费赠品包”,这些方法仅改变训练策略或仅增加训练成本。目标检测方法通常采用并符合免费赠品包的定义的是数据扩充。数据扩增的目的是增加输入图像的可变性,使设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度失真和几何失真是两种常用的数据扩增方法,它们肯定有利于目标检测任务。在处理光度失真时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何失真,我们添加随机缩放、裁剪、翻转和旋转。

上面提到的数据扩充方法是所有像素调整,并保留调整后区域中的所有原始像素信息。此外,一些从事数据扩增的研究人员强调模拟物体遮挡问题。他们在图像分类和物体检测方面取得了良好的效果。例如,随机擦除 [100] 和 CutOut [11] 可以随机选择图像中的矩形区域并填充零的随机或互补值。至于隐藏和查找 [69] 和网格掩码 [6],它们随机或均匀地选择图像中的多个矩形区域,并将其替换为所有零。如果类似的概念应用于要素地图,则有”退出 “[71]、DropConnect [80]和 DropBlock [16] 方法。此外,一些研究人员提出了将多个图像结合在一起执行数据扩增的方法。例如,MixUp [92] 使用两个图像以不同的系数比率倍增和叠加,然后使用这些叠加比率调整标签。至于 CutMix [91],它是将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除上述方法外,样式传输GAN[15]还用于数据扩增,这种使用可以有效地减少CNN学到的纹理偏差。

与上述各种方法不同,其他一些免费赠品方法专门用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏差问题时,一个很重要的问题是,不同类之间的数据不平衡问题,这个问题往往通过硬负例挖掘[72]或两阶段目标检测器中的联机硬示例挖掘[67]来解决。但实例挖掘方法不适用于一级目标检测器,因为这种检测器属于密集预测架构。因此,Lin等人[45]提出了解决不同类别之间存在的数据不平衡问题的重点损耗问题。另一个非常重要的问题是,很难表达不同类别与一热硬表示的关系。在执行标签时,通常使用此表示方案。[73] 中建议的标签平滑是将硬标签转换为软标签进行训练,这将使模型更加坚固。为了获得更好的软标签,Islam等人引入了知识蒸馏的概念来设计标签细化网络。

我们的目标是在输入网络分辨率、卷积层数、参数编号(滤波器大小 2 + 滤波器 + 通道/组)和图层输出数(筛选器)之间找到最佳平衡。例如,我们的大量研究表明,在 ILSVRC2012 (ImageNet) 数据集 [10] 上,CSPResNext50比 CSPDarknet53要好得多。但是,相反,在检测 MS COCO 数据集 [46] 上的对象方面,CSPDarknet53 优于 CSPResNext50。

马赛克是一种新的数据扩增方法,它混合了4个训练图像。因此,4个不同的上下文混合,而CutMix只混合2个输入图像。这允许检测其正常上下文之外的对象。此外,批处理规范化计算每个层上 4 个不同图像的激活统计信息。这大大减少了对大型小型批次尺寸的需求。

YOLOv4 consists of:

  • Backbone: CSPDarknet53 [81]
  • Neck: SPP [25], PAN [49]
  • Head: YOLOv3 [63]

YOLOv4 包括:
主干: CSPDarknet53 [81]
颈部: SPP [25], PAN [49]
头部: YOLOv3 [63]

YOLO v4 uses:

Bag of Freebies (BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization, Class label smoothing

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

4.1. Experimental setup

在ImageNet 图像分类实验中,默认的超参数如下:训练步骤为 8,000,000;批次大小和小批次大小分别为128和32;采用多项式衰减学习率调度策略,初始学习速率为0.1;预热步骤为1000;动量和重量衰减分别设置为 0.9 和 0.005。我们所有的 BoS 实验都使用与默认设置相同的超参数,在 BoF 实验中,我们增加了 50% 的训练步骤。在 BoF 实验中,我们验证 MixUp、CutMix、马赛克、模糊数据扩增和标签平滑规律化方法。在BoS实验中,我们比较了LReLU、Swish和Mish激活函数的影响。所有实验都使用1080 Ti或2080Ti GPU进行训练。

在MS COCO目标检测实验中,默认超参数如下:训练步骤为500,500;采用步减学习率调度策略,初始学习速率0.01,在400,000步和45万步时乘以因子0.1;动量和重量衰减分别设置为 0.9 和 0.0005。所有体系结构都使用单个 GPU 执行批处理大小为 64 的多级训练,而小批处理大小为 8 或 4 取决于体系结构和 GPU 内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验都使用默认设置。遗传算法使用YOLOv3-SPP训练与GIoU损失和搜索300个纪元为最小瓦尔5k集。采用搜索学习速率0.00261、动量0.949、分配地真0.213的IoU阈值和遗传算法实验的损耗规范化器0.07。我们已经验证了大量的BoF,包括网格灵敏度消除、镶嵌数据扩增、IoU阈值、遗传算法、类标签平滑、交叉小批量规范化、自对抗性训练、原蛋白退火调度器、动态小批量尺寸、DropBlock、优化锚点、不同类型的IoU损耗。我们还对各种 BoS 进行实验,包括米什、SPP、SAM、RFB、BiFPN 和高斯 YOLO [8]。对于所有实验,我们只使用一个 GPU 进行训练,因此不使用同步BN优化多个 GPU 等技术。

4.2. Influence of different features on Classifier training

首先,研究了不同特点对分类器训练的影响;具体来说,类标签平滑的影响,不同数据扩增技术的影响,双边模糊,MixUp,CutMix和马赛克,如Fugure 7所示,以及不同激活的影响,如泄漏-ReLU(默认情况下),Swish和Mish。

在我们的实验中,如表 2 所示,分类器的精度通过引入以下功能得到提高,例如:CutMix 和马赛克数据扩增、类标签平滑和 Mish 激活。因此,我们的 BoF骨干(免费赠品袋)用于分类器训练包括以下内容:CutMix 和马赛克数据扩增和类标签平滑。此外,我们使用 Mish 激活作为补充选项,如表 2 和表 3 所示。

第三个记录

随着 YOLO 之父退出了 CV 届,号称 YOLOv4 的“继承者”通过在原 YOLO 技术上疯狂试探了众多崭新的 Tricks,通过强大的工程实践实现了速度与精度的有效提升!(有钱真好。)

由图1知,YOLOv4 比 YOLOv3 准确率提升高近10个点而几乎未降低速度。论文主要贡献为:

1、开发了速度更快、精度更好的目标检测模型,仅需单张 1080Ti 或 2080Ti 即可训练;

2、验证了 SOTA 的 Bag-of-Freebies(不增加推理成本的 trick) 和 Bag-of-Specials(增加推理成本的trick) 的有效性;

3、修改了 SOTA 方法,使之更高效且更合适地单卡训练,包括 CBN、PAN、SAM 等。

分类效果优异的 backbone 并不一定适合检测模型,适用于检测的 backbone 需满足:

1、输入分辨率更高,以便于提升对小物体检测的准确率;

2、层数更多,以便于提升感受野来适应输入尺寸的增加;

3、参数量更大,以便于提升单图多尺度目标检测的能力。

因此,YOLOv4 加入了 SPP block,从而显著地改善感受野大小,且速度几乎未降低。同时,用PANet代替YOLOv3中的FPN,从不同的backbone层对不同的检测层进行参数聚合,实现多通道特征融合。最后,选择CSPDarknet53作为backbone、SPP附加模块、PANet 通道融合颈部网络和 YOLOv3 (基于 anchor 的) 头部网络作为 YOLOv4 的系统结构。

为改进目标检测模型训练,CNN 通常使用以下方法:

  • 激活函数:ReLU、leaky-ReLU、parametric-ReLU、ReLU6、SELU、Swish or Mish
  • boox回归损失:MSE、IoU、GIoU、CIoU、DIoU
  • 数据增强:CutOut、MixUp、CutMix
  • 正则化方法:DropOut、DropPath、Spatial DropOut、or DropBlock
  • 归一化方法: Batch Normalization(BN)、Cross-GPU Batch Normalization(CGBN or SyncBN)、Filter Response Normalization (FRN) or Cross-Iteration Batch Normalization(CBN)
  • 跳跃连接:残差连接、加权残差连接、多输入加权残差连接或跨级部分连接(CSP)

至于训练激活功能,由于 PReLU 和 SELU 更难训练,并且 ReLU6 是专门为量化网络设计的,因此本文从候选列表中删除了上述激活函数。在正则化方法中,发表 DropBlock 的人详细比较了其他方法,证明了其效果更优,故本文选择 DropBlock 作为正则化方法。至于归一化方法的选择,由于本文关注的是单 GPU 的训练策略,故不考虑 syncBN。

为使设计的检测模型更适合单 GPU 训练,本文做了如下的额外设计和改进:

1、介绍了一种新的数据增强方法 Mosaic 和自对抗训练 (SAT)方法;

2、应用遗传算法时选择最佳超参数;

3、修改了一些现有方法,使设计适合有效的训练和检测 - SAM 改、PAN 改、以及跨小批量归一化 (Cross mini-Batch Normalization, CmBN)。

Mosaic 代表了一种新的数据增强方法,混合了4幅训练图像。

第二次记录

作者把Weighted-Residual-Connections (WRC), Cross-Stage-Partial-connections (CSP), Cross mini-Batch Normalization (CmBN), Self-adversarial-training (SAT) and Mish-activation等功效组合起来使用,从而诞生了YOLOv4。并在MS coco数据集上取得了43.5%AP(65.7%AP50)的惊人成绩。Tesla V100上实时速度约为65FPS。(可以说V4的成绩还是很惊人的)。

通过实验对比,YOLOv4的运行速度比EfficientDet快两倍,并且性能相当。将YOLOv3的AP和FPS分别提高了10%和12%。

主要贡献:

1.设计了一种高效而强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU 训练超快速和准确的目标检测器。

2.在检测器训练期间,验证了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影响。

3.改进了SOTA的方法,使它们更有效,更适合单GPU训练,包括CBN,PAN,SAM等。文章将目前主流的目标检测器框架进行拆分:input、backbone、neck 和 head。

对于GPU而言,在组卷积中采用小数量的groups(1-8),CSPResNeXt50/CSPDarknet53;

对于VPU而言,采用组卷积而不采用SE模块。包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3

总结一下YOLOv4框架:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

YOLOv4 = CSPDarknet53+SPP+PAN+YOLOv3

大部分基于 CNN 物体检测算法仅适用于推荐系统。例如,通过城市视频摄像头来搜索免费的停车位,这个过程是通过 slow accurate models 来实现的,而车辆碰撞警告是通过快速的不准确模型来实现的。因此一个实时的准确的物体检测模型,是非常重要的。本文就想构建一种物体检测模型来实现一个快速的算法,但是还要求能在单个普通的 GPU 上进行训练。为了上述目标,作者提出如下的贡献:

1)作者开发了一种有效地、强大的物体检测模型。其可以利用 1080TI 或者 2080TI 显卡来训练一个超级快速和准确地物体检测器;

2)作者验证了顶尖的Bag-of-Freebies和Bag-of-Specials 方法的影响;

3)修改了顶尖的算法,使得他们更加适合单张GPU 训练,包括CBN,PAN,SAM,等。

其中,比较有意思的是自我攻击训练:Self-Adversarial Training (STA) 这种方法提供了一种新的数据增广的技术,涉及到两个前向和后向阶段。

在第一个阶段,神经网络会修改原始的图像;这样神经网络就可以进行对抗攻击,改变原始图像来创造一些欺骗性的东西。

在第二个阶段,神经网络被训练按照常规的方式进行物体检测。

参考文献

https://blog.csdn.net/qq_39478403/article/details/105728700

https://www.cnblogs.com/wangxiaocvpr/p/12778420.html

https://www.machunjie.com/translate/695.html

yoloV4论文知识点记录相关推荐

  1. YOLOv4论文阅读(附原文翻译)

    YOLOv4论文阅读(附原文翻译) 论文阅读 论文翻译 Abstract摘要 1.Introduction 引言 2.Related work相关工作 2.1.Object detection mod ...

  2. 毕业论文知识点记录(四)——MaxEnt模型

    毕业论文知识点记录(四)--MaxEnt模型 0 序言 经过了几次文章分享,数据已经准备得差不多了,师姐说可以先利用现有数据跑一个结果,然后再逐步增加想要的环境数据,改善结果. 另外,谨记师姐的一句话 ...

  3. C++部分知识点记录

    文章目录 反问 为什么想要加入国微芯? 自己的优势/岗位匹配度在哪? EDA(电子设计自动化) 前言 <C++ Primer>知识点记录 1.声明一个返回数组指针的函数(P205) 2.头 ...

  4. 毕业论文知识点记录(二)——环境数据下载之全球土壤数据下载(非时序性)

    毕业论文知识点记录(二)--环境数据下载之全球土壤数据下载(非时序性) #(零)数据介绍 本次论文环境数据中包含两部分数据,分别是时序性的0-10cm平均土壤温度和平均土壤湿度 以及非时序性的土壤类型 ...

  5. yolov4论文_Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划...

    作者 | Mr.Jk.Zhang 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 千呼万唤始出来系列,继YOLOv3两年后,YOLOv4终于在上周出来了,让我们来一睹论文真容吧!由 ...

  6. javaweb基础知识点记录2

    javaweb基础知识点记录 1.在service方法中,首先获得请求的方法名,然后根据方法名调用对应的doXXXX方法,比如说请求参数为GET,那么就会去调用doGet方法,请求参数为POST,那么 ...

  7. javaweb基础知识点记录1

    javaweb基础知识点记录 1.当我们通过在浏览器的输入栏中直接输入网址的方式访问网页的时候,浏览器采用的就是GET方法向服务器获取资源. 2.我们可以将Servlet看做是嵌套了HTML代码的ja ...

  8. MapReduce论文阅读记录

    本文为阅读MapReduce论文的记录,内容主要是论文的第三部分--实现.方便本人今后查看. 1. 运行概述 下图展示了 MapReduce 过程的整体情况 当用户程序执行 MapReduce 时,会 ...

  9. 计算机论文指导记录范本,论文指导内容记录怎么写 3篇 论文指导记录20篇

    论文指导内容记录怎么写 3篇 论文指导记录20篇 论文指导内容记录怎么写 3篇 论文指导记录20篇精品文档,仅供参考论文指导内容记录怎么写 3篇 论文指导记录20篇指导是一个汉语词语,读音为zhdo, ...

最新文章

  1. 31页PPT概述:图神经网络表达能力有多强?
  2. 银行选型和排坑实战:用开源软件自建分布式数据服务平台
  3. BootStrap table 数据填充与分页应用总结
  4. shell 数组排序
  5. 汤家凤高等数学2020年强化笔记-第一模块极限与连续与第二模块微分学
  6. IE6 IE8下背景图片不显示问题
  7. python制作饼状图
  8. 09-R中文文本分析方便工具包chinese.misc简介
  9. 概率图模型笔记(三)条件随机场(CRF)基础
  10. 关于直播,所有的技术细节都在这里了(二)
  11. The Softwares Programer must download
  12. 基于OpenCv的人脸识别系统设计
  13. python课程改进建议_关于Python课程的思考和意见
  14. 魔兽星期二服务器维护,魔兽世界例行维护,假如我星期一晚上通宵,在星期二凌晨五点维护时我没退出游戏,会被强制退出么?...
  15. WPF游戏开发——小鸡快跑
  16. 计算机培训考试内容,计算机等级考试的科目和内容解析
  17. 问题 M: 【字符串】贝贝的数学课
  18. STM32L0 内部EEPROM写读
  19. L2正则化—tensorflow实现
  20. python第三章课后答案_XX医学院本科各专业《Python》第三章习题与答案-2020年实用精品...

热门文章

  1. 13种老人不适合带孩子_13种老人不适合带孩子
  2. mac下adb找不到OPPO r11
  3. 抖音群怎么设置进群权限
  4. OPPO手机ColorOS_V7版本的开发者选项如何打开
  5. 绳结的打法(野外生存学习)
  6. 评估网站性能的专业术语
  7. 文献解读|柳叶刀:基于机器学习的急性冠脉综合征不良事件预测:一项汇集数据集的建模研究...
  8. 【Apache Spark 】第 9 章使用 Apache Spark构建可靠的数据湖
  9. java中map集合遍历的五种方式
  10. 那些说「程序员」的穿搭丑爆的?看完这篇我们再聊!