Bootstrap

Yolo检测系列的每一次更新与迭代

YOLO 系列检测模型自 2015 年推出以来,不断发展和演进,在计算机视觉领域取得了显著成就。

YOLOv1

YOLOv1 将目标检测问题视为回归问题,通过单个卷积神经网络实现端到端的训练。其网络结构借鉴了 GoogLeNet,使用 1x1 卷积层加 3x3 卷积层替代 inception module。网络将输入图像划分成 7x7 的网格,每个网格预测两个边界框及类别信息。在损失函数方面,未采用传统的平方和误差损失,而是①对边界框坐标预测损失和未包含物体的边界框概率损失施加不同权重,②同时为缓和大尺寸和小尺寸框在损失计算中的不平衡问题,将框的宽度和高度取平方根代替原本的尺寸(非线性压缩)。优点是检测速度快,基础网络可以跑到 45fps,小版本 FastYOLO 每秒处理速度达 155 帧,能基于整张图片信息进行预测,学到的图片特征更为通用。但也存在一些问题,比如定位不够准确,和基于 region proposal 类的方法相比找回率更低。

非线性压缩

在物体检测任务中,大尺寸和小尺寸框在损失计算中的不平衡问题主要来源于边界框的尺寸差异。当使用原始的宽度和高度计算损失时,较大框的损失值会远大于小框的损失值,导致模型在训练时更关注大框,从而忽略小框的学习,影响小物体的检测精度。

为了解决这个问题,将框的宽度和高度取平方根,主要有以下几个原理和优点:

  1. 缩小尺寸差异: 通过对宽度和高度取平方根,可以有效地减小大尺寸框与小尺寸框之间的差距。例如,宽度为100的框与宽度为1的框,损失的差异很大,而取平方根后,这个差异会减小,促进模型更平衡地关注不同尺寸的框。

  2. 非线性压缩: 平方根操作是一种非线性变换,它将大尺寸的数值压缩得更厉害,而对小尺寸的数值影响较小。这种处理方式可以使得损失计算对各种尺寸框的反应更加均匀,降低了大尺寸框对损失计算的主导影响。

  3. 改进梯度更新: 在损失计算中,较小的损失值意味着相应的框在训练中会受到更大的关注。通过平方根变换,较小框的损失值在总损失中占有相对重要的比例,从而使得模型在训练过程中能更有效地学习到小物体的特征。

  4. 增强模型的泛化能力: 通过均衡大尺寸和小尺寸框的损失计算,模型能更好地适应不同尺寸的物体,从而提升整体的检测性能,尤其是在复杂场景下的小物体检测。

总体来说,这种方法的核心思想是通过对尺寸的非线性处理,缓和了不同尺寸框在损失计算中造成的不平衡,使得模型能够更全面地学习各种尺寸物体的特征。

YOLOv2 

YOLOv2 在第一个版本的基础上做了不少改进。①首先是引入了批量归一化(Batch Normalization),加上之后能防止过拟合并加速收敛,使模型的平均准确率提升了 2%。进行高分辨率训练,②将预训练分成两步,先用 224×224 的输入从头开始训练网络,再将输入调整到 448×448 继续训练,最后在检测数据集上 fine-tuning,这种方法提高了模型在高分辨率图像上的检测性能,使平均准确率提升了 4%。③采用新网络和跳跃结构,性能更好的网络加上 passthrough 层,将浅层特征与深层特征融合,提升了检测效果。多尺度训练也为模型带来了约 1 个点的提升。此外,④YOLOv2 还引入了 anchor 机制,每个网格对应 5 个 box,且类别可以不同,通过对数据集的聚类分析得到先验的宽高,提高了目标的定位准确率。

Batch Normalization

引入批量归一化(Batch Normalization, BN)在深度学习模型中具有多种优点,尤其是能够防止过拟合并加速收敛,其原因主要体现在以下几个方面:

  1. 稳定分布: BN通过在每个小批量上对激活值进行归一化,使得每层的输入分布在训练过程中保持相对稳定。这种稳定性减小了内部协变量偏移(internal covariate shift),使得后续层的训练更容易和更快。

  2. 加快收敛速度: 由于每层的输入被归一化,模型对学习率的选择变得更加宽容。可以使用更大的学习率,这样在训练初期,模型参数可以更快地更新,从而加速收敛。

  3. 正则化效果: BN在一定程度上引入了噪声,因为每次计算均值和方差时都依赖于一个小批量的数据。这种噪声类似于Dropout等正则化技术,能帮助模型在训练时更好地泛化,从而降低过拟合的风险。

  4. 减少对初始化的敏感性: BN的引入使得模型对权重初始化的敏感性降低。因为归一化操作可以使得不同的初始权重导致的激活分布差异减小,进而使得模型在训练初期更加稳定。

  5. 激活函数的有效性: 由于激活值的范围被限制在一个合理的范围内,BN能够避免激活函数(如ReLU)饱和问题的出现,保持激活值在一个有效的范围内,有助于更有效地进行反向传播。

