ONNX (Open Neural Network Exchange)
探索开放神经网络交换(ONNX)格式。了解如何将 Ultralytics YOLO26 导出为 ONNX,以实现快速跨平台部署和硬件优化。
**ONNX(开放神经网络交换)**是一种用于表示机器学习模型的开源格式,可实现不同 AI 框架和工具之间的互操作性。它充当深度学习领域的通用翻译器,让开发者能够在一个框架(例如 PyTorch、TensorFlow 或 Scikit-learn)中构建模型,然后无缝部署到针对推理进行优化的另一个环境中。通过定义一组通用算子和标准文件格式,ONNX 消除了复杂的自定义转换脚本需求,而过去要将模型从研究环境迁移到生产环境通常必须编写这类脚本。这种灵活性对于现代 AI 工作流至关重要,因为模型训练可能在功能强大的云端 GPU 上进行,而部署目标则可能是边缘设备、移动电话或 Web 浏览器等各种硬件。
ONNX 在现代 AI 中的作用#
在人工智能快速发展的领域中,研究人员和工程师通常会在开发生命周期的不同阶段使用不同的工具。数据科学家可能更喜欢 PyTorch 在实验和训练方面的灵活性,而生产工程师则需要 TensorRT 或 OpenVINO 在部署方面经过优化的性能。如果没有标准交换格式,在这些生态系统之间迁移模型就会变得困难且容易出错。
ONNX 通过提供统一的计算图定义来弥合这一差距。当模型导出为 ONNX 时,它会被序列化为一种与框架无关的格式,其中包含网络结构(层、连接)和参数(权重、偏置)。这样一来,专门针对硬件加速进行调优的推理引擎(例如 ONNX Runtime)就能在包括 Linux、Windows、macOS、Android 和 iOS 在内的多个平台上高效执行模型。
使用 ONNX 的主要优势#
采用 ONNX 格式可为 AI 项目带来多项战略优势:
- **框架互操作性:**开发者可以在不同框架之间切换,而不必被锁定在单一生态系统中。你可以使用易于使用的 Ultralytics Python API 训练模型,然后将其导出,以便在 C++ 应用程序或基于 Web 的 JavaScript 环境中使用。
- **硬件优化:**许多硬件制造商都提供可与 ONNX 对接的专用执行提供程序。这意味着,借助 OpenVINO 或 CoreML 等工具,单个
.onnx文件就能在 NVIDIA GPU、Intel CPU 或移动 NPU(神经处理单元)上实现加速。 - **更快的推理:**ONNX Runtime 会应用图优化(例如节点融合和常量折叠),从而显著降低推理延迟。这对于自动驾驶汽车或高速生产线等实时应用至关重要。
- **简化部署:**工程团队无需针对每个训练框架维护独立的部署流水线,而是可以将 ONNX 作为交付格式进行标准化,从而简化 ModelOps 流程。
实际应用#
ONNX 的多功能性使其成为众多行业中的常用工具。以下是两个具体应用示例:
1. 移动设备上的边缘 AI#
假设有一款用于实时作物健康监测的移动应用。模型可能使用大型植物图像数据集,在功能强大的云端服务器上进行训练。然而,该应用需要在农民的智能手机上离线运行。通过将训练好的模型导出为 ONNX,开发者可以使用 ONNX Runtime Mobile 将其集成到移动应用中。这样,手机的处理器就能在本地执行目标检测,即时识别害虫或疾病,无需互联网连接。
2. 跨平台 Web 推理#
在电子商务中,“虚拟试穿”功能可能会使用姿态估计将服装叠加到用户的摄像头画面上。该模型可能在 Python 中完成训练,但部署目标是 Web 浏览器。借助 ONNX,模型可以通过 ONNX Runtime Web 进行转换,并直接在用户的浏览器中运行。该过程利用客户端设备的计算能力(WebGL 或 WebAssembly)执行计算机视觉任务,同时确保体验流畅并保护隐私,因为视频数据始终不会离开用户的计算机。
与相关术语的比较#
了解 ONNX 与其他模型格式和工具之间的区别很有帮助:
- **与 TensorRT 的比较:**ONNX 是一种交换格式,而 TensorRT 是专为 NVIDIA GPU 设计的推理引擎和优化器。一种常见工作流是先将模型导出为 ONNX,然后将该 ONNX 文件解析到 TensorRT 中,以便在 NVIDIA 硬件上实现最大吞吐量。
- **与 TensorFlow SavedModel 的比较:**SavedModel 是 TensorFlow 的原生序列化格式。虽然它在 Google 生态系统中功能稳健,但其通用兼容性不如 ONNX。通常可以使用相关工具将 SavedModel 转换为 ONNX,以获得更广泛的平台支持。
- 与 CoreML 的比较:CoreML 是 Apple 用于设备端机器学习的框架。虽然二者有所不同,但模型通常会先从 PyTorch 转换为 ONNX,再从 ONNX 转换为 CoreML(或直接转换),以便在 iPhone 和 iPad 上高效运行。
使用 Ultralytics 导出为 ONNX#
Ultralytics 生态系统简化了将 YOLO26 等先进模型转换为 ONNX 格式的过程。导出功能已直接集成到库中,可自动处理复杂的计算图遍历和算子映射。
以下示例演示了如何将预训练的 Ultralytics YOLO26 模型导出为 ONNX 格式以便部署:
from ultralytics import YOLO
# Load the YOLO26n model (Nano version recommended for edge deployment)
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
# The 'dynamic' argument enables variable input sizes
path = model.export(format="onnx", dynamic=True)
print(f"Model exported successfully to: {path}")导出后,你可以在 Ultralytics Platform 中使用此 .onnx 文件进行管理,也可以直接使用 ONNX Runtime 将其部署到边缘设备,从而让高性能计算机视觉几乎能够应用于任何环境。









