flexloop/yolov10
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

YOLOv10:实时端到端目标检测

YOLOv10 于 2024 年 5 月发布,由清华大学研究人员基于 Ultralytics Python 包构建,引入了一种新的实时目标检测方法,解决了先前 YOLO 版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制(NMS)并优化各种模型组件,YOLOv10 在发布时以显著降低的计算开销实现了卓越的性能。其无 NMS 的端到端设计开创了一种新方法,该方法已在 YOLO26 中得到进一步发展。

YOLOv10 免 NMS 训练的一致双重分配



观看: 如何使用 Ultralytics 在 SKU-110k 数据集上训练 YOLOv10 | 零售数据集

概述

实时目标检测旨在以低延迟准确预测图像中的对象类别和位置。YOLO 系列因其在性能和效率之间的平衡而一直处于这项研究的前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入用于无 NMS 训练的一致双重分配和整体效率-准确性驱动的模型设计策略来解决这些问题。

架构

YOLOv10 的架构建立在之前 YOLO 模型优势的基础上,同时引入了几项关键创新。该模型架构由以下组件组成:

  1. 骨干网络:负责特征提取,YOLOv10 中的骨干网络使用增强版的 CSPNet(Cross Stage Partial Network),以改善梯度流并减少计算冗余。
  2. Neck:Neck 的设计目的是聚合来自不同尺度的特征,并将它们传递到 Head。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。
  3. 一对多 Head:在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. 一对一 Head:在推理时为每个对象生成一个最佳预测,以消除对 NMS 的需求,从而降低延迟并提高效率。

主要功能

  1. 免 NMS 训练:利用一致的双重分配来消除对 NMS 的需求,从而降低推理延迟。
  2. 整体模型设计:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类 Head、空间通道解耦下采样和秩引导块设计。
  3. 增强的模型功能:结合了大内核卷积和部分自注意力模块,以提高性能,而无需显着的计算成本。

模型变体

YOLOv10 提供多种模型规模,以满足不同的应用需求:

  • YOLOv10n:适用于资源极其受限环境的 Nano 版本。
  • YOLOv10s:平衡速度和精度的小型版本。
  • YOLOv10m:适用于通用用途的中型版本。
  • YOLOv10b:平衡版本,宽度增加,精度更高。
  • YOLOv10l:大型版本,精度更高,但会增加计算资源消耗。
  • YOLOv10x:超大型版本,可实现最高的精度和性能。

性能

YOLOv10 在精度和效率方面均优于之前的 YOLO 版本和其他最先进模型。例如,YOLOv10s 在 COCO 数据集上与 RT-DETR-R18 具有相似的 AP,但速度快 1.8 倍;YOLOv10b 与 YOLOv9-C 性能相同,但延迟降低 46%,参数减少 25%。

!!! tip "性能"

=== "检测 (COCO)"

在 T4 GPU 上使用 TensorRT FP16 测量的延迟。

| 模型          | 输入尺寸 | AP<sup>val</sup> | FLOPs (G) | 延迟 (ms) |
| ------------- | -------- | ---------------- | --------- | --------- |
| [YOLOv10n][1] | 640      | 38.5             | **6.7**   | **1.84**  |
| [YOLOv10s][2] | 640      | 46.3             | 21.6      | 2.49      |
| [YOLOv10m][3] | 640      | 51.1             | 59.1      | 4.74      |
| [YOLOv10b][4] | 640      | 52.5             | 92.0      | 5.74      |
| [YOLOv10l][5] | 640      | 53.2             | 120.3     | 7.28      |
| [YOLOv10x][6] | 640      | **54.4**         | 160.4     | 10.70     |

方法

用于免 NMS 训练的一致双重分配

YOLOv10 采用双重标签分配,在训练过程中结合了一对多和一对一策略,以确保丰富的监督和高效的端到端部署。一致的匹配度量使两种策略之间的监督保持一致,从而提高推理期间的预测质量。

