YOLOv4 学习笔记

文章目录

  • 前言
  • 一、YOLOv4贡献和改进
  • 二、YOLOv4核心概念
  • 三、YOLOv4网络架构
  • 四、YOLOv4数据增强
  • 五、YOLOv4的损失函数
  • 总结


前言

在近年来的目标检测领域,YOLOv4的出现标志着一个重要的技术突破。YOLOv4不仅继承了YOLO系列快速、高效的特点,还引入了一系列创新的技术和策略,显著提升了目标检测的性能。本文将简要介绍YOLOv4的主要贡献和改进,核心概念,详细的网络架构,以及其在数据增强和损失函数方面的创新。通过这一系列的分析,我们可以更好地理解YOLOv4在目标检测领域的重要性及其应用潜力。
YOLOv4 学习笔记_第1张图片


一、YOLOv4贡献和改进

YOLOv4的贡献和改进可以从以下几个方面来梳理:

  1. 高效且强大的目标检测模型:

    • YOLOv4开发了一个高效且强大的目标检测模型,使得使用1080 Ti或2080 Ti GPU的用户能够训练出一个快速且准确的目标检测器。
  2. 网络架构的选择和优化:

    • YOLOv4采用了CSPDarknet53作为其主干网络(Backbone),利用SPP(Spatial Pyramid Pooling)和PAN(Path Aggregation Network)作为其颈部(Neck),以及YOLOv3作为其检测头部(Head)。
    • 为了满足目标检测的特殊要求,如检测多个小尺寸物体、覆盖更大的输入网络尺寸和更多的参数来检测单个图像中不同大小的多个对象,CSPDarknet53被证明是最优的选择。
  3. 训练改进技术的影响验证:

    • YOLOv4测试了各种训练改进技术对于分类器在ImageNet数据集上的准确性和目标检测器在MS COCO数据集上的准确性的影响。
  4. 使用的关键技术(BoF和BoS):

    • YOLOv4利用了一系列的“Bag of Freebies (BoF)”和“Bag of Specials (BoS)”方法来提高性能。这些包括CutMix和Mosaic数据增强、DropBlock正则化、类标签平滑、Mish激活函数、交叉阶段部分连接(CSP)、多输入加权残差连接(MiWRC)、CIoU损失、自适应训练(SAT)、消除网格敏感性、使用多个锚点对单一真实框、余弦退火调度器、最优超参数、随机训练形状、SPP块、SAM块、PAN路径聚合块和DIoU-NMS。

这些改进和创新使得YOLOv4在目标检测领域具有显著的性能提升,特别是在速度和准确度上的平衡,使其成为目标检测领域的一个重要里程碑。

二、YOLOv4核心概念

  1. CSPDarknet53 主干网络(Backbone):

    • CSPDarknet53 是YOLOv4的主干网络,专为提高网络的学习能力和速度而设计。它结合了Darknet53的结构和Cross Stage Partial Network (CSPNet)的优化策略。CSPNet通过分割特征图并在交叉阶段合并,减少了计算量并提高了特征图的传播效率。
  2. SPP和PAN 颈部(Neck):

    • SPP(Spatial Pyramid Pooling) 块用于增加感受野,分离最重要的上下文特征,且对网络操作速度影响较小。
    • PAN(Path Aggregation Network) 用于改进特征信息的传递,通过不同层次的特征融合,提升了检测性能,特别是在小尺寸目标检测方面。
  3. YOLOv3 检测头(Head):

    • YOLOv4沿用了YOLOv3的检测头。这个头部设计用于生成预测框(bounding boxes),并且计算每个框的类别概率和对象置信度。
  4. Bag of Freebies (BoF) 和 Bag of Specials (BoS):

    • BoF 用于在不增加推理成本的情况下提高训练过程的效果。例如,Mosaic数据增强、DropBlock正则化、CIoU损失等。
    • BoS 指的是在推理阶段增加少量计算成本以显著提升检测性能的技术。这包括Mish激活函数、交叉阶段部分连接(CSP)、多输入加权残差连接(MiWRC)等。
  5. 数据增强和正则化技术:

    • YOLOv4引入了新的数据增强方法如Mosaic和自适应训练(SAT),以及DropBlock作为正则化方法。Mosaic通过混合四个训练图像来检测对象,而SAT则在两个前向后向阶段中改变原始图像。
  6. 超参数优化和训练策略:

    • YOLOv4在设计时考虑了单GPU训练的适应性,包括使用遗传算法选择最优超参数,以及对某些现有方法进行改进,使其更适合高效训练和检测。

