ONNX (Open Neural Network Exchange)
探索开放神经网络交换 (ONNX) 格式。学习如何将 Ultralytics YOLO26 导出为 ONNX,以实现快速、跨平台的部署和硬件优化。
ONNX (Open Neural Network Exchange) 是一个开源格式,旨在表示机器学习模型,允许各种 AI 框架和工具之间实现互操作性。它充当深度学习的通用翻译器,使开发者能够在一个框架中构建模型(例如 PyTorch、TensorFlow 或 Scikit-learn),并在另一个针对推理优化的环境中无缝部署它们。通过定义一组通用的算子和标准的文格式,ONNX 消除了过去将模型从研究推向生产时所需的复杂、定制转换脚本。这种灵活性对于现代 AI 工作流至关重要,在这些工作流中,训练可能发生在强大的云端 GPU 上,而部署则面向边缘设备、手机或网页浏览器等多样化硬件。
ONNX 在现代 AI 中的作用#
在快速演进的人工智能领域中,研究人员和工程师经常在开发生命周期的不同阶段使用不同的工具。数据科学可能会青睐 PyTorch 在实验和训练方面的灵活性,而生产工程师则需要 TensorRT 或 OpenVINO 优化后的性能来进行部署。如果没有标准的交换格式,在这些生态系统之间迁移模型将会变得困难且容易出错。
ONNX 通过提供计算图的共享定义来弥补这一差距。当模型被导出为 ONNX 时,它会被序列化为一个以与框架无关的方式捕获网络结构(层、连接)和参数(权重、偏置)的格式。这使得专门针对硬件加速调优的推理引擎(例如 ONNX Runtime)能够在多个平台(包括 Linux、Windows、macos、Android 和 iOS)上高效执行模型。
使用 ONNX 的主要优势#
采用 Open Neural Network Exchange 格式为 AI 项目提供了多项战略优势:
- **框架互操作性:**开发者可以在不同的框架之间切换,而不会被锁死在单一生态系统中。你可以使用用户友好的 Ultralytics Python API 训练模型,并将其导出以用于 C++ 应用程序或基于网页的 JavaScript 环境中。
- **硬件优化:**许多硬件制造商提供与 ONNX 接口的专用执行提供程序。这意味着单个
.onnx文件可以使用诸如 OpenVINO 或 CoreML 之类的工具在 NVIDIA GPU、Intel CPU 或移动 NPU(神经网络处理单元)上加速。 - **更快的推理:**ONNX Runtime 应用了图形优化(例如节点融合和常量折叠),可以显著减少推理延迟。这对于自动驾驶车辆或高速制造生产线等实时应用至关重要。
- **简化的部署:**工程团队无需为每个训练框架维护单独的部署流水线,而是可以标准化采用 ONNX 作为交付格式,从而简化 ModelOps 流程。
实际应用#
ONNX 的通用性使其成为各行各业的主流工具。以下是其应用的两个具体示例:
移动设备上的边缘 AI#
考虑一个专为实时农作物健康监测设计的移动应用程序。该模型可能使用包含大量植物图像数据集的强大云服务器进行训练。然而,该应用程序需要在农民的智能手机上离线运行。通过将训练好的模型导出为 ONNX,开发者可以使用 ONNX Runtime Mobile 将其集成到移动应用中。这使得手机处理器能够在本地运行目标检测,即时识别病虫害而无需互联网连接。
跨平台 Web 推理#
在电子商务中,“虚拟试穿”功能可能会使用姿态估计将服装叠加在用户的网络摄像头画面上。训练这个模型可能发生在 Python 中,但部署目标是网页浏览器。使用 ONNX,模型可以通过 ONNX Runtime Web 转换并直接在用户的浏览器中运行。这利用了客户端设备的性能(WebGL 或 WebAssembly)来执行计算机视觉任务,确保流畅、保护隐私的体验,因为视频数据永远不会离开用户的计算机。
与相关术语的比较#
区分 ONNX 与其他模型格式和工具很有帮助:
- **对比 TensorRT:**虽然 ONNX 是一种交换格式,但 TensorRT 是一个专为 NVIDIA GPU 设计的推理引擎和优化器。常见的工作流包括首先将模型导出为 ONNX,然后将该 ONNX 文件解析到 TensorRT 中,以在 NVIDIA 硬件上实现最大吞吐量。
- **对比 TensorFlow SavedModel:**SavedModel 是 TensorFlow 的原生序列化格式。虽然在 Google 生态系统中很强大,但它的通用兼容性不如 ONNX。通常存在将 SavedModels 转换为 ONNX 的工具,以获得更广泛的平台支持。
- 对比 CoreML:CoreML 是苹果用于端侧机器学习的框架。尽管它们不同,但模型经常从 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}")一旦导出,这个 .onnx 文件就可以用于 Ultralytics Platform 进行管理,或者使用 ONNX Runtime 直接部署到边缘设备,从而在几乎任何环境中都能实现高性能的计算机视觉。






