导出 YOLO26 模型为 ONNX 格式#
CPU 上的 ONNX 推理速度提升约 43%:YOLO26n 对比 YOLO11n
- 在 CPU ONNX 推理中,YOLO26n 的运行速度最高比 YOLO11n 快 43%(Intel Xeon CPU @ 2.00 GHz)。完整对比请参阅 YOLO26 模型页面。
部署计算机视觉模型时,通常需要一种既灵活又兼容多个平台的模型格式。
将 Ultralytics YOLO26 模型导出为 ONNX 格式,可以简化部署,并确保模型在各种环境中发挥最佳性能。本指南将介绍如何轻松地将 YOLO26 模型转换为 ONNX 格式,从而提升模型在实际应用中的可扩展性和效果。
观看: Ultralytics YOLO26 与 Ultralytics YOLO11 ONNX 推理测试 | YOLO26 推理速度快约 43% 🚀
ONNX 和 ONNX Runtime#
ONNX,即开放神经网络交换,是一个最初由 Facebook 和 Microsoft 开发的社区项目。ONNX 的持续开发是一项协作工作,得到 IBM、Amazon(通过 AWS)和 Google 等多个组织的支持。该项目旨在创建一种开放文件格式,用于表示机器学习模型,使这些模型能够在不同的 AI 框架和硬件上使用。
ONNX 模型可用于在不同框架之间无缝迁移。例如,在 PyTorch 中训练的深度学习模型可以导出为 ONNX 格式,然后轻松导入 TensorFlow。
此外,ONNX 模型还可以与 ONNX Runtime 配合使用。ONNX Runtime 是一款通用的跨平台机器学习模型加速器,兼容 PyTorch、TensorFlow、scikit-learn 等框架。
ONNX Runtime 利用硬件特定功能优化 ONNX 模型的执行。这种优化使模型能够在各种硬件平台上高效运行并实现高性能,包括 CPU、GPU 和专用加速器。
无论单独使用还是与 ONNX Runtime 搭配使用,ONNX 都能为机器学习模型部署和兼容性提供灵活的解决方案。
ONNX 模型的主要特性#
ONNX 能够处理多种格式,主要得益于以下关键特性:
-
统一的模型表示:ONNX 定义了一组通用算子(如卷积、层等)和一种标准数据格式。将模型转换为 ONNX 格式时,其架构和权重会转换为这种统一表示。借助这种一致性,任何支持 ONNX 的框架都能够理解该模型。
-
版本管理和向后兼容性:ONNX 为其算子维护版本管理系统。这样,即使标准不断演进,旧版本中创建的模型仍然可以使用。向后兼容性是一项关键特性,可避免模型迅速过时。
-
基于计算图的模型表示:ONNX 以计算图的形式表示模型。这种基于图的结构是一种通用的机器学习模型表示方式:节点表示操作或计算,边表示节点之间流动的张量。这种格式很容易适配其他同样以图表示模型的框架。
-
工具和生态系统:ONNX 拥有丰富的工具生态系统,可用于模型转换、可视化和优化。这些工具让开发者更轻松地使用 ONNX 模型,并在不同框架之间无缝转换模型。
ONNX 的常见用途#
在介绍如何将 YOLO26 模型导出为 ONNX 格式之前,我们先来看看 ONNX 模型通常用于哪些场景。
CPU 部署#
ONNX 模型常部署在 CPU 上,因为它们兼容 ONNX Runtime。该运行时针对 CPU 执行进行了优化,能够显著提升推理速度,让实时 CPU 部署成为可能。
支持的部署选项#
ONNX 模型通常用于 CPU,也可以部署在以下平台:
-
GPU 加速:ONNX 完全支持通过 CUDA 在 NVIDIA GPU 上进行 GPU 加速,也支持通过 ROCm 和 MIGraphX 在 AMD GPU 上进行加速。
-
边缘设备和移动设备:ONNX 也适用于边缘设备和移动设备,非常适合设备端推理和实时推理场景。它轻量且兼容边缘硬件,还为厂商的 NPU 格式提供了基础,例如 Huawei Ascend、适用于 Snapdragon 设备的 Qualcomm QNN,以及适用于 Rockchip NPU 的 RKNN。
-
Web 浏览器:ONNX 可以直接在 Web 浏览器中运行,为交互式、动态的 Web AI 应用提供支持。
支持的任务#
ONNX 导出支持 Ultralytics 的全部七种任务。语义分割和深度估计仅适用于 YOLO26,因为只有 YOLO26 系列提供这两种输出头。
将 YOLO26 模型导出为 ONNX 格式#
将 YOLO26 模型转换为 ONNX 格式,可以扩展模型兼容性和部署灵活性。Ultralytics YOLO26 提供了简单直接的导出流程,能够显著提升模型在不同平台上的性能。
安装#
要安装所需软件包,请运行:
# Install the required package for YOLO26
pip install ultralytics有关安装流程的详细说明和最佳实践,请查看我们的 YOLO26 安装指南。安装 YOLO26 所需软件包时,如果遇到困难,请参阅我们的常见问题指南,获取解决方案和建议。
用法#
开始阅读使用说明前,请务必了解 Ultralytics 提供的 YOLO26 模型,以便根据项目需求选择最合适的模型。
ONNX 格式支持导出、预测和验证模式。导出模型后,加载导出的模型即可运行推理或验证其准确率。
from ultralytics import YOLO
# 加载 YOLO26 模型
model = YOLO("yolo26n.pt")
# 将模型导出为 ONNX 格式
model.export(format="onnx") # 创建 'yolo26n.onnx'
# 使用校准数据导出 INT8 量化的 ONNX 模型
model.export(format="onnx", quantize=8, data="coco8.yaml") # 创建 'yolo26n_int8.onnx'from ultralytics import YOLO
# 加载导出的 ONNX 模型
model = YOLO("yolo26n.onnx")
# 运行推理
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# 加载导出的 ONNX 模型
model = YOLO("yolo26n.onnx")
# 在 COCO8 数据集上验证准确率
metrics = model.val(data="coco8.yaml")导出参数#
将 YOLO26 模型导出为 ONNX 格式时,你可以使用各种参数自定义流程,以满足特定的部署需求:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
format | str | 'onnx' | 导出模型的目标格式,用于定义与各种部署环境的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像尺寸。正方形图像可使用整数;若要指定具体尺寸,则可使用元组 (height, width)。 |
quantize | int 或 str | None | 量化精度:16(FP16)或 8(使用 ONNX Runtime 进行 INT8 静态量化,并使用来自 data 的校准图像,生成 _int8.onnx 模型);32/未设置时使用 FP32。使用 quantize=8 训练的检查点始终会根据其自带的取值范围,将 INT8 导出为 Q/DQ 节点,无需校准,并采用普通的 .onnx 名称。此参数会替代已弃用的 half/int8 标志。 |
data | str | None | 用于 INT8 校准的数据集 YAML;分类任务则使用数据集目录或内置数据集名称。若使用 quantize=8 时未提供此参数,Ultralytics 会为该模型任务选择默认校准数据集;使用 quantize=8 训练的检查点则不需要校准数据集。 |
fraction | float、int 或 list | 1.0 | 校准子集,可按比例、图像数量或 [train, val, test] 比例/数量指定。包含两个项目的列表会让 test 保持完整,而 0 会跳过它。 |
dynamic | bool | False | 允许使用动态输入尺寸,从而更灵活地处理不同图像尺寸。 |
simplify | bool | True | 使用 onnxslim 简化模型图,可能提升性能和兼容性。 |
opset | int | None | 指定 ONNX opset 版本,以兼容不同的 ONNX 解析器和运行时。如果未设置,则使用最新的受支持版本。 |
nms | bool,可选 | None | 选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 检测头(False)。 |
batch | int | 1 | 指定导出模型的批量推理大小,或导出模型在 predict 模式下可同时处理的最大图像数。 |
device | str | None | 指定导出设备:GPU(device=0)、CPU(device=cpu)、Apple 芯片的 MPS(device=mps)。 |
有关导出流程的更多详情,请访问 Ultralytics 导出文档页面。
部署导出的 YOLO26 ONNX 模型#
成功将 Ultralytics YOLO26 模型导出为 ONNX 格式后,下一步就是在各种环境中部署模型。有关部署 ONNX 模型的详细说明,请参阅以下资源:
-
ONNX Runtime Python API 文档:本指南提供了使用 ONNX Runtime 加载和运行 ONNX 模型的关键信息。
-
在边缘设备上部署:查看此文档页面,了解在边缘设备上部署 ONNX 模型的各种示例。
-
GitHub 上的 ONNX 教程:一系列全面的教程,涵盖在不同场景中使用和实现 ONNX 模型的各个方面。
-
Triton Inference Server:了解如何通过 NVIDIA 的 Triton Inference Server 部署 ONNX 模型,实现高性能、可扩展的部署。
使用 MIGraphX 在 AMD GPU 上进行推理#
Ultralytics 通过 ONNX Runtime 的 MIGraphX 执行提供程序,在 AMD GPU 上运行导出的 ONNX 模型。在 ROCm (HIP) 系统上,ONNX 后端会在首次使用时安装 onnxruntime-ep-migraphx 插件,并自动选择 MIGraphXExecutionProvider,无需更改代码;同时支持所有 YOLO26 任务。有关先决条件、安装、用法、基准测试和编译程序缓存,请参阅 AMD GPU 推理指南。
总结#
本指南介绍了如何将 Ultralytics YOLO26 模型导出为 ONNX 格式,以提升模型在各种平台上的互操作性和性能。你还了解了 ONNX Runtime 以及 ONNX 的部署选项。
ONNX 只是 Ultralytics YOLO26 支持的众多导出格式之一,可让你几乎在任何环境中部署模型。根据具体需求,你还可以了解其他导出选项,例如实现最高 GPU 性能的 TensorRT,或适用于 Apple 设备的 CoreML。
如需了解更多用法详情,请访问 ONNX 官方文档。
此外,如果你想进一步了解其他 Ultralytics YOLO26 集成方案,请访问我们的集成指南页面。页面上有许多实用资源和见解。
常见问题#
按照以下步骤,使用 Ultralytics 将 YOLO26 模型导出为 ONNX 格式:
用法from ultralytics import YOLO # 加载 YOLO26 模型 model = YOLO("yolo26n.pt") # 将模型导出为 ONNX 格式 model.export(format="onnx") # 创建 'yolo26n.onnx' # 加载导出的 ONNX 模型 onnx_model = YOLO("yolo26n.onnx") # 运行推理 results = onnx_model("https://ultralytics.com/images/bus.jpg")更多详情请访问导出文档。
使用 ONNX Runtime 部署 YOLO26 模型有以下几项优势:
- 跨平台兼容性:ONNX Runtime 支持 Windows、macOS 和 Linux 等多个平台,确保模型在不同环境中顺畅运行。
- 硬件加速:ONNX Runtime 可利用针对 CPU、GPU 和专用加速器的硬件优化,实现高性能推理。
- 框架互操作性:在 PyTorch 或 TensorFlow 等常见框架中训练的模型,可以轻松转换为 ONNX 格式,并使用 ONNX Runtime 运行。
- 性能优化:与原生 PyTorch 模型相比,ONNX Runtime 可将 CPU 速度最高提升 3 倍,因此非常适合 GPU 资源有限的部署场景。
如需了解更多信息,请参阅 ONNX Runtime 文档。
导出为 ONNX 的 YOLO26 模型可以部署到各种平台,包括:
- CPU:使用 ONNX Runtime 优化 CPU 推理。
- NVIDIA GPU:利用 NVIDIA CUDA 实现高性能 GPU 加速。
- AMD GPU:在 Linux 上使用 AMD ROCm 和 MIGraphX 执行提供程序实现高性能 GPU 加速。
- 边缘设备:在边缘设备和移动设备上运行轻量级模型,实现实时端侧推理。
- Web 浏览器:直接在 Web 浏览器中执行模型,为交互式 Web 应用提供支持。
- 云服务:部署到支持 ONNX 格式的云平台,实现可扩展的推理。
如需了解更多信息,请参阅我们的模型部署选项指南。
将 ONNX 格式用于 Ultralytics YOLO26 模型有许多优点:
- 互操作性:ONNX 可让模型在不同机器学习框架之间顺畅迁移。
- 性能优化:ONNX Runtime 可利用特定硬件的优化来提升模型性能。
- 灵活性:ONNX 支持各种部署环境,让你无需修改模型,就能在不同平台上使用同一个模型。
- 标准化:ONNX 提供了行业内广泛支持的标准化格式,确保长期兼容性。
请参阅将 YOLO26 模型导出为 ONNX的完整指南。
将 YOLO26 模型导出为 ONNX 时,你可能会遇到依赖项不匹配或不支持的操作等常见问题。要排查这些问题:
- 确认已安装所需依赖项的正确版本。
- 查看官方 ONNX 文档,了解支持的运算符和功能。
- 查看错误消息以寻找线索,并参阅 Ultralytics 常见问题指南。
- 尝试使用不同的导出参数,例如
simplify=True,或调整opset版本。 - 如果输入尺寸为动态值时出现问题,请在导出时设置
dynamic=True。
如果问题仍未解决,请联系 Ultralytics 支持团队以获取进一步帮助。