三、YOLOv4网络架构

YOLOv4的网络架构主要分为三个部分:主干网络(Backbone),颈部(Neck),和检测头(Head)。下面是对这三个部分的具体说明:

  1. 主干网络(Backbone):CSPDarknet53

    • CSPDarknet53 是YOLOv4的主干网络,构建在Darknet53的基础上,并引入了CSPNet的概念。这种结构旨在提高网络的学习能力和运行速度。
    • 它通过分割特征图并在交叉阶段合并,减少了计算量并提高了特征图的传播效率。此外,CSPDarknet53含有29个卷积层(3x3),提供了725x725的大感受野和27.6M的参数量,这使得它适合作为检测器的主干网络。
  2. 颈部(Neck):SPP和PAN

    • SPP(Spatial Pyramid Pooling) 块位于主干网络之后,用于增加感受野,分离最重要的上下文特征,且对网络操作速度影响较小。SPP通过池化操作来聚集不同尺度的特征,增强模型对不同尺寸目标的适应性。
    • PAN(Path Aggregation Network) 用于改进特征信息的传递。PAN结构通过融合不同层次的特征来提升检测性能,特别是在小尺寸目标检测方面。它通过聚合不同层次的特征图,增强了特征的丰富性和多样性。
  3. 检测头(Head):YOLOv3

    • YOLOv4的检测头沿用了YOLOv3的设计。这个头部设计用于生成预测框(bounding boxes),并计算每个框的类别概率和对象置信度。它包含了一系列的卷积层,用于最终的对象检测和分类。
    • YOLOv3头部的优势在于其简洁高效的设计,能够在单个网络中同时处理对象的检测和分类。

整体来看,YOLOv4的网络架构在保证高效性的同时,通过这些创新的设计改进了目标检测的准确率和速度,尤其是对小尺寸目标的检测能力。

四、YOLOv4数据增强

YOLOv4在数据增强方面引入了一些创新技术,这些技术显著提高了模型在不同环境和条件下的泛化能力和准确性。主要的数据增强方法包括:

  1. Mosaic 数据增强:

    • Mosaic 是一种新颖的数据增强方法,它将四个训练图像混合在一起,形成一个单独的合成图像。这种方法不仅增加了训练数据的多样性,还允许模型学习在不同上下文中检测对象。
    • 通过Mosaic增强,模型能够在每层处理来自四个不同图像的激活统计数据,这有助于减少对大型mini-batch的需求。
  2. Self-Adversarial Training (SAT):

    • 自适应训练(SAT) 是另一种新颖的数据增强技术,它在两个前向后向阶段中操作。在第一阶段,神经网络修改原始图像而不是网络权重,相当于对自己执行对抗性攻击,通过修改原始图像来创建不存在目标对象的假象。
    • 在第二阶段,神经网络被训练在这种修改后的图像上检测对象。这种方法增强了模型对于对抗性攻击和异常条件下的鲁棒性。
  3. CutMix 和 MixUp:

    • 虽然YOLOv4的论文中重点强调了Mosaic,但在目标检测的训练中,CutMixMixUp 也是常用的数据增强技术。这些技术通过组合来自不同图像的部分来生成新的训练样本,增强模型对于不同场景和对象组合的学习能力。
  4. 随机训练形状(Random Training Shapes):

    • YOLOv4还使用了随机训练形状的方法,这意味着在训练过程中,输入图像的尺寸会不断变化。这种方法有助于模型更好地适应不同尺寸的输入,提高对不同分辨率输入的适应性。

这些数据增强技术的共同目标是提高模型在现实世界复杂和多变环境中的性能和鲁棒性,尤其是在处理不同尺寸、不同背景和不同环境下的目标检测任务时。通过这些方法,YOLOv4能够有效地提升对各种场景的适应能力和检测准确率。

五、YOLOv4的损失函数