综合来看,批量归一化不仅提高了训练速度,还增强了模型的鲁棒性,减少了过拟合的风险。这使得BN成为深度学习模型中一种非常常用且有效的技术。

分步训练

模型多步训练的原因和意义可以从以下几个方面进行分析:

原因
  1. 复杂性管理: 逐步训练允许模型从简单到复杂逐渐学习。在初期使用较小的数据集和简单特征,可以帮助模型建立基本的特征表示,而不被复杂的样本干扰。

  2. 资源优化: 在大规模数据集和高分辨率输入的情况下,训练资源(计算时间和内存)可能非常消耗。通过多步训练,可以先在较小的输入上训练,节省资源,待模型稳定后再进行高分辨率训练。

  3. 避免过拟合: 在初期阶段,模型仅关注简单特征,有助于降低过拟合的风险。随后再进行复杂的特征学习,可以提高模型的泛化能力。

  4. 渐进式学习: 多步训练允许模型逐渐适应不同的任务和数据分布,使得学习过程更加平滑,模型能够更好地捕捉不同层次的信息。

意义
  1. 提高模型性能: 通过逐步训练,模型在每个阶段都能获得针对性的优化,从而在最终任务上(如检测或分类)实现更好的性能。

  2. 增强鲁棒性: 逐步训练可以提高模型对不同输入条件的适应性,尤其是在复杂环境中,对多尺度和多样本类型的鲁棒性有显著提升。

  3. 促进特征迁移: 在初始阶段学习的特征可以为后续更复杂的任务提供良好的基础,使得迁移学习更加有效。

  4. 易于调试与调整: 逐步训练可以帮助研究人员更容易地调试和优化模型。在每一步进行验证和调整,有助于发现潜在的问题并及时解决。

  5. 提升训练效率: 多步训练使得模型在不同阶段关注不同的特征和任务,从而提升了整体训练效率,避免了在高维空间中直接训练的复杂性。

  6. 适应多样化任务: 对于需要在不同数据集和任务上进行训练的模型,分阶段训练能够更好地满足多样化需求,使得最终模型更具通用性。

综上所述,多步训练为模型提供了一个灵活且有效的学习框架,使得在不同的学习阶段都能充分利用已有信息,从而提升模型的整体性能和适应能力。即便现在起回看,在chatGPT等大模型训练中依然采用此类方案,可见分步骤训练的重要性。

Residual Connections

ResNet(Residual Network)采用跳跃结构(skip connections 或 residual connections)来连接层,这种设计对模型性能的提升有几个关键原因:

  1. 缓解梯度消失问题: 在深层神经网络中,梯度往往在反向传播过程中逐渐消失,导致模型难以训练。跳跃连接使得梯度可以直接通过较短的路径传递,从而缓解了这一问题,尤其是在网络非常深的情况下。

  2. 促进特征重用: 跳跃结构允许后面的层访问前面的层的特征,使得模型能够利用多层次的信息。这种特征重用可以增强模型的表达能力,使其能够更好地捕捉复杂的特征。

  3. 简化学习目标: 通过引入跳跃连接,网络实际上在学习残差(即输入和输出之间的差异)而非直接学习目标输出。这种学习方式通常更容易,因为在很多情况下,学习残差比直接学习原始目标更简单。

  4. 改善收敛速度: 跳跃连接提供了更短的路径来传播信息,使得模型更容易收敛。实验表明,使用ResNet结构的网络在训练过程中通常收敛得更快,且性能更佳。

  5. 提高模型深度: ResNet允许构建更深的网络,而不会显著增加训练的复杂性或导致性能下降。深层网络可以学习到更复杂的特征,进一步提升模型的表现。

  6. 减少过拟合风险: 跳跃结构能够增强模型的泛化能力,降低在训练集上的过拟合风险,因为它引入了多样化的信息流和学习路径。

  7. 促进模型的可解释性: 跳跃连接有助于分析和理解模型的决策过程。通过观察输入到输出的残差,研究人员可以更容易地识别哪些特征对决策起到了关键作用。

