yoloV4论文知识点记录

论文链接: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:原理与源码解析》 【为什么要学习这门课】 Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. 冗谈不够,放码过来! 代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。【课程内容与收获】 本课程将解析YOLOv4的实现原理和源码,具体内容包括:- YOLOv4目标检测原理- 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算- 代码阅读工具及方法- 深度学习计算的利器:BLAS和GEMM- GPU的CUDA编程方法及在darknet的应用- YOLOv4程序流程- YOLOv4各层及关键技术的源码解析本课程将提供注释后的darknet的源码程序文件。【相关课程】 除本课程《Windows版YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括:《Windows版YOLOv4目标检测实战:训练自己的数据集》《Windows版YOLOv4-Tiny目标检测实战:训练自己的数据集》《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》《Windows版YOLOv4目标检测实战:中国交通标志识别》建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。【YOLOv4网络模型架构图】 下图由白勇老师绘制  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值