菜单

模型导出

相关源文件

YOLOv5 包含一个强大的模型导出系统,可将训练好的 PyTorch 模型转换为各种部署格式。这使得 YOLOv5 模型可以在不同的硬件平台、边缘设备、浏览器、移动应用程序和服务器环境中运行。本文档介绍了导出过程以及 YOLOv5 模型在 PyTorch 生态系统之外进行部署的支持格式。

有关训练模型的信息,请参阅 训练。有关使用 PyTorch 模型进行推理的信息,请参阅 推理

支持的导出格式

YOLOv5 支持导出为多种格式,每种格式都针对特定的部署场景进行了优化

格式文件扩展名主要用例CPU显卡
PyTorch.pt训练/推理的默认格式
TorchScript.torchscript无需 Python 依赖即可部署
ONNX.onnx跨框架兼容性
OpenVINO_openvino_modelIntel CPU/VPU/FPGA 加速
TensorRT.engineNVIDIA GPU加速
CoreML.mlmodel/.mlpackageApple 设备(iOS/macOS)
TF SavedModel_saved_modelTensorFlow 生态系统
TF GraphDef.pbTensorFlow 部署
TF Lite.tflite移动/边缘设备
TF Edge TPU_edgetpu.tfliteGoogle Coral TPU 设备
TF.js_web_model基于浏览器的推理
PaddlePaddle_paddle_model百度 PaddlePaddle 生态系统

来源:export.py145-182

导出流程概览

YOLOv5 的导出系统采用模块化方法,通过专用函数处理每种格式,同时保持一致的接口。

导出工作流程图

来源:export.py277-1038

命令行用法

脚本 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 模型
--opsetONNX opset 版本(默认值:17)

来源:export.py1502-1533 export.py1-45

示例命令

来源:export.py25-44

导出架构

导出系统采用模块化架构设计,每种格式都有其专用的导出函数和错误处理。

来源:export.py185-225 export.py1277-1481

通用导出参数

大多数导出函数都接受这些通用参数

  • model:要导出的 PyTorch 模型
  • im:用于跟踪的示例输入张量
  • file:输出文件路径
  • half:启用 FP16 精度
  • dynamic:启用动态尺寸
  • simplify:简化模型结构(适用的情况下)

此外,一些格式支持特定参数

  • INT8 量化(CoreML、TFLite、OpenVINO)
  • 非极大值抑制(NMS)包含(TensorFlow 格式)
  • 工作区大小(TensorRT)

来源:export.py229-280 export.py1-45

使用导出的模型

DetectMultiBackend 为任何导出格式的模型推理提供了一个统一的接口。

来源:models/common.py459-813

使用导出的模型进行推理

脚本 detect.py 通过 DetectMultiBackend 自动处理不同的模型格式

来源:models/common.py691-768

特定格式的详细信息

TorchScript

TorchScript 允许 PyTorch 模型进行序列化,并为无需 Python 依赖的部署进行优化。

主要功能

  • 可选的移动优化
  • 保留模型元数据(步长、类别名称)
  • 适用于 C++ 部署

来源:export.py229-281

ONNX

ONNX(Open Neural Network Exchange)提供跨框架兼容性。

主要功能

  • 可调 opset 版本
  • 动态轴支持
  • 可选的模型简化
  • 元数据保留

来源:export.py285-381

TensorRT

NVIDIA TensorRT 提供 GPU 加速推理,吞吐量高。

主要功能

  • FP16 精度选项
  • 工作区大小控制
  • 动态形状支持
  • 用于优化的计时缓存

来源:export.py596-702

CoreML

Apple CoreML 格式支持在 iOS 和 macOS 设备上进行部署。

主要功能

  • INT8/FP16 量化
  • NMS 包含选项
  • 支持旧版 .mlmodel 或新版 .mlpackage 格式

来源:export.py526-592

TensorFlow 格式

YOLOv5 支持多种 TensorFlow 部署选项

  1. TF SavedModel

  2. TF GraphDef (.pb)

  3. TF Lite

  4. TF Edge TPU

  5. TF.js

主要功能

  • TFLite/EdgeTPU 的 INT8 量化
  • 非极大值抑制(NMS)包含
  • 用于量化的代表性数据集支持

来源:export.py706-1038

OpenVINO

Intel OpenVINO 优化 Intel 硬件(CPU、VPU、FPGA)的模型。

主要功能

  • FP16 精度选项
  • INT8 量化
  • 元数据保留

来源:export.py385-473

PaddlePaddle

Baidu PaddlePaddle 格式,用于在 PaddlePaddle 生态系统中进行部署。

来源:export.py477-522

常见导出问题和解决方案

问题解决方案
CUDA 内存不足减小批次大小或图像尺寸
动态形状错误为可变批次大小设置 --dynamic
INT8 量化失败使用 --data 确保数据集路径正确
TensorRT 兼容性检查 TensorRT 版本(需要 ≥7.0.0)
导出挂起检查模型与目标格式的兼容性
推理速度问题尝试不同的精度选项(FP16/INT8)

来源:export.py633-641 export.py371-380

高级导出选项

量化

量化模型通过降低精度来减小尺寸并提高推理速度

  • FP16(半精度):设置 --half(提高 GPU 速度)
  • INT8:设置 --int8(进一步减小尺寸,可能会影响精度)

对于 INT8 量化,需要校准数据集来确定最佳量化参数

来源:export.py883-907 export.py428-470

非极大值抑制

对于 TensorFlow 格式,NMS 可以包含在导出的模型中

对于与类别无关的 NMS

来源:export.py776-788

CoreML 管道与 NMS

CoreML 模型可以包含一个完整的带有非极大值抑制的管道

来源:export.py1103-1273

与其他系统集成

导出的模型可用于各种框架和部署系统

  1. TensorFlow Serving(使用 SavedModel 格式)
  2. NVIDIA Triton 推理服务器(支持多种格式)
  3. OpenVINO 推理引擎(使用 IR 格式)
  4. TensorFlow.js(用于浏览器部署)
  5. 移动应用程序(使用 CoreML 或 TFLite)
  6. 边缘设备(使用 TFLite、EdgeTPU 或 OpenVINO)

来源:export.py672-681