YOLO26 模型的 ONNX 导出#
CPU ONNX 推理速度提升约 43%:YOLO26n 对比 YOLO11n
- 在 CPU ONNX 推理中,YOLO26n 的运行速度最高比 YOLO11n 快 43%(Intel Xeon CPU @ 2.00 GHz)。请参阅 YOLO26 模型页面了解完整对比。
在部署计算机视觉模型时,你通常需要一种既灵活又兼容多个平台的模型格式。
将 Ultralytics YOLO26 模型导出为 ONNX 格式,可以简化部署,并确保模型在各种环境中实现最佳性能。本指南将向你介绍如何轻松地将 YOLO26 模型转换为 ONNX,并提升其在实际应用中的可扩展性和有效性。
Watch: Ultralytics YOLO26 vs Ultralytics YOLO11 ONNX Inference Test | ~43% Faster Inference with YOLO26 🚀
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 Runtime,ONNX 模型通常部署在 CPU 上。该运行时针对 CPU 执行进行了优化,能够显著提升推理速度,使实时 CPU 部署成为可能。
支持的部署选项#
虽然 ONNX 模型通常用于 CPU,但也可以部署在以下平台上:
-
GPU 加速:ONNX 完全支持 GPU 加速,尤其是 NVIDIA CUDA。对于 AMD GPU 上的原生训练和推理,请使用 PyTorch ROCm;ONNX 文件仍需要兼容 AMD 的运行时。
-
边缘设备和移动设备: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 格式支持 Export、Predict 和 Validate 模式。导出模型后,加载导出的模型即可运行推理或验证其准确性。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
model.export(format="onnx") # creates 'yolo26n.onnx'
# Export an INT8-quantized ONNX model with calibration data
model.export(format="onnx", quantize=8, data="coco8.yaml") # creates 'yolo26n_int8.onnx'from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")导出参数#
将 YOLO26 模型导出为 ONNX 格式时,你可以使用各种参数自定义流程,以针对特定部署需求进行优化:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'onnx' | 导出模型的目标格式,用于定义其与各种部署环境的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像尺寸。可以使用表示正方形图像的整数,也可以使用元组 (height, width) 指定具体尺寸。 |
quantize | int 或 str | None | 量化精度:16(FP16)或 8(使用来自 data 的校准图像通过 ONNX Runtime 进行 INT8 静态量化,生成一个 _int8.onnx 模型);32/未设置则为 FP32。使用 quantize=8 训练的检查点总是直接从其携带的范围导出为带有 Q/DQ 节点的 INT8,无需校准,并且使用普通的 .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 算子集版本,以兼容不同的 ONNX 解析器和运行时。如果未设置,则使用最新支持的版本。 |
nms | bool,可选 | None | 选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 的头部(False)。 |
batch | int | 1 | 指定导出模型的批量推理大小,或指定导出模型在 predict 模式下并发处理的最大图像数量。 |
device | str | None | 指定导出设备:GPU(device=0)、CPU(device=cpu)、Apple silicon 的 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 模型,以实现高性能、可扩展的部署。
总结#
在本指南中,你了解了如何将 Ultralytics YOLO26 模型导出为 ONNX 格式,从而提升其在各种平台上的互操作性和性能。你还了解了 ONNX Runtime 和 ONNX 部署选项。
ONNX 导出只是 Ultralytics YOLO26 支持的众多导出格式之一,可让你几乎在任何环境中部署模型。根据具体需求,你还可以探索其他导出选项,例如用于实现最大 GPU 性能的 TensorRT,或用于 Apple 设备的 CoreML。
如需更多使用详情,请访问 ONNX 官方文档。
此外,如果你想进一步了解其他 Ultralytics YOLO26 集成,请访问我们的集成指南页面。你可以在那里找到大量实用资源和见解。
常见问题#
要使用 Ultralytics 将 YOLO26 模型导出为 ONNX 格式,请按照以下步骤操作:
使用方法from ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Export the model to ONNX format model.export(format="onnx") # creates 'yolo26n.onnx' # Load the exported ONNX model onnx_model = YOLO("yolo26n.onnx") # Run inference 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 推理。
- GPU:利用 NVIDIA CUDA 实现高性能 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 支持团队以获取进一步帮助。