整体效率-准确性驱动的模型设计

效率提升

  1. 轻量级分类 Head:通过使用深度可分离卷积来减少分类 Head 的计算开销。
  2. 空间通道解耦下采样:解耦空间缩减和通道调制,以最大限度地减少信息丢失和计算成本。
  3. 秩引导块设计:基于内在阶段冗余调整块设计,确保最佳参数利用率。

精度提升

  1. 大卷积核:扩大感受野以增强特征提取能力。
  2. Partial Self-Attention (PSA):结合自注意力模块以提高全局表示学习能力,同时最大限度地减少开销。

实验与结果

YOLOv10 已在 COCO 等标准基准上进行了广泛测试,展现出卓越的性能和效率。该模型在不同变体上均取得了最先进的成果,与以前的版本和其他当代检测器相比,在延迟和准确性方面均有显著提升。

对比

YOLOv10 与 SOTA 目标检测器的比较

与其他最先进的检测器相比:

  • 在相似的精度下,YOLOv10s / x 比 RT-DETR-R18 / R101 快 1.8 倍 / 1.3 倍
  • YOLOv10b 在相同精度下,参数比 YOLOv9-C 减少 25%,延迟降低 46%
  • YOLOv10l / x 在 AP 上分别优于 YOLOv8l / x 0.3 AP / 0.5 AP,同时参数量减少 1.8 倍 / 2.3 倍

!!! tip "性能"

=== "检测 (COCO)"

    以下是 YOLOv10 变体与其他最先进模型的详细比较:

    | 模型              | 参数量<br><sup>(M)</sup> | FLOPs<br><sup>(G)</sup> | mAP<sup>val<br>50-95</sup> | 延迟<br><sup>(ms)</sup> | 延迟-前向<br><sup>(ms)</sup> |
    | ----------------- | ------------------------ | ----------------------- | -------------------------- | ----------------------- | ---------------------------- |
    | YOLOv6-3.0-N      | 4.7                      | 11.4                    | 37.0                       | 2.69                    | **1.76**                     |
    | Gold-YOLO-N       | 5.6                      | 12.1                    | **39.6**                   | 2.92                    | 1.82                         |
    | YOLOv8n           | 3.2                      | 8.7                     | 37.3                       | 6.16                    | 1.77                         |
    | **[YOLOv10n][1]** | **2.3**                  | **6.7**                 | 39.5                       | **1.84**                | 1.79                         |
    |                   |                          |                         |                            |                         |                              |
    | YOLOv6-3.0-S      | 18.5                     | 45.3                    | 44.3                       | 3.42                    | 2.35                         |
    | Gold-YOLO-S       | 21.5                     | 46.0                    | 45.4                       | 3.82                    | 2.73                         |
    | YOLOv8s           | 11.2                     | 28.6                    | 44.9                       | 7.07                    | **2.33**                     |
    | **[YOLOv10s][2]** | **7.2**                  | **21.6**                | **46.8**                   | **2.49**                | 2.39                         |
    |                   |                          |                         |                            |                         |                              |
    | RT-DETR-R18       | 20.0                     | 60.0                    | 46.5                       | **4.58**                | **4.49**                     |
    | YOLOv6-3.0-M      | 34.9                     | 85.8                    | 49.1                       | 5.63                    | 4.56                         |
    | Gold-YOLO-M       | 41.3                     | 87.5                    | 49.8                       | 6.38                    | 5.45                         |
    | YOLOv8m           | 25.9                     | 78.9                    | 50.6                       | 9.50                    | 5.09                         |
    | **[YOLOv10m][3]** | **15.4**                 | **59.1**                | **51.3**                   | 4.74                    | 4.63                         |
    |                   |                          |                         |                            |                         |                              |
    | YOLOv6-3.0-L      | 59.6                     | 150.7                   | 51.8                       | 9.02                    | 7.90                         |
    | Gold-YOLO-L       | 75.1                     | 151.7                   | 51.8                       | 10.65                   | 9.78                         |
    | YOLOv8l           | 43.7                     | 165.2                   | 52.9                       | 12.39                   | 8.06                         |
    | RT-DETR-R50       | 42.0                     | 136.0                   | 53.1                       | 9.20                    | 9.07                         |
    | **[YOLOv10l][5]** | **24.4**                 | **120.3**               | **53.4**                   | **7.28**                | **7.21**                     |
    |                   |                          |                         |                            |                         |                              |
    | YOLOv8x           | 68.2                     | 257.8                   | 53.9                       | 16.86                   | 12.83                        |
    | RT-DETR-R101      | 76.0                     | 259.0                   | 54.3                       | 13.71                   | 13.58                        |
    | **[YOLOv10x][6]** | **29.5**                 | **160.4**               | **54.4**                   | **10.70**               | **10.60**                    |

    [1]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10n.pt
    [2]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10s.pt
    [3]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10m.pt
    [4]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10b.pt
    [5]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10l.pt
    [6]: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolov10x.pt

