YOLOv5 包含一个强大的模型导出系统,可将训练好的 PyTorch 模型转换为各种部署格式。这使得 YOLOv5 模型可以在不同的硬件平台、边缘设备、浏览器、移动应用程序和服务器环境中运行。本文档介绍了导出过程以及 YOLOv5 模型在 PyTorch 生态系统之外进行部署的支持格式。
有关训练模型的信息,请参阅 训练。有关使用 PyTorch 模型进行推理的信息,请参阅 推理。
YOLOv5 支持导出为多种格式,每种格式都针对特定的部署场景进行了优化
| 格式 | 文件扩展名 | 主要用例 | CPU | 显卡 |
|---|---|---|---|---|
| PyTorch | .pt | 训练/推理的默认格式 | ✓ | ✓ |
| TorchScript | .torchscript | 无需 Python 依赖即可部署 | ✓ | ✓ |
| ONNX | .onnx | 跨框架兼容性 | ✓ | ✓ |
| OpenVINO | _openvino_model | Intel CPU/VPU/FPGA 加速 | ✓ | ✗ |
| TensorRT | .engine | NVIDIA GPU加速 | ✗ | ✓ |
| CoreML | .mlmodel/.mlpackage | Apple 设备(iOS/macOS) | ✓ | ✗ |
| TF SavedModel | _saved_model | TensorFlow 生态系统 | ✓ | ✓ |
| TF GraphDef | .pb | TensorFlow 部署 | ✓ | ✓ |
| TF Lite | .tflite | 移动/边缘设备 | ✓ | ✗ |
| TF Edge TPU | _edgetpu.tflite | Google Coral TPU 设备 | ✓ | ✗ |
| TF.js | _web_model | 基于浏览器的推理 | ✓ | ✗ |
| PaddlePaddle | _paddle_model | 百度 PaddlePaddle 生态系统 | ✓ | ✓ |
YOLOv5 的导出系统采用模块化方法,通过专用函数处理每种格式,同时保持一致的接口。
脚本 export.py 提供了一个用于导出模型的命令行界面
常见的导出选项包括
| 选项 | 描述 |
|---|---|
--weights | 模型权重路径(.pt 文件) |
--include | 要导出的格式(空格分隔) |
--imgsz | 图像尺寸,格式为 height,width(例如 640,640) |
--batch-size | 导出批次大小(默认值:1) |
--device | 要使用的设备(例如 cpu、0、0,1,2,3) |
--half | 使用 FP16 半精度(仅 GPU) |
--int8 | 启用 INT8 量化(CoreML/TF/OpenVINO) |
--dynamic | 启用动态轴(ONNX/TF/TensorRT) |
--simplify | 简化 ONNX 模型 |
--opset | ONNX opset 版本(默认值:17) |
来源:export.py1502-1533 export.py1-45
导出系统采用模块化架构设计,每种格式都有其专用的导出函数和错误处理。
来源:export.py185-225 export.py1277-1481
大多数导出函数都接受这些通用参数
model:要导出的 PyTorch 模型im:用于跟踪的示例输入张量file:输出文件路径half:启用 FP16 精度dynamic:启用动态尺寸simplify:简化模型结构(适用的情况下)此外,一些格式支持特定参数
来源:export.py229-280 export.py1-45
类 DetectMultiBackend 为任何导出格式的模型推理提供了一个统一的接口。
脚本 detect.py 通过 DetectMultiBackend 自动处理不同的模型格式
TorchScript 允许 PyTorch 模型进行序列化,并为无需 Python 依赖的部署进行优化。
主要功能
ONNX(Open Neural Network Exchange)提供跨框架兼容性。
主要功能
NVIDIA TensorRT 提供 GPU 加速推理,吞吐量高。
主要功能
Apple CoreML 格式支持在 iOS 和 macOS 设备上进行部署。
主要功能
YOLOv5 支持多种 TensorFlow 部署选项
TF SavedModel
TF GraphDef (.pb)
TF Lite
TF Edge TPU
TF.js
主要功能
Intel OpenVINO 优化 Intel 硬件(CPU、VPU、FPGA)的模型。
主要功能
Baidu PaddlePaddle 格式,用于在 PaddlePaddle 生态系统中进行部署。
| 问题 | 解决方案 |
|---|---|
| CUDA 内存不足 | 减小批次大小或图像尺寸 |
| 动态形状错误 | 为可变批次大小设置 --dynamic |
| INT8 量化失败 | 使用 --data 确保数据集路径正确 |
| TensorRT 兼容性 | 检查 TensorRT 版本(需要 ≥7.0.0) |
| 导出挂起 | 检查模型与目标格式的兼容性 |
| 推理速度问题 | 尝试不同的精度选项(FP16/INT8) |
来源:export.py633-641 export.py371-380
量化模型通过降低精度来减小尺寸并提高推理速度
--half(提高 GPU 速度)--int8(进一步减小尺寸,可能会影响精度)对于 INT8 量化,需要校准数据集来确定最佳量化参数
来源:export.py883-907 export.py428-470
对于 TensorFlow 格式,NMS 可以包含在导出的模型中
对于与类别无关的 NMS
CoreML 模型可以包含一个完整的带有非极大值抑制的管道
导出的模型可用于各种框架和部署系统