YOLOv10:实时端到端目标检测模型研究

YOLOv10n 模型结构图

YOLOv10 介绍

YOLO(You Only Look Once)是一种流行的实时目标检测算法,由Joseph Redmon等人在2015年首次提出。它的核心思想是将目标检测任务看作一个单一的回归问题,通过一次前向传播即可预测出图片中的目标类别和位置。YOLO算法以其速度快、性能好而受到广泛关注,并且已经发展出了多个版本。

YOLOv10是由清华大学研究团队开发的最新一代实时端到端目标检测模型。它在YOLO系列模型的基础上,通过引入一致的双重标签分配策略和全面效率-准确性驱动的模型设计,显著提升了检测性能和效率。YOLOv10采用轻量级分类头、空间-通道解耦下采样、基于秩引导的块设计、大核心卷积和部分自注意力模块等创新技术,减少了计算冗余,优化了模型结构,在保持高精度的同时大幅降低了推理延迟,实现了在各种模型规模下的业界领先性能。

论文链接:https://arxiv.org/pdf/2405.14458

项目链接:https://github.com/THU-MIG/yolov10

YOLOv10:实时端到端目标检测

摘要: 在过去的几年中,由于YOLO在计算成本和检测性能之间实现了有效平衡,因此在实时目标检测领域成为了主要的范式。研究者们探索了YOLO的架构设计、优化目标、数据增强策略等,取得了显著的进展。然而,YOLO对非极大值抑制(NMS)的依赖限制了其端到端部署,并对其推理延迟产生了负面影响。此外,YOLO的各个组件设计缺乏全面和深入的检查,导致明显的计算冗余,限制了模型的潜力。这导致了次优的效率,并且有很大的性能提升空间。在这项工作中,我们旨在从后处理和模型架构两个方面进一步推进YOLO的性能-效率边界。

引言: 实时目标检测一直是计算机视觉领域的研究重点,其目标是在低延迟下准确预测图像中对象的类别和位置。YOLO系列因其在性能和效率之间出色的平衡而越来越受欢迎。YOLO的检测流程包括模型前向传播过程和NMS后处理。然而,这两个过程仍有不足之处,导致准确率和延迟之间的次优边界。

相关工作: 实时目标检测旨在在低延迟下对对象进行分类和定位,这对于现实世界的应用至关重要。在过去的几年中,大量工作都集中在开发高效的检测器上。特别是YOLO系列以其主流地位脱颖而出。YOLOv1、YOLOv2和YOLOv3确定了由三部分组成的典型检测架构,即主干网络、颈部网络和头部网络。YOLOv4和YOLOv5引入了CSPNet设计来替代DarkNet,并结合了数据增强策略、增强的PAN和更多的模型尺寸等。YOLOv6提出了BiC和SimCSPSPPF分别用于颈部和主干网络,以及辅助训练和自蒸馏策略。YOLOv7引入了E-ELAN以获得丰富的梯度流路径,并探索了几种可训练的bag-of-freebies方法。YOLOv8提出了C2f构建块,用于有效的特征提取和融合。Gold-YOLO提供了先进的GD机制来增强多尺度特征融合能力。YOLOv9提出了GELAN来改善架构,并使用PGI增强训练过程。

方法论:

  • 一致的双重分配:为了无需NMS的训练,我们提出了一种具有双重标签分配和一致匹配度量的YOLOs的NMS-free训练策略,实现了高效率和有竞争力的性能。
  • 全面效率-准确性驱动的模型设计:我们从效率和准确性两个角度全面优化了YOLO的各个组件,大大减少了计算开销并增强了能力。

实验: 我们选择了YOLOv8作为基线模型,因为它在不同模型尺寸上都具有可取的延迟-准确性平衡。我们在COCO数据集上进行了广泛的实验,证明了YOLOv10在不同模型尺寸下都能显著优于先前的最先进模型。

结论: 在本文中,我们针对YOLO的目标检测流程中的后处理和模型架构进行了研究。我们提出了一种新的NMS-free训练的一致双重分配策略,并引入了全面的效率-准确性驱动的模型设计策略,推出了YOLOv10,这是一种新的实时端到端目标检测器。与其他先进的检测器相比,YOLOv10在性能和延迟方面都取得了最先进的成果。