综上所述,ResNet的跳跃结构通过缓解梯度消失、促进特征重用、简化学习目标等方式,使得模型在训练时表现得更优,能够有效提高深层神经网络的性能。

Anchor

Anchor机制在物体检测任务中是用于生成候选区域的一种方法,主要通过在特定位置生成多个固定形状和大小的框(即anchors),以便于检测不同尺寸和形状的物体。以下是Anchor机制的主要特点和优势:

Anchor机制的原理
  1. 预定义锚框: 在每个特征图的空间位置上,预定义多个不同尺寸和纵横比的锚框(anchors)。这些锚框是用来匹配输入图像中的物体的。

  2. 回归和分类: 模型通过对每个锚框进行分类和边界框回归,来预测该锚框是否包含物体及其精确的位置。这通常是在神经网络的输出层实现。

  3. 匹配策略: 在训练过程中,通过计算锚框与真实目标框的重叠度(如IoU),确定哪些锚框是真实的目标框(正样本)和背景(负样本),以此进行损失计算。

Anchor机制的优势
  1. 多尺度检测: Anchor机制允许模型同时关注多种尺度和纵横比的物体,从而提高对不同大小物体的检测能力。这种多样性使得模型能够适应复杂场景。

  2. 提高精度: 通过匹配预定义的锚框与真实物体,模型可以更准确地预测边界框的调整。这种设计提高了模型的检测精度,特别是在处理小物体或复杂形状时。

  3. 减少搜索空间: 由于预定义了锚框,模型不需要对每个像素进行预测,而是将关注点集中在锚框上,这样可以有效减少搜索空间,提高了检测效率。

  4. 提升训练效率: 通过将锚框与目标框的匹配策略结合,训练过程能够更加高效。模型可以快速学习到如何调整锚框以匹配真实物体。

  5. 灵活性: Anchor机制可以灵活调整锚框的数量、尺寸和纵横比,以适应不同的任务需求和数据集特性。这使得该机制在多种检测模型中得到广泛应用。

  6. 增强模型的泛化能力: 通过训练时使用的多样化锚框,模型能够更好地学习到不同物体的特征,从而提升在未见样本上的表现。

正负样本的确定
正样本
  • 通常定义为与真实物体框(ground truth)有较高重叠度的锚框,常用的重叠度标准是IoU(Intersection over Union)。
  • 一般来说,当锚框的IoU大于某个阈值(如0.5或0.7)时,该锚框被视为正样本。
负样本
  • 负样本是指与真实目标框没有或几乎没有重叠的锚框,通常IoU小于某个低阈值(如0.3)。
  • 对于那些既不是正样本也不是负样本的锚框,可以被视为中性样本,通常不参与训练。
处理样本不均衡

在训练过程中,正负样本的比例往往会严重不均衡,导致模型倾向于学习负样本。为了解决这个问题,可以采取以下措施:

  • 样本加权:给正样本和负样本分配不同的权重,增强模型对正样本的关注。例如,可以设置正样本的损失权重更高。

  • 欠采样/过采样:减少负样本的数量(欠采样)或增加正样本的数量(过采样),以平衡正负样本的比例。

  • 在线硬样本挖掘:在每次迭代中,仅使用那些最难分类的正样本和负样本,以提高训练效率和效果。

设计锚框

设计锚框是物体检测中的重要环节,可以通过以下几个步骤优化锚框的设计:

  • 确定尺寸和纵横比:根据数据集中的目标物体的大小和形状,选择合适的锚框尺寸和纵横比。可以通过统计分析目标框的尺寸分布来选择合适的锚框参数。

  • 多尺度锚框:在特征图的不同层级使用不同尺寸的锚框,以便更好地检测各种尺度的物体。通常会在高分辨率的特征图上使用小锚框,在低分辨率特征图上使用大锚框。

  • 锚框数量:根据模型复杂性和计算资源,合理设计锚框的数量。通常每个特征图的每个位置可以设置多个锚框(如9个),以捕捉不同形状和尺寸的物体。

  • 均匀分布:确保锚框在特征图上的分布均匀,以覆盖整个图像的各个区域,减少因锚框分布不均导致的漏检。

综上所述,Anchor机制通过有效地生成候选框,提高了物体检测模型的性能和效率,使其能够在复杂场景中更准确地识别和定位物体。

YOLOv3 

