1.概述
训练神经网络模型的最终目标是将其部署到实际应用场景中。Ultralytics YOLO11 中的 “导出模式” 提供了多样化的选项,可将训练完成的模型导出为不同格式,使其能在各类平台和设备上实现部署。本文将逐步带您了解模型导出的细节,展示如何实现模型的最大兼容性与最优性能。
2.为何选择 YOLO11 的导出模式?
- 多功能性:可导出为多种格式,包括 ONNX、TensorRT、CoreML 等。
- 高性能:借助 TensorRT 可实现高达 5 倍的 GPU 加速,通过 ONNX 或 OpenVINO 可获得 3 倍的 CPU 加速。
- 兼容性:让模型能够在众多硬件和软件环境中通用部署。
- 易用性:简单的命令行界面(CLI)和 Python API,实现快速便捷的模型导出。
导出模式的核心功能
以下是一些突出功能:
- 一键导出:通过简单命令即可导出为不同格式。
- 批量导出:可导出支持批量推理的模型。
- 优化推理:导出的模型经过优化,推理速度更快。
导出格式在不同环境提高性能
- 导出到ONNX或OpenVINO格式,在CPU下能提高至3倍性能
- 导出到TernsorRT,在GPU下能提高至5倍性能
3.参考用例
例如,可以使用命令行或者Python代码,把YOLO pt模型导出到ONNX或者TersonRT格式:
Python:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom trained model
# Export the model
model.export(format="onnx")
CLI:
yolo export model=yolo11n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model
4.导出参数
此表详细列出了将 YOLO 模型导出为不同格式时可用的配置和选项。这些设置对于优化导出模型的性能、大小以及在各种平台和环境中的兼容性至关重要。正确的配置可确保模型能够以最佳效率部署到目标应用中。
配置和选项:指模型导出过程中的各项参数设置,包括格式选择、精度控制、优化开关等,是决定导出效果的关键因素。
最佳效率:在模型部署语境中通常指平衡推理速度、准确率和资源占用(如内存、功耗)后的最优状态,确保模型在实际应用中既快速又可靠。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| format | str | ‘torchscript’ | 导出模型的目标格式,如 ‘onnx’、‘torchscript’、 ‘engine’(TensorRT)等。每种格式适用于不同的部署环境。 |
| imgsz | int 或 tuple | 640 | 模型输入的期望图像尺寸。整数表示正方形图像(如 640 表示 640×640),元组 (height, width) 表示特定尺寸。 |
| keras | bool | False | 启用导出为 Keras 格式的 TensorFlow SavedModel,提供与 TensorFlow 服务和 API 的兼容性。 |
| optimize | bool | False | 导出为 TorchScript 时应用移动设备优化,可能减小模型大小并提高推理性能。与 NCNN 格式或 CUDA 设备不兼容。 |
| half | bool | False | 启用 FP16(半精度)量化,减小模型大小并可能在支持的硬件上加速推理。与 INT8 量化或仅 CPU 的 ONNX 导出不兼容。 |
| int8 | bool | False | 激活 INT8 量化,进一步压缩模型并在边缘设备上加速推理,同时保持最小精度损失。与 TensorRT 一起使用时,执行训练后量化(PTQ)。 |
| dynamic | bool | False | 允许 ONNX、TensorRT 和 OpenVINO 导出支持动态输入尺寸,增强处理不同图像维度的灵活性。使用 TensorRT 与 INT8 时自动设为 True。 |
| simplify | bool | True | 使用 onnxslim 简化 ONNX 导出的模型图,可能提高推理引擎的性能和兼容性。 |
| opset | int | None | 指定 ONNX opset 版本,以兼容不同的 ONNX 解析器和运行时。未设置时使用最新支持的版本。 |
| workspace | float 或 None | None | 为 TensorRT 优化设置最大工作区大小(GiB),平衡内存使用和性能。使用 None 时由 TensorRT 自动分配,最高可达设备最大值。 |
| nms | bool | False | 在支持的情况下(见导出格式)向导出模型添加非极大值抑制(NMS),提高检测后处理效率。端到端模型不可用。 |
| batch | int | 1 | 指定导出模型的批量推理大小或导出模型在预测模式下将同时处理的最大图像数量。对于 Edge TPU 导出,自动设为 1。 |
| device | str | None | 指定导出设备:GPU(device=0)、CPU(device=cpu)、Apple 芯片的 MPS(device=mps)或 NVIDIA Jetson 的 DLA(device=dla:0 或 device=dla:1)。TensorRT 导出自动使用 GPU。 |
| data | str | ‘coco8.yaml’ | 数据集配置文件路径(默认:coco8.yaml),对 INT8 量化校准至关重要。启用 INT8 但未指定时,将分配默认数据集。 |
| fraction | float | 1.0 | 指定用于 INT8 量化校准的数据集比例。允许在完整数据集的子集上进行校准,适用于实验或资源有限的情况。启用 INT8 但未指定时,将使用完整数据集。 |
调整这些参数可以定制导出过程,以满足特定需求,如部署环境、硬件限制和性能目标。选择合适的格式和设置对于在模型大小、速度和准确性之间取得最佳平衡至关重要。
5.导出格式
以下表格列出了 YOLO11 的可用导出格式。您可以使用format参数导出为任何格式,例如format='onnx'或format='engine'。您可以直接在导出的模型上进行预测或验证,例如yolo predict model=yolo11n.onnx。导出完成后,会显示模型的使用示例。
| 格式 | format 参数 | 模型 | 元数据 | 参数 |
|---|---|---|---|---|
| PyTorch | - | yolo11n.pt | ✅ | - |
| TorchScript | torchscript | yolo11n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo11n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo11n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo11n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo11n.mlpackage | ✅ | imgsz, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo11n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, device |
| TF GraphDef | pb | yolo11n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo11n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo11n_edgetpu.tflite | ✅ | imgsz, device |
| TF.js | tfjs | yolo11n_web_model/ | ✅ | imgsz, half, int8, nms, batch, device |
| PaddlePaddle | paddle | yolo11n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo11n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo11n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo11n_imx_model/ | ✅ | imgsz, int8, data, fraction, device |
| RKNN | rknn | yolo11n_rknn_model/ | ✅ | imgsz, batch, name, device |
6.ONNX简介
ONNX (Open Neural Network Exchange)是一种用于表示机器学习模型的开放格式。 ONNX 定义了一组通用的运算符 - 机器学习和深度学习模型的构建块 - 以及一个通用的文件格式,使 AI 开发人员能够使用各种框架、工具、运行时和编译器来使用模型。
详细内容可以阅读:https://onnx.org.cn/onnx/intro/index.html
7.TensorRT简介
TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个C++推理框架。我们利用Pytorch、TF或者其他框架训练好的模型,可以转化为TensorRT的格式,然后利用TensorRT推理引擎去运行模型,从而提升这个模型在英伟达GPU上运行的速度,速度提升的比例是比较可观的。
NVIDIA® TensorRT™ 是一个工具生态系统,可供开发者实现高性能深度学习推理。
与仅使用 CPU 的平台相比,推理速度提高了 36 倍。
TensorRT 基于 NVIDIA® CUDA® 并行编程模型构建,包含用于优化在所有主要框架上训练的神经网络模型的库,对这些模型进行高精度校正以获得较低的精度,并将其部署到超大规模数据中心、工作站、笔记本电脑和边缘设备。TensorRT 使用量化、层和张量融合以及内核调优等技术来优化推理。
TensorRT 为使用量化感知训练技术训练的模型提供训练后量化和支持,以优化深度学习推理的 FP8、FP4 和整数格式。推理精度的降低可显著降低延迟,满足许多实时服务以及自主和嵌入式应用程序的需求。
中文资料可以阅读:https://developer.nvidia.cn/tensorrt
2315

被折叠的 条评论
为什么被折叠?