YOLOv10系列模型在640像素的测试尺寸下展示了不同的性能指标。这些模型根据参数数量和计算复杂度被分为几个规模不同的变体:YOLOv10-N、YOLOv10-S、YOLOv10-M、YOLOv10-B、YOLOv10-L和YOLOv10-X。随着模型规模的增加,参数数量(#Params)从2.3M到29.5M,浮点运算次数(FLOPs)从6.7G到160.4G,平均精度(Apval)从38.5%提高到54.4%,推理延迟(Latency)从1.84ms增加到10.70ms。这表明YOLOv10系列在保持较低延迟的同时,能够根据不同的应用需求提供平衡的检测精度和计算效率。

主要改进点

  1. 一致的双重分配(Consistent Dual Assignments):提出了一种新的训练策略,用于无需非极大值抑制(NMS)的YOLO模型。这种策略结合了一对一和多对一的标签分配方法,在训练期间提供丰富的监督信号,在推理期间实现高效率。

  2. 一致匹配度量(Consistent Matching Metric):为了减少两个分支之间的监督差距,提出了一致的匹配度量方法,使得一对一分支在训练时能够与多对一分支保持一致,从而提高模型性能。

  3. 全面效率-准确性驱动的模型设计策略(Holistic Efficiency-Accuracy Driven Model Design):从效率和准确性两个角度出发,全面优化了YOLO模型的各个组件。这包括轻量级分类头、空间-通道解耦下采样、基于秩引导的块设计等,以减少计算冗余并提高效率。

  4. 轻量级分类头(Lightweight Classification Head):针对分类头和回归头在计算开销上的差异,提出了简化的轻量级分类头结构,以减少参数数量和计算量,而不影响整体性能。

  5. 空间-通道解耦下采样(Spatial-Channel Decoupled Downsampling):提出了一种新的下采样方法,将空间缩减和通道增加操作分离,以更高效地进行下采样并保留信息。

  6. 基于秩引导的块设计(Rank-Guided Block Design):利用内在秩分析来识别模型中冗余的阶段,并用紧凑的倒置块(CIB)替换这些阶段的基本构建块,以提高模型效率。

  7. 大核心卷积(Large-Kernel Convolution):在深层阶段的紧凑倒置块(CIB)中使用大核心深度卷积,以扩大感受野并增强模型能力。

  8. 部分自注意力模块(Partial Self-Attention, PSA):提出了一种高效的部分自注意力模块设计,通过仅在特征的一个部分上应用自注意力机制,减少了计算复杂性和内存占用。

一致的双重分配

在论文中提出的一致的双重分配(Consistent Dual Assignments)是为了解决YOLO目标检测模型在训练和推理阶段的效率和性能问题。这种方法旨在消除非极大值抑制(NMS)的需要,从而实现端到端的检测流程,并提高推理速度。以下是一致的双重分配实现的具体步骤和原理:

  1. 双重标签分配

    • 在传统的YOLO训练中,通常采用一对多(one-to-many)的标签分配策略,即一个真实目标可以对应多个正样本。这种方法虽然能够提供丰富的监督信号,提高性能,但需要在推理阶段使用NMS来选择最佳的预测结果,这增加了计算负担。
    • 为了解决这个问题,论文提出了一种新的标签分配策略,即在训练时同时使用一对多和一对一(one-to-one)的分配策略。这样,在训练阶段,模型可以获得丰富的监督信号,而在推理阶段则可以使用一对一的分配策略,避免使用NMS。
  2. 一致匹配度量

    • 在双重分配中,一对多和一对一的匹配度量需要协调一致。论文提出了一种统一的匹配度量方法,使得两个分支的匹配度量在训练和推理阶段保持一致。
    • 匹配度量的计算公式为𝑚(𝛼,𝛽)=𝑠⋅𝑝𝛼⋅IoU(𝑏^,𝑏)𝛽m(α,β)=s⋅pα⋅IoU(b^,b)β,其中𝑝p是分类分数,𝑏^b^和𝑏b分别表示预测框和真实框,𝑠s表示空间先验,𝛼α和𝛽β是平衡语义预测任务和位置回归任务影响的超参数。
  3. 训练和推理的协调

    • 在训练阶段,模型同时优化一对多和一对一的头(head)。这样,模型的主体(backbone和neck)可以获得一对多分配策略提供的丰富监督信号。
    • 在推理阶段,丢弃一对多的头,只使用一对一的头进行预测。这样做可以避免使用NMS,从而实现端到端的高效推理。
  4. 优化匹配度量参数

    • 为了使一对一匹配的监督与一对多匹配的监督协调一致,论文提出了一致匹配度量参数。通过调整𝛼α和𝛽β的值,使得一对一匹配的预测与一对多匹配的预测尽可能一致,从而提高推理阶段的性能。
  5. 实验验证

    • 论文通过实验验证了一致的双重分配策略的有效性。通过比较使用一致匹配度量和非一致匹配度量的模型性能,展示了一致匹配度量可以显著提高模型在推理阶段的性能,同时减少计算延迟。

全面效率-准确性驱动的模型设计

  1. 轻量级分类头(Lightweight Classification Head)

    • 传统的YOLO模型中,分类头和回归头通常具有相同的复杂度。然而,分类头的计算开销显著高于回归头,但对性能的提升贡献较小。
    • 为了减少计算成本,论文提出了一个简化的轻量级分类头,通常由几个深度可分离卷积(depthwise separable convolutions)和一个1x1卷积组成。
  2. 空间-通道解耦下采样(Spatial-Channel Decoupled Downsampling)

    • 传统的YOLO模型通常使用3x3卷积进行空间下采样和通道变换。这种方法同时减少了特征图的尺寸和增加了通道数,但计算成本较高。
    • 为了提高效率,论文提出将空间下采样和通道增加操作解耦。首先使用1x1卷积调整通道数,然后使用深度卷积进行空间下采样,从而减少计算量。
  3. 基于秩引导的块设计(Rank-Guided Block Design)

    • YOLO模型中的各个阶段通常使用相同的基本构建块。然而,并非所有阶段都需要相同的计算复杂度。
    • 论文通过计算每个阶段的特征图的内在秩(intrinsic rank),来评估特征的冗余程度。基于这些信息,论文提出了一种秩引导的块设计策略,用更紧凑的构建块替换冗余较高的阶段,从而减少计算成本。
  4. 大核心卷积(Large-Kernel Convolution)

    • 为了增强模型的感知能力,论文提出在深层阶段使用大核心卷积。大核心卷积可以扩大感受野,提高特征的表达能力。
    • 论文特别提出在紧凑倒置块(Compact Inverted Block, CIB)中使用7x7的大核心卷积,并结合结构重参数化技术来优化训练过程。
  5. 部分自注意力模块(Partial Self-Attention, PSA)

    • 自注意力机制因其强大的全局建模能力而被广泛应用于各种视觉任务中。然而,自注意力的计算复杂度和内存占用较高。
    • 为了在保持效率的同时引入自注意力,论文提出了部分自注意力模块。这种模块通过仅在特征的一个子集上应用自注意力,减少了计算复杂度和内存占用。

模型训练与测试

训练模型

yolo detect train data=coco128.yaml model=yolov10n.yaml epochs=2 batch=32 imgsz=640

  • yolo detect:指定使用YOLO进行目标检测。
  • train:指定训练操作。
  • data=coco128.yaml:指定数据集配置文件,这里使用的是COCO数据集的一个变体(可能是较小的子集)。
  • model=yolov10n.yaml:指定模型配置文件,这里使用的是YOLOv10-N的配置。
  • epochs=2:指定训练的总轮数(epoch),这里是2轮。
  • batch=32:指定每批处理的图像数量,这里是32。
  • imgsz=640:指定输入图像的尺寸,这里是640x640像素。

验证模型

yolo val model=yolov10n.pt data=coco.yaml batch=256

  • yolo val:指定使用YOLO进行验证。
  • model=yolov10n.pt:指定要验证的模型文件,这里使用的是训练好的YOLOv10-N模型。
  • data=coco.yaml:指定数据集配置文件,这里使用的是COCO数据集的完整配置。
  • batch=256:指定验证时每批处理的图像数量,这里是256。

测试模型

yolo predict model=yolov10n.pt

  • yolo predict:指定使用YOLO进行预测。
  • model=yolov10n.pt:指定要使用的模型文件,这里使用的是训练好的YOLOv10-N模型。

以下是对YOLO目标检测框架中训练、验证和预测的详细设置参数的说明,可以帮助你更有效地使用YOLOv10模型:

训练设置
task: 任务类型,例如检测(detect)、分割(segment)、分类(classify)、姿态(pose)。
mode: YOLO模式,例如训练(train)、验证(val)、预测(predict)、导出(export)、跟踪(track)、基准测试(benchmark)。


训练参数
model: 模型文件的路径。
data: 数据文件的路径。
epochs: 训练的周期数。
batch: 每个批次的图像数量。
imgsz: 输入图像的大小。
save: 是否保存训练检查点和预测结果。
val_period: 每多少个周期进行一次验证。
device: 运行设备的指定。
workers: 数据加载的工作线程数。
project和name: 项目和实验的名称,结果将保存在相应的目录下。
pretrained: 是否使用预训练模型或从特定模型加载权重。
optimizer: 使用的优化器类型。
seed: 随机种子,用于可重复性。
deterministic: 是否启用确定性模式。
amp: 是否使用自动混合精度(AMP)训练。


验证/测试设置
val: 是否在训练期间进行验证/测试。
split: 用于验证的数据集分割。
conf: 检测时的对象置信度阈值。
iou: 非极大值抑制(NMS)的交并比(IoU)阈值。
max_det: 每张图像的最大检测数量。


预测设置
source: 图像或视频的源目录。
vid_stride: 视频帧率步长。
visualize: 是否可视化模型特征。
augment: 是否对预测源应用图像增强。
classes: 按类别过滤结果。


可视化设置
show: 是否显示预测的图像和视频。
save_txt: 是否将结果保存为.txt文件。
save_conf: 是否保存带有置信度分数的结果。
show_labels: 是否显示预测标签。
show_boxes: 是否显示预测框。


导出设置
format: 导出格式,例如torchscript。
optimize: 是否优化TorchScript以适应移动设备。
int8: 是否进行INT8量化。
dynamic: 是否使用动态轴。
simplify: 是否简化ONNX模型。
opset: ONNX操作集版本。
workspace: TensorRT工作空间大小。
nms: 是否在CoreML中添加NMS。


超参数
lr0: 初始学习率。
lrf: 最终学习率。
momentum: SGD动量/Adam beta1。
weight_decay: 优化器权重衰减。
warmup_epochs: 预热周期。
box, cls, dfl, pose, kobj: 各种损失的增益。


自定义配置
cfg: 自定义的配置文件路径,用于覆盖默认配置。


跟踪器设置
tracker: 跟踪器类型。

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值