YOLOv3 采用全新的网络 darknet-53 来代替 YOLOv2 的 darknet-19,该网络更大但精度更高,同时仍足够快。借鉴 SSD 的多尺度检测思想,在三个不同尺度的特征图上进行预测,分别是 13×13、26×26 和 52×52。对于大物体在较小的特征图(13×13)上进行检测,对于小物体在较大的特征图(52×52)上进行检测,提高了对不同尺度物体的检测能力。②采用类似 FPN(Feature Pyramid Networks)的特征融合方式,将深层和浅层的特征图进行融合,充分利用了不同层次的特征信息,提高了模型的检测精度,尤其是对小物体的检测效果。③使用 K-Means 聚类算法得到 9 组锚点框,分别应用在不同尺度的特征图上,更好地适应了不同大小和形状的物体。④改用 logistic 回归函数进行分类,在训练期间采用二值交叉熵损失进行类别预测,且⑤提出了FocalLoss来解决正负例子不平衡的问题

多尺度预测

原理

  1. 不同特征图: 在卷积神经网络中,随着网络深度的增加,特征图的空间分辨率逐渐降低,但其特征表示的抽象程度逐渐提高。多尺度预测通过在不同层的特征图上进行检测,来捕捉不同尺度的物体。

  2. 多尺寸锚框: 对于每个特征图的位置,可以生成多个不同尺寸和纵横比的锚框(anchors)。这样,模型能够同时关注不同大小和形状的物体。

  3. 特征融合: 在多尺度预测中,可能会将来自不同层的特征进行融合,以增强对各种物体的识别能力。

优势

  • 提高对小物体的检测能力。
  • 增强模型的鲁棒性,适应不同场景和物体尺寸。

特征金字塔网络(FPN)

原理

  1. 特征金字塔: FPN通过构建特征金字塔来有效地利用不同层次的特征。网络的每一层都可以生成具有不同空间分辨率的特征图。

  2. 自下而上的路径: 采用自下而上的路径,从低层(高分辨率)特征到高层(低分辨率)特征。低层特征包含丰富的细节信息,而高层特征则更抽象。

  3. 横向连接: FPN在不同层之间添加横向连接,将低层特征与高层特征结合。通过这些连接,低层特征图(高分辨率)与高层特征图(低分辨率)进行融合,形成更丰富的特征表示。

  4. 多尺度输出: FPN最终生成一组特征图,这些特征图在多个尺度上进行预测,从而实现多尺度检测。

优势

  • 通过特征融合提高了对不同尺度物体的检测能力。
  • 使得模型能够同时利用细节丰富的低层特征和语义信息丰富的高层特征,从而提升整体性能。

FPN与多尺度预测的关系

  • 互补性: 多尺度预测可以被视为FPN的一种应用方式,FPN提供了一种有效的方法来实现多尺度特征的融合和输出。

  • 增强检测性能: FPN通过构建特征金字塔,提升了多尺度预测的效果,使得模型能够更全面地捕捉物体特征。

  • 在不同任务中的应用: 两者都广泛应用于物体检测、实例分割和语义分割等任务中,为模型提供了强大的特征表示能力。

总之,多尺度预测和FPN都是增强深度学习模型对不同尺寸物体处理能力的重要技术,它们的结合可以显著提高物体检测和分割任务的性能。

聚类得到anchor

通过K-Means聚类算法,可以有效地为你的物体检测任务生成合适的锚点框,从而提升模型对不同尺度物体的检测性能。调整K值和聚类过程中的参数可以帮助你找到最佳的锚点配置。

交叉熵代替logistic

主要有以下几个原因:

1. 多类别问题转化为多个二分类问题

  • 类别数不平衡: YOLOv3可以检测多类物体,但在训练过程中,某些类别的样本可能远少于其他类别。使用Logistic回归和二值交叉熵损失,可以将每个类别的分类问题视为一个独立的二分类问题,使得每个类别的训练更加灵活。

2. 适应性和鲁棒性

  • 适应小样本类别: 对于一些少见类别,二值交叉熵损失使得模型能够更加专注于这些类别的学习,提高对稀有类别的识别能力。

  • 简化优化: 将多分类问题转换为多个二分类问题,优化过程更加简单且稳定,避免了传统softmax分类中对样本数量的依赖。

3. 改善收敛速度和性能

  • 避免类别竞争: 使用Logistic回归函数,可以减少不同类别之间的竞争,允许模型独立地预测每个类别的存在与否。这种方法通常能加速模型的收敛。

  • 更好的特征表达: Logistic回归通过直接计算每个类别的概率,能够更好地利用特征,使得模型在不同类别上的预测更为精确。