参数和 FLOPs 值适用于融合模型在 model.fuse() 之后,它合并了 Conv 和 BatchNorm 层,并移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,并可能显示更高的计数。

使用示例

若要使用 YOLOv10 预测新图像,也可通过 Ultralytics Platform 云端 GPU 上训练模型:

!!! example "示例"

=== "Python"

    ```python
    from ultralytics import YOLO

    # Load a pretrained YOLOv10n model
    model = YOLO("yolov10n.pt")

    # Perform object detection on an image
    results = model("image.jpg")

    # Display the results
    results[0].show()
    ```

=== "CLI"

    ```bash
    # Load a COCO-pretrained YOLOv10n model and run inference on the 'bus.jpg' image
    yolo detect predict model=yolov10n.pt source=path/to/bus.jpg
    ```

用于在自定义数据集上训练 YOLOv10:

!!! example "示例"

=== "Python"

    ```python
    from ultralytics import YOLO

    # Load YOLOv10n model from scratch
    model = YOLO("yolov10n.yaml")

    # Train the model
    model.train(data="coco8.yaml", epochs=100, imgsz=640)
    ```

=== "CLI"

    ```bash
    # Build a YOLOv10n model from scratch and train it on the COCO8 example dataset for 100 epochs
    yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640

    # Build a YOLOv10n model from scratch and run inference on the 'bus.jpg' image
    yolo predict model=yolov10n.yaml source=path/to/bus.jpg
    ```

支持的任务和模式

YOLOv10 模型系列提供了一系列模型,每个都针对高性能目标检测进行了优化。这些模型满足不同的计算需求和精度要求,使其适用于广泛的应用。

模型文件名任务推理验证训练导出
YOLOv10yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt目标检测✅✅✅✅

导出 YOLOv10

由于 YOLOv10 引入了新操作,Ultralytics 提供的所有导出格式目前并非都受支持。下表概述了哪些格式已使用 Ultralytics 成功转换为 YOLOv10。如果您能够提供贡献更改以增加对 YOLOv10 其他格式的导出支持,请随时提交拉取请求。

导出格式导出支持导出的模型推理备注
TorchScript✅✅标准 PyTorch 模型格式。
ONNX✅✅被广泛支持用于部署。
OpenVINO✅✅针对 Intel 硬件进行了优化。
TensorRT✅✅针对 NVIDIA GPU 进行了优化。
CoreML✅✅仅限于苹果设备。
TF SavedModel✅✅TensorFlow 的标准模型格式。
TF GraphDef✅✅传统的 TensorFlow 格式。
TF Lite✅✅针对移动和嵌入式设备优化。
TF Edge TPU✅✅专门用于 Google 的 Edge TPU 设备。
TF.js✅✅用于浏览器的 JavaScript 环境。
PaddlePaddle❌❌在中国很受欢迎;但全球支持较少。
NCNN✅❌层 torch.topk 不存在或未注册