YOLOv4的损失函数是其目标检测性能的关键组成部分,主要包括三个方面:置信度损失、类别损失和框坐标损失。下面详细介绍这些损失函数的原理和公式。

  1. 置信度损失(Confidence Loss):

    • 置信度损失用于评估模型预测的bounding box是否包含对象,并衡量其预测的准确性。YOLOv4使用交叉熵损失来执行这一任务。
    • 公式通常表示为:
      Confidence Loss = − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j log ⁡ ( C ^ i j ) + λ n o o b j 1 i j n o o b j log ⁡ ( 1 − C ^ i j ) \text{Confidence Loss} = -\sum_{i=0}^{S^2}\sum_{j=0}^{B} 1_{ij}^{obj} \log(\hat{C}_{ij}) + \lambda_{noobj}1_{ij}^{noobj} \log(1 - \hat{C}_{ij}) Confidence Loss=i=0S2j=0B1ijobjlog(C^ij)+λnoobj1ijnoobjlog(1C^ij)
      其中, S 2 S^2 S2 表示网格单元的数量, B B B 表示每个网格单元预测的边界框数量, 1 i j o b j 1_{ij}^{obj} 1ijobj 是一个指示器,如果边界框 j j j 在网格单元 i i i 中包含对象则为1,否则为0; C ^ i j \hat{C}_{ij} C^ij 是模型预测的边界框包含对象的置信度; λ n o o b j \lambda_{noobj} λnoobj 是不包含对象的边界框的权重。
  2. 类别损失(Class Loss):

    • 类别损失用于评估模型在分类预测的准确性。YOLOv4同样使用交叉熵损失来计算类别损失。
    • 公式通常表示为:
      Class Loss = − ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s p i j ( c ) log ⁡ ( p ^ i j ( c ) ) \text{Class Loss} = -\sum_{i=0}^{S^2}\sum_{j=0}^{B} 1_{ij}^{obj} \sum_{c \in classes} p_{ij}(c) \log(\hat{p}_{ij}(c)) Class Loss=i=0S2j=0B1ijobjcclassespij(c)log(p^ij(c))
      其中, p i j ( c ) p_{ij}(c) pij(c) 是真实标签中类别 c c c 在边界框 j j j 和网格单元 i i i 的概率, p ^ i j ( c ) \hat{p}_{ij}(c) p^ij(c) 是模型预测的对应概率。
  3. 框坐标损失(Bounding Box Loss):

    • YOLOv4引入了CIoU损失(Complete Intersection over Union Loss)来替代传统的IoU损失,用于更精确地优化预测框的坐标。
    • CIoU损失考虑了边界框重叠区域、中心点距离和长宽比,提供了更全面的框坐标回归。
    • 公式表示为:
      CIoU Loss = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v \text{CIoU Loss} = 1 - \text{IoU} + \frac{\rho^2(b, b_{gt})}{c^2} + \alpha v CIoU Loss=1IoU+c2ρ2(b,bgt)+αv
      其中,IoU是交集与并集之比, ρ ( b , b g t ) \rho(b, b_{gt}) ρ(b,bgt) 是预测框 b b b 和真实框 b g t b_{gt} bgt 中心点的欧几里得距离, c c c 是包含两个框的最小闭合区域的对角线长度, v v v 是长宽比的一致性度量, α \alpha α 是用于平衡不同项的权重系数。

这些损失函数共同构成了YOLOv4的损失函数,使模型在进行目标检测时能够同时考虑到准确性、置信度和类别预测。通过这样的设计,YOLOv4能够在保持高速处理的同时,提高检测的准确度和鲁棒性。


总结

经过对YOLOv4的深入分析,我们可以看到,它在目标检测技术上取得了显著的进步。YOLOv4不仅提高了检测速度和准确率,还通过其独特的网络架构和创新的训练策略,大大提升了模型的泛化能力。特别是在数据增强和损失函数设计上,YOLOv4展示了其在处理复杂和多样化场景中的强大能力。总的来说,YOLOv4的发展为实时目标检测设置了新的标准,为未来的研究和应用提供了丰富的启示和可能性。

你可能感兴趣的:(YOLO系列,YOLO,学习,笔记)