4. 适用性强

  • 处理复杂场景: 在复杂的场景中,物体可能有重叠或混合,这使得多分类问题变得更加复杂。Logistic回归和二值交叉熵损失能够有效地处理这种不确定性,提高检测效果。

5. 易于实现

  • 模型结构简化: 使用Logistic回归和二值交叉熵损失可以简化模型的实现,使得训练和推理过程更加高效。

FocalLoss

Focal Loss的数学表达式通常为:

FL(pt)=−αt(1−pt)γlog⁡(pt)\text{FL}(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)FL(pt​)=−αt​(1−pt​)γlog(pt​)

其中:

  • ptp_tpt​ 是预测为正类(或者负类)的概率。
  • αt\alpha_tαt​ 是调节因子,用于控制正负样本的平衡(通常设置为0.25或0.75)。
  • γ\gammaγ 是聚焦参数,控制Focal Loss的聚焦程度,通常设置为2。

关键组成部分

  1. αt\alpha_tαt​: 这个调节因子可以帮助平衡正负样本的损失贡献。对于正类和负类,可以设置不同的权重,以应对类别不平衡的问题。

  2. (1−pt)γ(1 - p_t)^\gamma(1−pt​)γ: 这个项是Focal Loss的核心,它使得对易分类样本的损失进行抑制。当模型对样本的预测概率 ptp_tpt​ 越高(即越容易分类),这个项的值就越小,从而降低该样本对总损失的贡献。反之,对于难以分类的样本(ptp_tpt​ 较低),该项的值较大,从而增加了其损失贡献。

YOLOv4 

YOLOv4 验证了最新的 Bag-of-Freebies 和 Bag-of-Specials 在训练过程中的影响。①在模型结构方面,一个完整的网络模型一般包含输入部分、主干网络、瓶颈部分和检测头。YOLOv4 优化了一些最新提出的算法,如 CBN、PAN、SAM,使其可在一块 GPU 上训练。②在数据增强方面,使用了 Mosaic data augmentation(马赛克方法),将 4 张图像拼接在一起,使训练的泛化性更好;采用 Self-adversarial-training(SAT),通过引入噪声点来增加难度;使用 DropBlock,随机舍弃掉一个区域,泛化能力比 Dropout 更好;③采用 Label Smoothing(标签平滑),缓解过拟合,让网络别太自信;④损失函数对比了 GIOU、DIOU 最后使用了 CIOU⑤采用 DIOU-NMS,非极大值抑制的一种,不仅考虑了 IOU 还考虑了两个 BOX 中心点的距离,来决定是否删除一个框

数据增强

使用了多种数据增强技术,如 Mosaic 数据增强、CutMix 数据增强等。Mosaic 数据增强将四张图片拼接在一起进行训练,增加了数据的多样性和复杂度,提高了模型的泛化能力;CutMix 数据增强则是将两张图片的部分区域进行裁剪和拼接,进一步丰富了训练数据。

Label Smoothing

标签平滑是一种在深度学习中用于优化模型训练的技术。在分类任务中,传统的做法是将真实标签表示为独热编码(One - Hot Encoding)。例如,在一个有 C 个类别的分类任务中,对于某个属于第 k 类的样本,其对应的标签向量是一个长度为 C 的向量,其中第 k 个位置为 1,其余位置为 0。

而标签平滑的思想是,不将真实标签表示为这种绝对的独热编码形式,而是对其进行 “平滑” 处理。假设真实标签为 y,平滑后的标签为,平滑参数为(通常是一个较小的值,如 0.1)。对于一个样本的真实类别位置,其标签值从 1 变为,其余类别位置的标签值从 0 变为。

这样做的目的是让模型不要过度自信地学习到某个类别,即避免模型在训练过程中把某个类别预测概率强制推到接近 1,而其他类别概率接近 0。因为在实际情况中,即使给定一个样本属于某个类别,模型也应该考虑到存在一定的不确定性,其他类别也有很小的可能性。

