YOLO26 模型的 ONNX 导出#
推理速度提升约 43%。
- 将 Ultralytics YOLO26 模型导出为 ONNX 可带来高达 43% 的推理速度提升,从而实现更快速、更高效的部署。
通常,在部署computer vision模型时,你需要一种既灵活又兼容多种平台的模型格式。
将Ultralytics YOLO26模型导出为ONNX格式可简化部署流程,并确保在各种环境中获得最佳性能。本指南将向你展示如何轻松地将YOLO26模型转换为ONNX,从而提升其在实际应用中的可扩展性和有效性。
Watch: Ultralytics YOLO26 vs Ultralytics YOLO11 ONNX Inference Test | ~43% Faster Inference with YOLO26 🚀
ONNX 与 ONNX Runtime#
ONNX代表开放式Neural Network交换(Open Neural Network Exchange),是由Facebook和微软最初开发的社区项目。ONNX的持续发展是一项协作努力,得到了IBM、亚马逊(通过AWS)和谷歌等各种组织的支持。该项目的目标是创建一个开放的文件格式,用于表示machine learning模型,以便它们能够在不同的AI框架和硬件之间使用。
ONNX模型可用于在不同框架之间无缝过渡。例如,在PyTorch中训练的deep learning模型可以导出为ONNX格式,然后轻松导入到TensorFlow中。
或者,ONNX模型可以与ONNX Runtime配合使用。ONNX Runtime是一个通用的跨平台机器学习模型加速器,兼容PyTorch、TensorFlow、scikit-learn等框架。
ONNX Runtime 通过利用特定硬件功能来优化 ONNX 模型的执行。这种优化使得模型能够在包括 CPU、GPU 和专用加速器在内的各种硬件平台上高效、高性能地运行。
无论独立使用还是与ONNX Runtime搭配使用,ONNX都为机器学习model deployment和兼容性提供了一个灵活的解决方案。
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 模型导出为 ONNX#
你可以通过将YOLO26模型转换为ONNX格式来扩展模型兼容性和部署灵活性。Ultralytics YOLO26提供了一个简单的导出流程,可以显着增强你的模型在不同平台上的性能。
安装#
要安装所需的软件包,请运行:
# Install the required package for YOLO26
pip install ultralytics有关安装过程的详细说明和最佳实践,请查看我们的YOLO26 Installation guide。在安装 YOLO26 所需的软件包时,如果遇到任何困难,请参考我们的Common Issues guide获取解决方案和提示。
用法#
在深入了解使用说明之前,请务必查看 YOLO26 models offered by Ultralytics。这将帮助你为你的项目需求选择最合适的模型。
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。替代了已弃用的half/int8标志。 |
data | str | None | 用于 INT8 校准的数据集 YAML;分类则需要数据集目录或内置数据集名称。如果在 quantize=8 中省略此项,Ultralytics 将为模型任务选择默认的校准数据集。 |
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 | False | 添加非极大值抑制 (NMS),这是准确高效的检测后处理所必需的。 |
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推理服务器:了解如何使用NVIDIA的Triton推理服务器部署你的ONNX模型,以实现高性能、可扩展的部署。
总结#
在本指南中,你已了解如何将 Ultralytics YOLO26 模型导出为 ONNX 格式,以增强其在各种平台上的互操作性和性能。你还初步了解了 ONNX Runtime 和 ONNX 部署选项。
ONNX导只是Ultralytics YOLO26支持的众多export formats之一,允许你在几乎任何环境中部署你的模型。根据你的具体需求,你可能还想探索其他导出选项,例如用于获得最大GPU性能的TensorRT,或用于Apple设备的CoreML。
有关用法的更多详细信息,请访问ONNX官方文档。
此外,如果你想了解有关其他Ultralytics YOLO26集成的更多信息,请访问我们的integration guide page。你将在那里找到大量有用的资源和见解。
常见问题解答#
要使用 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")有关更多详细信息,请访问export documentation。
使用 ONNX Runtime 部署 YOLO26 模型具有以下优势:
- 跨平台兼容性:ONNX Runtime 支持多种平台,如 Windows、macOS 和 Linux,确保你的模型在不同环境下平稳运行。
- 硬件加速:ONNX Runtime 可以利用针对 CPU、GPU 和专用加速器的特定硬件优化,从而提供高性能推理。
- 框架互操作性:在流行的框架(如PyTorch或TensorFlow)中训练的模型可以轻松转换为ONNX格式并使用ONNX Runtime运行。
- 性能优化:与原生 PyTorch 模型相比,ONNX Runtime 可提供高达 3 倍的 CPU 加速,使其成为 GPU 资源受限的部署场景的理想选择。
查看ONNX Runtime文档以了解更多信息。
导出为 ONNX 的 YOLO26 模型可以部署在多种平台上,包括:
- CPU:利用 ONNX Runtime 进行优化的 CPU 推理。
- GPU:利用 NVIDIA CUDA 实现高性能 GPU 加速。
- 边缘设备:在边缘和移动设备上运行轻量级模型,实现实时的端侧推理。
- Web 浏览器:直接在 Web 浏览器中执行模型,用于交互式 Web 应用。
- 云服务:部署在支持 ONNX 格式的云平台上,实现可扩展的推理。
有关更多信息,请浏览我们的model deployment options指南。
为 Ultralytics YOLO26 模型使用 ONNX 格式提供了诸多好处:
- 互操作性:ONNX 允许在不同的机器学习框架之间无缝迁移模型。
- 性能优化:ONNX Runtime 可以通过利用特定硬件优化来提升模型性能。
- 灵活性:ONNX 支持各种部署环境,使你能够在不进行修改的情况下在不同平台上使用同一个模型。
- 标准化:ONNX 提供了一种在行业内得到广泛支持的标准格式,确保了长期兼容性。
请参阅关于exporting YOLO26 models to ONNX的综合指南。
在将 YOLO26 模型导出为 ONNX 时,你可能会遇到依赖项不匹配或算子不支持等常见问题。要排查这些问题:
- 验证你是否已安装了所需依赖项的正确版本。
- 检查官方ONNX documentation以了解支持的操作符和功能。
- 查看错误消息以寻找线索,并查阅Ultralytics Common Issues guide。
- 尝试使用不同的导出参数(如
simplify=True)或调整opset版本。 - 对于动态输入大小问题,请在导出期间设置
dynamic=True。
如果问题仍然存在,请联系 Ultralytics 支持团队以获取进一步协助。