**yolo--v4**
摘要
目标检测的挑战:
摘要提到,目标检测领域存在大量声称能提高卷积神经网络(CNN)准确性的特性。然而,这些特性需要在大型数据集上进行实际测试,并且需要理论上的证明来支持测试结果。
通用特性的假设:
作者假设了一些通用特性,这些特性适用于大多数模型、任务和数据集。这些特性包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量归一化(CmBN)、自对抗训练(SAT)和Mish激活函数等。
新特性的使用:
YOLOv4使用了一系列的新特性,包括WRC、CSP、CmBN、SAT、Mish激活函数、Mosaic数据增强、DropBlock正则化和CIoU损失。这些特性被组合使用,以实现最先进的结果。
性能指标:
YOLOv4在MS COCO数据集上达到了43.5%的平均精度(AP)和65.7%的AP50,这是在实时速度(约65 FPS)下的特斯拉V100 GPU上实现的。AP50是指在50%的IoU阈值下的平均精度,这是一个衡量目标检测模型性能的常用指标。
主要目标:
论文的主要目标是设计一个在生产系统中具有快速运行速度的目标检测器,并优化并行计算,而不是追求理论上的低计算量指标(BFLOP)。这意味着YOLOv4旨在在实际应用中提供高效率和高性能。
1.引言”(Introduction):
-
背景介绍:
- 论文首先指出,大多数基于卷积神经网络(CNN)的目标检测器主要应用于推荐系统,例如通过城市摄像头寻找空闲停车位或用于汽车碰撞预警等场景。这些应用场景对目标检测器的准确性和速度有着不同的要求。
-
实时目标检测的重要性:
- 论文强调,提高实时目标检测器的准确性对于将其应用于更多场景至关重要。实时性能不仅能够支持推荐系统,还能用于独立的流程管理和减少人工输入。
-
传统GPU的应用:
- 作者提到,实时目标检测器在传统图形处理单元(GPU)上的运行使得其可以大规模且经济地使用。最准确的现代神经网络通常无法实时运行,并且需要大量的GPU来训练大型的 minibatch-size。
-
研究目标:
- 论文的主要目标是创建一个在传统GPU上实时运行的CNN,其训练过程只需要一个常规GPU。这样的设计使得模型易于训练和使用,任何人使用常规GPU都能获得实时、高质量和可靠的目标检测结果。
-
设计原则:
- 论文提出,相比于追求理论上的低计算量指标(如BFLOP),更注重于目标检测器在生产系统中的快速运行速度和并行计算的优化。这意味着研究的重点在于提高模型在实际应用中的性能。
-
贡献概述:
- 作者总结了他们的贡献,包括开发了一个高效且强大的目标检测模型,验证了在目标检测器训练中使用的最先进的Bag-of-Freebies和Bag-of-Specials方法,并针对单GPU训练对这些方法进行了修改和优化。
通过“引言”部分,论文为读者提供了研究的背景和框架,并明确了YOLOv4的研究目标和预期的贡献。这为理解论文的其余部分奠定了基础,并帮助读者把握研究的重点和方向。
2.1. Object detection models
现代检测器的组成:
论文描述了现代目标检测器通常由两部分组成:一个在ImageNet上预训练的骨干网络(backbone)和一个用于预测物体类别和边界框的头部(head)。这些组件可以根据运行平台(如GPU或CPU)选择不同的网络架构。
骨干网络的选择:
对于在GPU平台上运行的检测器,骨干网络可以选择VGG、ResNet、ResNeXt或DenseNet等。
对于在CPU平台上运行的检测器,骨干网络可以选择SqueezeNet、MobileNet或ShuffleNet等。
头部的分类:
目标检测器的头部通常分为两种类型:单阶段(one-stage)和双阶段(two-stage)目标检测器。
代表性的双阶段检测器包括R-CNN系列,如fast R-CNN、faster R-CNN、R-FCN和Libra R-CNN等。
单阶段检测器的代表性模型包括YOLO、SSD和RetinaNet等。
锚点自由的目标检测器:
近年来,研究者们还开发了锚点自由的单阶段目标检测器,如CenterNet、CornerNet和FCOS等。
特征金字塔网络(FPN)和其他机制:
许多目标检测器在骨干网络和头部之间插入了一些层,这些层通常用于从不同阶段收集特征图。这些层可以被称为检测器的“颈部”(neck)。
特征金字塔网络(FPN)、路径聚合网络(PAN)、双FPN(BiFPN)和NAS-FPN等都是配备了这种机制的网络。
新骨干和全模型的开发:
除了上述模型,一些研究者专注于直接构建用于目标检测的新骨干(如DetNet、DetNAS)或全新模型(如SpineNet、HitDetector)。
目标检测器的组成:
论文总结了一个普通目标检测器由以下几个部分组成:
输入:图像、补丁、图像金字塔
骨干网络:多种不同的网络架构
颈部:额外的块、路径聚合块
头部:密集预测(one-stage)、稀疏预测(two-stage)
2.2“Bag of Freebies”
-
数据增强(Data Augmentation):
- 数据增强通过在训练过程中对图像应用各种变换来增加数据集的多样性,从而提高模型的泛化能力。这些变换包括调整图像的亮度、对比度、色调和饱和度(光度失真),以及对图像进行缩放、裁剪、翻转和旋转(几何失真)。
- 光度失真旨在模拟不同光照条件下的图像,帮助模型学习到不依赖于特定光照条件的特征表示。
- 几何失真则通过改变图像的空间结构来模拟物体在现实世界中可能出现的不同姿态和视角。
-
MixUp和CutMix:
- MixUp是一种数据增强技术,它通过线性插值的方式将两个不同的图像混合在一起,并根据混合比例调整标签。这种方法可以鼓励模型学习到更平滑的决策边界,提高模型对新样本的预测能力。
- CutMix则是将一个图像的一部分“剪切”并“粘贴”到另一个图像上,这种方法可以模拟目标物体在不同背景下的外观,增强模型对遮挡和背景变化的鲁棒性。
-
风格迁移(Style Transfer):
- 风格迁移是一种利用生成对抗网络(GAN)的技术,它可以将一个图像的风格(纹理)应用到另一个图像上,同时保持目标图像的内容不变。这种方法可以帮助模型减少对特定纹理的依赖,提高对不同纹理背景的检测能力。
-
硬负例挖掘(Hard Negative Example Mining):
- 在目标检测中,硬负例是指那些模型错误地预测为正样本的负样本。通过挖掘这些难例并将其纳入训练集中,可以帮助模型更好地学习到区分正负样本的特征,从而提高检测性能。
-
标签平滑(Label Smoothing):
- 标签平滑是一种正则化技术,它通过将硬标签(即完全确定的类别标签)转换为软标签(即概率分布),使模型对于类别的预测不再是绝对的,而是具有一定的不确定性。这种方法可以防止模型对于特定类别过度自信,从而提高模型的泛化能力。
-
目标函数的改进:
- 传统的目标检测器使用均方误差(MSE)来直接对边界框(BBox)的坐标进行回归,但这种方法没有考虑到BBox的整体性。
- IoU损失考虑了预测BBox和真实BBox之间的重叠区域,促使模型更准确地预测物体的位置和大小。
- GIoU损失在IoU损失的基础上进一步考虑了预测BBox和真实BBox的形状和方向。
- DIoU损失添加了中心点距离的信息,有助于模型学习到更准确的物体位置。
- CIoU损失则同时考虑了重叠面积、中心点距离和长宽比,可以更好地处理不同尺度和形状的物体。
2.3. Bag of specials
-
扩大感受野(Receptive Field Enhancement):
- 为了增强模型对上下文信息的捕捉能力,研究者们开发了一些模块来扩大网络的感受野。常见的模块包括空间金字塔池化(SPP)、自注意力(ASPP)和重复因子块(RFB)。
- SPP模块通过在不同大小的窗口上应用最大池化操作来整合多尺度的特征,从而扩大感受野。
- ASPP模块通过使用不同扩张率的空洞卷积来捕获多尺度的特征,进一步增强了模型对不同尺度物体的检测能力。
- RFB模块使用多个不同扩张率的空洞卷积来获得比ASPP更全面的空间覆盖。
-
引入注意力机制(Attention Mechanism):
- 注意力模块可以帮助模型集中关注图像的重要部分,提高特征的表达能力。常见的注意力模块包括通道注意力(如SENet)和逐点注意力(如SAM)。
- 通道注意力模块通过学习不同通道的重要性权重来增强特征表示。
- 逐点注意力模块则关注于图像的每个位置,通过学习空间注意力权重来突出重要的空间信息。
-
特征集成(Feature Integration):
- 特征集成是指将来自不同层的特征图进行融合,以提高模型对多尺度信息的利用。常见的特征集成模块包括SFAM、ASFF和BiFPN。
- SFAM通过SE模块对多尺度特征图进行通道级别的重新加权。
- ASFF使用softmax作为逐点级别的重新加权,然后添加不同尺度的特征图。
- BiFPN提出了多输入加权残差连接,用于执行尺度级别的重新加权,然后融合不同尺度的特征图。
-
激活函数的选择(Activation Function Selection):
- 激活函数对于神经网络的性能有着重要影响。研究者们一直在寻找更好的激活函数,以提高梯度传播效率并减少额外的计算成本。例如,ReLU、LeakyReLU、PReLU、Swish和Mish等激活函数都被提出来解决梯度消失问题。
-
后处理方法(Post-processing Methods):
- 在深度学习目标检测中,常用的后处理方法是NMS(非极大值抑制),它用于过滤掉重复检测同一物体的边界框,只保留置信度最高的候选边界框。
- 为了改进NMS,研究者们提出了软NMS、DIoU NMS等方法,这些方法考虑了物体遮挡和中心点距离等因素,以进一步提高检测的准确性。
3.1 Selection of architecture
-
输入网络分辨率:
- 输入分辨率是指输入图像在网络中处理时的大小。较高的分辨率可以提供更多的细节信息,有助于检测和识别小物体。然而,高分辨率也会增加计算负担和内存需求。YOLOv4通过实验确定了最佳的输入分辨率,以平衡检测精度和小物体识别能力。
-
卷积层数量:
- 卷积层的数量决定了网络的深度,影响模型对特征的提取能力。更多的卷积层意味着模型可以学习更复杂的特征表示,但同时也可能导致梯度消失或梯度爆炸问题,影响训练稳定性。YOLOv4在选择卷积层数量时,需要在模型深度和训练效率之间找到平衡点。
-
参数数量:
- 参数数量是指网络中所有可训练参数的总数,它直接关联到模型的容量。参数越多,模型的表达能力越强,但也可能需要更多的数据来训练,以避免过拟合。YOLOv4的设计需要在保持模型准确性的同时,控制参数数量,以确保模型的泛化能力和训练效率。
-
层输出数量:
- 层输出数量指的是每个卷积层产生的特征图数量。这影响模型能够捕捉的特征多样性和复杂性。更多的层输出可以提供更丰富的信息,有助于提高检测精度,但也会增加计算成本。YOLOv4在设计时需要权衡层输出数量和实时性能的需求。
-
骨干网络的选择:
- 骨干网络是目标检测模型中用于特征提取的预训练网络。YOLOv4选择了CSPDarknet53作为骨干网络,因为它在目标检测任务上表现出了比CSPResNeXt50更好的性能。CSPDarknet53具有更深的网络结构和更大的感受野,这有助于提高对小物体和复杂场景的检测能力。
-
额外模块的选择:
- 额外模块,如SPP和PAN,用于增强网络的特征提取和集成能力。SPP模块通过不同大小的池化操作来捕获多尺度信息,而PAN模块则通过自适应地重权重不同层的特征来提高特征的表达能力。这些模块的引入有助于提升YOLOv4在复杂背景和小物体上的检测性能。
-
最终架构的确定:
- 在综合考虑了上述所有因素之后,YOLOv4采用了CSPDarknet53作为骨干网络,SPP模块来增强感受野,PAN模块进行特征集成,以及YOLOv3的头部进行目标检测。这种架构的选择旨在实现高精度的目标检测,同时保持模型的实时性能。
3.2 Selection of BoF and BoS
Bag of Freebies (BoF)
-
激活函数(Activations):
- 论文考虑了多种激活函数,如ReLU、leaky-ReLU、parametric-ReLU、ReLU6、SELU、Swish和Mish。这些激活函数有助于解决梯度消失问题,提高网络的非线性表达能力。
- 由于PReLU和SELU训练难度较大,而ReLU6主要设计用于量化网络,因此在候选激活函数列表中排除了这些选项。
-
损失函数(Bounding box regression loss):
- 论文比较了多种用于边界框回归的损失函数,包括MSE、IoU、GIoU、CIoU、DIoU等。这些损失函数帮助模型更准确地预测物体的位置和大小。
- CIoU损失考虑了重叠面积、中心点距离和长宽比,提供了更好的收敛速度和准确性。
-
数据增强(Data augmentation):
- 论文采用了CutOut、MixUp、CutMix等数据增强技术,这些方法通过混合和变换训练图像来提高模型的泛化能力和对遮挡的处理能力。
-
正则化方法(Regularization method):
- 论文选择了DropBlock作为正则化方法,它通过在特征图中创建随机缺失区域来增加模型的鲁棒性。
-
归一化方法(Normalization):
- 论文考虑了多种归一化方法,如Batch Normalization、Filter Response Normalization等。由于YOLOv4专注于单GPU训练,因此排除了需要多GPU同步的归一化方法。
Bag of Specials (BoS)
-
特殊激活函数(Special Activations):
- 论文比较了LReLU、Swish和Mish等激活函数对模型性能的影响。Mish激活函数因其在实验中表现出色而被选用。
-
特殊模块(Special Modules):
- 论文选择了SPP-block、SAM-block、PAN path-aggregation block等模块,这些模块通过增强特征的上下文信息和多尺度信息来提升检测性能。
- DIoU-NMS是一种后处理方法,它在NMS中加入了物体中心点距离的信息,以改善对重叠物体的检测。
3.3. Additional improvements
-
Mosaic数据增强:
- Mosaic数据增强是一种创新的技术,它通过将四张不同的训练图像拼接成一个大图像,从而在训练时为模型提供更丰富的上下文信息。这种方法不仅可以增加模型对不同场景的适应性,还能提高模型对遮挡和异常情况的处理能力。通过这种方式,模型能够在一个训练批次中同时学习到多种不同情境下的物体特征,从而提高泛化能力。
-
自对抗训练(SAT):
- 自对抗训练是一种新型的数据增强方法,它通过在训练过程中对输入图像进行扰动来增强模型的鲁棒性。在SAT的第一阶段,模型会生成对抗性图像,使得模型在这些图像上的表现变差,从而迫使模型学习到更深层次的特征表示。在第二阶段,模型在这些扰动后的图像上进行正常的训练,以提高对真实场景中可能出现的各种变化的适应性。
-
优化超参数选择:
- 超参数优化是提高模型性能的关键步骤。YOLOv4使用遗传算法来自动搜索最优的超参数设置。遗传算法通过模拟自然选择的过程,迭代地生成和评估不同的超参数组合,从而找到最佳的设置。这种方法可以大大减少手动调整超参数的工作量,并可能发现人类难以通过直觉找到的最优解。
-
修改现有方法:
- 为了使YOLOv4更适合单GPU训练,作者对一些现有的网络结构和模块进行了修改。例如,SAM模块从空间注意力机制改为逐点注意力机制,这样可以减少计算量并提高效率。PAN模块中的快捷连接被修改为拼接操作,这有助于更好地整合不同层级的特征。
-
Cross mini-Batch Normalization (CmBN):
- CmBN是一种改进的归一化方法,它在单个批次内的多个小批量之间进行归一化统计,而不是在单个小批量内进行。这种方法可以减少内部协变量偏移,同时保持小批量统计的稳定性。CmBN有助于提高模型在单GPU上的训练效率和稳定性,尤其是在小批量大小较小的情况下。
-
消除网格敏感性:
- 在YOLOv3中,物体的坐标是通过一个与网格相关的函数来计算的,这可能导致模型对物体位置的检测受到网格大小的影响。YOLOv4通过修改坐标计算公式,消除了这种网格敏感性,使得模型能够更准确地检测物体,无论它们出现在图像的哪个位置。
4. Experiments
实验设置: 论文首先描述了用于评估模型性能的数据集,包括ImageNet(用于图像分类)和MS COCO(用于目标检测)。 论文详细说明了实验中使用的默认超参数设置,例如学习率、批次大小、训练步数、权重衰减等。 论文还提到了使用遗传算法来优化超参数,以及在训练过程中使用的不同数据增强技术。
不同特性对分类器训练的影响: 论文研究了不同特性,如数据增强、标签平滑和激活函数,对分类器训练过程的影响。 通过实验,论文展示了CutMix、Mosaic数据增强和标签平滑等技术如何提高分类器的准确性。 论文还比较了不同激活函数对分类器性能的影响,并选择了最佳的激活函数。
结论:通过引入CutMix和Mosaic数据增强技术以及标签平滑技术,分类器的准确性得到了显著提升。特别是,Mish激活函数在实验中表现出色,被选为辅助激活函数。 意义:这些结论表明,通过精心选择和组合数据增强和正则化技术,可以有效提高模型对图像分类任务的性能。
不同特性对检测器训练的影响: 论文进一步探讨了BoF和BoS技术对检测器训练过程的影响。 通过实验,论文展示了消除网格敏感性、使用CIoU损失、CmBN、DropBlock正则化和自对抗训练等技术如何提高检测器的准确性。 论文还比较了不同BoS组件,如SPP、SAM和PAN模块,对检测器性能的影响。
结论:消除网格敏感性、CIoU损失、CmBN、DropBlock正则化和自对抗训练等BoF技术,以及SPP、SAM和PAN等BoS组件,都对提高检测器的准确性有积极作用。 意义:这些发现证实了这些技术在提升目标检测器性能方面的有效性,尤其是在提高模型对边界框定位精度和特征表达能力方面。
不同骨干网络和预训练权重的影响: 论文分析了不同骨干网络模型对检测器准确性的影响,并比较了使用不同预训练权重的检测器性能。 论文发现,尽管CSPResNeXt50在分类任务上表现更好,但CSPDarknet53在目标检测任务上更为合适。
结论:尽管CSPResNeXt50在图像分类任务上具有更高的准确性,但CSPDarknet53在目标检测任务上表现更好,尤其是在使用BoF和BoS技术后。 意义:这一结论强调了在选择骨干网络时需要考虑特定任务的需求,同时也表明了预训练权重对检测器性能的影响。
不同小批量大小对检测器训练的影响: 论文研究了不同小批量大小对检测器性能的影响,并发现在使用BoF和BoS技术后,小批量大小对检测器性能的影响变得不那么显著。 这意味着YOLOv4可以在不同的硬件配置下保持稳定的性能,而不需要过度依赖于大规模的GPU资源。
与其他目标检测器的比较: 论文将YOLOv4与其他最先进的目标检测器进行了比较,包括在MS COCO数据集上的速度和准确性。 论文提供了详细的比较表格,展示了YOLOv4在不同的GPU架构上的性能,以及与其他模型的比较结果。
结论:YOLOv4在MS COCO数据集上实现了43.5%的平均精度(AP),在保持实时速度(约65 FPS)的同时,超过了其他最先进的目标检测器。 意义:这一结论证明了YOLOv4在目标检测领域的领先地位,尤其是在实现高精度检测的同时保持实时性能的能力。
5. Results
-
性能比较:
- YOLOv4的性能与其他最先进的目标检测器进行了比较,并通过图表(Figure 8)展示了结果。
- YOLOv4在Pareto最优性曲线上表现出色,这意味着它在不牺牲速度的情况下实现了高准确性,或者在保持高速度的同时提供了高准确性。
-
跨不同GPU架构的测试:
- 为了验证YOLOv4的广泛适用性,作者在不同架构的GPU上运行了YOLOv4,并与其他方法进行了比较。
- 测试涵盖了三种常见的GPU架构:Maxwell、Pascal和Volta,这些架构代表了不同代的NVIDIA GPU技术。
-
具体的GPU型号:
- Maxwell架构:使用了GTX Titan X (Maxwell) 或 Tesla M40 GPU进行比较。
- Pascal架构:使用了Titan X (Pascal)、Titan Xp、GTX 1080 Ti 或 Tesla P100 GPU进行比较。
- Volta架构:使用了Titan Volta 或 Tesla V100 GPU进行比较。
-
性能比较表格:
- 作者提供了三个表格(Table 8、Table 9和Table 10),分别列出了在上述不同GPU架构上YOLOv4与其他目标检测器的帧率(FPS)比较结果。
- 这些表格为读者提供了详细的性能数据,可以用来评估YOLOv4在不同硬件上的性能和效率。
6. Conclusions
-
先进的目标检测器:
- YOLOv4被描述为一个在速度(FPS)和准确性(MS COCO AP50…95和AP50)方面都优于所有现有替代方案的最新目标检测器。
-
广泛的可用性:
- YOLOv4能够在具有8-16 GB VRAM的传统GPU上进行训练和使用,这使得它能够被广泛应用于各种不同的计算环境中。
-
单阶段锚点基础检测器的概念:
- 该模型证明了单阶段锚点基础检测器的原始概念是可行的,这种类型的检测器因其速度快和准确性高而受到青睐。
-
大量特性的验证和选择:
- 研究者们验证了大量的特性,并且从中选择了一些用于提高分类器和检测器准确性的特性。
-
未来研究的最佳实践:
- 这些被选中的特性不仅提升了YOLOv4的性能,而且还可以作为未来研究和发展中的最佳实践。