IOU损失

  1. GIoU(Generalized Intersection over Union)
    • 定义和计算方式
      • IoU(Intersection over Union)是目标检测中常用的衡量预测框和真实框重叠程度的指标,计算公式为,即交集与并集的比值。GIoU 在 IoU 的基础上进行了扩展,其计算方式为,其中和分别是预测框和真实框,是能够同时包含和的最小闭包框。
    • 优点
      • 当预测框和真实框没有重叠时,IoU 的值为 0,此时梯度为 0,无法为模型提供有效的学习信号。而 GIoU 在这种情况下依然可以提供有效的梯度信息,因为它考虑了闭包框的面积,能够让模型知道预测框应该往哪个方向移动才能更好地覆盖目标,从而加快模型收敛速度。
    • 缺点
      • GIoU 只考虑了重叠面积和闭包框,没有考虑预测框和真实框的中心距离等因素。在一些场景下,比如预测框和真实框有重叠,但中心距离较远时,GIoU 不能很好地衡量预测框的质量。
  2. DIoU(Distance - IoU)
    • 定义和计算方式
      • ,其中是预测框和真实框中心点的欧式距离的平方,是能够同时包含预测框和真实框的最小闭包框的对角线长度。
    • 优点
      • 在 GIoU 的基础上,DIoU 考虑了预测框和真实框中心的距离因素。这使得在训练过程中,模型不仅会考虑重叠面积和闭包框,还会使预测框的中心更快地靠近真实框的中心,从而能够更快更准确地定位目标。例如,在一些目标检测任务中,当存在多个目标且目标位置较为密集时,DIoU 能够更好地引导模型优化预测框的位置。
    • 缺点
      • DIoU 虽然考虑了中心距离,但没有考虑预测框和真实框的宽高比等形状信息。在一些情况下,如预测框和真实框的宽高比差异较大时,DIoU 可能无法很好地评估预测框的质量。
  3. CIoU(Complete - IoU)
    • 定义和计算方式
      • ,其中,,和是真实框的宽和高,和是预测框的宽和高。
    • 优点
      • CIOU 在 DIoU 的基础上进一步考虑了预测框和真实框的宽高比因素,能够更全面地衡量预测框和真实框的匹配程度。通过引入宽高比的惩罚项,使得模型在训练过程中能够更好地学习到预测框的合适形状,提高目标检测的精度,尤其是对于形状不规则的目标有更好的检测效果。
    • 缺点
      • CIOU 的计算相对复杂,会增加一定的计算成本。不过,在实际应用中,这种计算成本的增加通常是可以接受的,因为它带来的精度提升更为重要。

NMS

NMS(非极大值抑制)基本原理


​​NMS 是目标检测中用于去除冗余检测框的重要后处理步骤。在目标检测算法中,一个目标可能会被多个检测框预测到。NMS 的基本思想是,对于一个类别,选择具有最高置信度得分的检测框,然后将与该框重叠度(通常用 IoU 衡量)较高的其他检测框抑制(删除或降低其置信度)。例如,在一个图像中有多个车辆被检测到,多个检测框可能都指向同一辆车,NMS 会根据这些框的 IoU 来筛选出最有可能代表车辆的检测框。

DIOU - NMS 的引入背景

传统的 NMS 仅基于 IoU 来判断检测框的冗余性,存在一定的局限性。在一些复杂的场景下,比如目标分布密集或者目标形状不规则,仅仅依靠 IoU 可能会导致错误地删除一些有用的检测框或者保留一些不太准确的检测框。例如,当两个目标距离很近,它们的检测框虽然 IoU 较高,但实际上是不同的目标;或者当一个目标的检测框形状比较特殊,与其他目标的检测框 IoU 计算可能不太合理。

DIOU - NMS 的计算和工作方式

DIOU - NMS 在判断是否抑制一个检测框时,除了考虑 IoU 之外,还考虑了两个检测框中心点的距离。它的计算方式是基于 DIOU(Distance - IoU)的概念。假设我们有两个检测框和,它们的中心点坐标分别为和,(这是两个中心点的欧式距离),同时考虑包含这两个框的最小闭包框的对角线长度。
​​​​​​​计算 DIOU 值。在 DIOU - NMS 中,会根据这个 DIOU 值来决定是否抑制检测框。具体来说,当 DIOU 值小于某个阈值时,就认为这两个检测框可能是不同的目标,不进行抑制;当 DIOU 值大于等于阈值时,才进行抑制操作。这样可以更准确地判断检测框是否冗余,尤其是在目标密集的场景下,能够更好地保留真实的目标检测框。

DIOU - NMS 的优势


更准确的目标筛选:在目标密集的场景下,DIOU - NMS 能够更准确地分辨出不同的目标。例如,在人群检测或者交通场景中的车辆排队检测中,由于目标之间的距离较近,传统 NMS 可能会将多个目标误判为一个目标而进行抑制,DIOU - NMS 通过考虑中心点距离可以有效避免这种情况。
更好地适应形状不规则的目标:对于形状不规则的目标,其检测框的 IoU 计算可能不能很好地反映真实的重叠情况。DIOU - NMS 通过加入中心点距离因素,可以更全面地评估检测框之间的关系,从而更合理地进行抑制操作,提高目标检测的准确性。