结论

YOLOv10 在发布时通过解决先前 YOLO 版本的缺点并整合创新设计策略,为实时目标检测设定了新标准。其无 NMS 方法开创了 YOLO 系列中的端到端目标检测。有关具有改进性能和无 NMS 推理的最新 Ultralytics 模型,请参阅 YOLO26。

引用和致谢

我们感谢来自清华大学的 YOLOv10 作者,感谢他们对 Ultralytics 框架的广泛研究和重大贡献:

!!! quote ""

=== "BibTeX"

    ```bibtex
    @article{THU-MIGyolov10,
      title={YOLOv10: Real-Time End-to-End Object Detection},
      author={Ao Wang, Hui Chen, Lihao Liu, et al.},
      journal={arXiv preprint arXiv:2405.14458},
      year={2024},
      institution={Tsinghua University},
      license = {AGPL-3.0}
    }
    ```

有关详细实现、架构创新和实验结果,请参阅清华大学团队的 YOLOv10 研究论文和 GitHub 仓库。

常见问题

什么是 YOLOv10,它与之前的 YOLO 版本有何不同?

YOLOv10 由清华大学研究人员开发,为实时目标检测引入了多项关键创新。它通过在训练期间采用一致的双重分配和优化的模型组件,消除了对非极大值抑制 (NMS) 的需求,从而以更低的计算开销实现了卓越的性能。有关其架构和关键特性的更多详细信息,请查阅 YOLOv10 概述部分。

如何开始使用 YOLOv10 运行推理?

为了方便推理,您可以使用 Ultralytics YOLO Python 库或命令行界面 (CLI)。以下是使用 YOLOv10 预测新图像的示例:

!!! example "示例"

=== "Python"

    ```python
    from ultralytics import YOLO

    # Load the pretrained YOLOv10n model
    model = YOLO("yolov10n.pt")
    results = model("image.jpg")
    results[0].show()
    ```

=== "CLI"

    ```bash
    yolo detect predict model=yolov10n.pt source=path/to/image.jpg
    ```

有关更多使用示例,请访问我们的使用示例部分。

YOLOv10 提供哪些模型变体及其用例?

YOLOv10 提供多种模型变体以适应不同的用例:

  • YOLOv10n:适用于资源极其受限的环境
  • YOLOv10s:平衡速度和精度
  • YOLOv10m:通用
  • YOLOv10b:宽度增加,精度更高
  • YOLOv10l:高精度,但会消耗计算资源
  • YOLOv10x:最高的精度和性能

每个变体都针对不同的计算需求和精度要求而设计,使其能够适用于各种应用。请浏览模型变体部分以获取更多信息。

YOLOv10 中的无 NMS 方法如何提升性能?

YOLOv10 通过在训练中采用一致的双重分配,消除了在推理过程中对非极大值抑制 (NMS) 的需求。这种方法降低了推理延迟,并提高了预测效率。该架构还包含一个用于推理的一对一头部,确保每个对象获得一个最佳预测。有关详细说明,请参阅免 NMS 训练的一致双重分配部分。

在哪里可以找到 YOLOv10 模型的导出选项?

YOLOv10 支持多种导出格式,包括 TorchScript、ONNX、OpenVINO 和 TensorRT。然而,由于 YOLOv10 的新操作,Ultralytics 提供的并非所有导出格式目前都受支持。有关支持格式的详细信息和导出说明,请访问导出 YOLOv10 部分。

YOLOv10 模型的性能基准是什么?

YOLOv10 在精度和效率方面均优于之前的 YOLO 版本和其他最先进模型。例如,YOLOv10s 在 COCO 数据集上与 RT-DETR-R18 具有相似的 AP,但速度快 1.8 倍。YOLOv10b 与 YOLOv9-C 性能相同,但延迟降低 46%,参数减少 25%。详细的基准测试可在对比部分找到。