YOLOv5 

YOLOv5 的 backbones 采用 CSPDarkNet 结构,主要结构思想体现在 C3 模块。PAN-FPN 采用双流的 FPN,使用了 C3 模块,同时也使用了 SPPF 模块。

PAN-FPN

PAN-FPN 中采用的双流 FPN 结构,是一种结合了自顶向下和自底向上的双向特征融合结构,具体样子如下:

  1. 自顶向下路径(Top-down Path)
    • 特征提取:从骨干网络(Backbone)输出的不同层次的特征图开始,比如常见的骨干网络可能会输出多个不同尺度的特征图,这些特征图具有不同的分辨率和语义信息。高层的特征图具有较强的语义信息,但分辨率较低,对目标的位置信息表达不够精确。
    • 上采样操作:对高层的特征图进行上采样,使其分辨率逐渐增大,以便与低层的特征图进行融合。上采样的方法可以是最近邻插值、双线性插值等。通过上采样,高层特征图的语义信息被传播到低层,增强了低层特征图的语义表达能力。
    • 特征融合:将上采样后的高层特征图与对应的低层特征图进行融合。融合的方式可以是简单的逐元素相加(element-wise addition)或者是通过卷积操作进行融合,让网络学习如何更好地结合不同层次的特征。这样,低层特征图既保留了原始的高分辨率信息,又获得了高层特征图的语义信息,有利于对不同尺度的目标进行检测。
  2. 自底向上路径(Bottom-up Path)
    • 特征传递:与自顶向下路径相反,自底向上路径是将低层的特征图传递到高层。低层的特征图具有较高的分辨率和丰富的位置信息,但语义信息相对较弱。这些特征图经过一系列的卷积操作或者其他处理后,被传递到更高层。
    • 增强语义:在传递的过程中,低层的位置信息被逐渐融合到高层的特征图中,增强了高层特征图对目标位置的感知能力。同时,由于经过了卷积等操作的处理,低层特征图的语义信息也得到了一定程度的增强,使得高层特征图在具有强语义信息的同时,也能更好地定位目标。
  3. 特征融合节点:在双流 FPN 的每个融合阶段,都会有一个特征融合节点,用于将自顶向下和自底向上两个路径传递过来的特征图进行合并。这种合并操作可以进一步增强特征的表达能力,使得最终的特征图既包含丰富的语义信息,又具有准确的位置信息,从而提高目标检测的准确率。

总的来说,YOLOv5 的 PAN-FPN 采用的双流 FPN 结构通过双向的特征传递和融合,充分利用了骨干网络输出的不同层次的特征图,有效地解决了目标检测中不同尺度目标的检测问题,提高了模型的检测性能。

SPP与SPPF

(未完待续)

YOLOv6 

YOLOv6 在 backbone 上引入了 RepVGG 的结构,并且基于硬件又进行了改良,提出了效率更高的 EfficientRep。YOLOv6 的主要贡献和改进还包括技术创新与优化,如提出两种可重参数化的 backbones 和 necks,引入高效的解耦头部设计,采用混合通道策略;标签分配策略上,引入 Task Alignment Learning(TAL)作为默认的标签分配策略,提供更稳定的训练和更高的准确性;对分类和回归损失函数进行了详细的探索和优化,最终选择了 VFL 作为分类损失函数,以及对于不同模型尺寸,选择了最优的 IoU 系列损失函数;性能提升方面,在保持高精度的同时,显著提高了检测速度。

YOLOv7 

YOLOv7 将模型重参数化引入到网络架构中,重参数化这一思想最早出现于 REPVGG 中。YOLOv7 中提出的一个新的网络架构 E-ELAN,使用 expand、shuffle、merge cardinality 来实现在不破坏原有梯度路径的情况下不断增强网络学习能力。在模型缩放方面,对于级联的模型,当分支数(深度)变化时,concat 后,紧接在 concat 上的计算单元的输入通道数(宽度)也将变化,因此提出了新的复合模型缩放方法。发现 RepConv 中的 identity 连接破坏了 ResNet 中的残差和 Denset 中的级联,提出使用无 identity 连接的 RepConv(RepConvN)来设计网络架构;提出了一种新的标签分配方法,称为由粗到细引导标签分配(coarse-to-fine lead guided label assignment);使用 EMA 模型作为最终的推理模型。

YOLOv8 

YOLOv8 有多个方面的升级。用户友好的 API(命令行 + Python),更快更准确,同时支持目标检测、实例分割和图像分类三种任务,可扩展到以前所有的版本。新的 backbone 网络(CSP 结构不变,但 C2f 模块替换了 C3 模块,每个 stage 的 blocks 数改为 (3,6,6,3) 等),新的 Anchor-Free head,新的损失函数。新增旋转目标检测功能,即 YOLOv8-OBB 模型,尤其针对旋转对象,大大提高了准确性,并减少了各种应用中的背景噪声。支持分割和增强功能,增强的分割功能提供更精确的图像分析,并将改进的分类增强功能集成到 Ultralytics 训练管道中。性能优化自去年首次发布以来,一直专注于优化 YOLOv8 框架的各个方面,包括训练、验证、推理和导出,以确保速度和效率,而不会影响性能。增强型脚骨与训练特性,模型架构、训练功能和数据集支持方面的增量更新,包括与 Open Images V7 数据集和改进的图像分类模型的集成。API 与 CLI 改进,通过完善的 API 和 CLI 增强用户体验,包括用于高级数据集探索和交互的 Ultralytics Explorer 工具。PaddlePaddle、NCNN、PNNX、TensorRT 及其他集成,加强与多个其他平台的集成,为用户提供更多部署灵活性和兼容性。多样化的贡献和 Ultralytics HUB 的演变,230 个贡献者的 1000 多个拉取请求的集成和 Ultralytics HUB 的增长,以及它自己的一系列版本更新,突出了社区在 YOLOv8 开发中的重要作用。

YOLOv9 

YOLOv9 引入了可编程梯度信息(PGI)和广义高效层聚合网络(GELAN)等开创性技术,标志着实时目标检测领域的重大进步。该模型在效率、准确性和适应性方面都有显著提高,在 MS COCO 数据集上树立了新的标杆。信息瓶颈原理和可逆函数的创新使用是其设计的核心,可确保 YOLOv9 保持高效率和高精度。通过实施可编程梯度信息(PGI)应对信息瓶颈挑战,有助于保留整个网络深度的重要数据,确保更可靠的梯度生成,从而提高模型的收敛性和性能。可逆函数的概念是 YOLOv9 设计的另一个基石。

YOLO11 

YOLO11 配备了超轻量级模型,比以前的 YOLO 系列更快、更高效。根据规模发布了五种尺寸大小的模型,在所有任务中发布了 25 种模型,包括 YOLO11n(适用于小型和轻量级任务的 Nano)、YOLO11s(Nano 的小幅升级,具有更高的准确性)、YOLO11m(适合通用的中等版本)、YOLO11l(大型,可实现更高的准确度和更高的计算量)、YOLO11x(超大尺寸,可实现最高准确度和性能)。每种模型都可以进行对象检测,对象分类,对象分割,对象追踪,定向物体检测与人体姿态检测任务。YOLO11 建立在 Ultralytics YOLOv8 代码库之上,并进行了一些架构修改。它还集成了以前的 YOLO(如 YOLOv9 和 YOLOv10)系列中的新功能,以提高模型性能。通过将输入图像传入 CNN 卷积神经网络来提取特征,从而执行对象检测。为了处理多尺度检测,使用层来确保检测到各种大小的对象。然后使用非最大抑制(NMS)细化这些预测以过滤掉重复或低置信度的框,从而实现更准确的对象检测。YOLO11 在 MS-COCO 数据集上进行对象检测训练,其中包括 80 个预训练类。除了对象检测之外,YOLO11 还通过添加掩码预测分支扩展到实例分割,为每个检测到的物体生成逐像素分割掩码。YOLO11 通过检测和预测物体上的关键点来执行姿势估计。关键点连接起来形成骨架结构,在模型头部添加姿势估计层,训练网络预测关键点的坐标,后处理步骤将这些点连接起来形成骨架结构,进而实现实时姿势识别。YOLO11 通过整合定向物体检测扩展了常规物体检测,这使得模型能够检测和分类旋转或方向不规则的物体。YOLO11 对象检测模型的改进包括增强的特征提取、针对效率和速度进行优化、使用更少的参数获得更高的精度、跨环境适应性以及支持广泛的任务范围。

随着计算机视觉技术的不断发展,YOLO 系列检测模型也在不断迭代更新。从 YOLOv1 的端到端训练到 YOLOv11 的多功能超轻量级模型,每一次迭代都带来了技术上的创新和性能的提升。这些模型在不同的应用场景中发挥着重要作用,为目标检测领域的发展做出了巨大贡献。

;