【yolov8】模型导出----pytorch导出为onnx模型

embedded/2024/12/23 8:25:17/

【yolov8】模型导出

  • 一、为什么要使用yolo的导出模式
  • 二、确保安装必要的库:
  • 三、yolov8模型导出
    • 3.1 不同格式配置参数
    • 3.2 导出格式
  • 四、导出模型性能优化
    • 4.1 使用TensorRT 导出模型有什么好处?
    • 4.2导出YOLOv8 模型时,如何启用 INT8 量化?
    • 4.3 为什么输出模型时动态输入尺寸很重要?
    • 4.4 优化模型性能需要考虑哪些关键的导出参数?
  • 五、问题
  • 六、疑问

训练模型的最终目标是将其部署到实际应用程序中。Ultralytics YOLOv8 中的导出模式提供了多种选项,用于将训练后的模型导出为不同的格式,使其可部署在各种平台和设备上。本综合指南旨在引导您了解模型导出的细微差别,展示如何实现最大的兼容性和性能。

一、为什么要使用yolo的导出模式

  • 多面性:导出为多种格式,包括 ONNX、TensorRT、CoreML 等
  • 性能:使用 TensorRT 获得高达 5 倍的 GPU 加速,使用 ONNX 或 OpenVINO 获得 3 倍的 CPU 加速。
  • 兼容性:使您的模型可在众多硬件和软件环境中普遍部署。
  • 易用性:简单的 CLI 和 Python API,用于快速直接的模型导出。

二、确保安装必要的库:

确保你已经安装了PyTorch和ONNX库。可以使用以下命令安装:

pip install torch torchvision onnx

三、yolov8模型导出

from ultralytics import YOLO# Load a model
model = YOLO("yolov8n.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=yolov8n.pt format=onnx  # export official model
yolo export model=path/to/best.pt format=onnx  # export custom trained model

3.1 不同格式配置参数

下表详细介绍了将YOLO 模型导出为不同格式时可用的配置和选项。这些设置对于优化导出模型的性能、大小以及在不同平台和环境中的兼容性至关重要。正确的配置可确保模型以最佳效率部署到预定应用中。

论据类型默认值说明
formatstr'torchscript'导出模型的目标格式,例如 'onnx', 'torchscript', 'tensorflow'或其他,定义与各种部署环境的兼容性。
imgszinttuple640模型输入所需的图像尺寸。对于正方形图像,可以是一个整数,或者是一个元组 (height, width) 了解具体尺寸。
kerasboolFalseEnables export to Keras format for TensorFlow SavedModel, providing compatibility with TensorFlow serving and APIs.
optimizeboolFalse在导出到TorchScript 时,应用针对移动设备的优化,可能会减小模型大小并提高性能。
halfboolFalse启用 FP16(半精度)量化,在支持的硬件上减小模型大小并可能加快推理速度。
int8boolFalseActivates INT8 quantization, further compressing the model and speeding up inference with minimal accuracy loss, primarily for edge devices.
dynamicboolFalse允许为ONNX 、TensorRT 和OpenVINO 导出动态输入尺寸,提高了处理不同图像尺寸的灵活性。
simplifyboolTrue简化模型图 ONNX 导出方式 onnxslim,可能会提高性能和兼容性。
opsetintNone指定ONNX opset 版本,以便与不同的ONNX 解析器和运行时兼容。如果未设置,则使用最新的支持版本。
workspacefloat4.0为TensorRT 优化设置最大工作区大小(GiB),以平衡内存使用和性能。
nmsboolFalse在CoreML 导出中添加非最大值抑制 (NMS),这对精确高效的检测后处理至关重要。
batchint1指定导出模型的批量推理大小,或导出模型将同时处理的图像的最大数量。 predict 模式。

3.2 导出格式

YOLOv8 可用的导出格式如下表所示。您可以使用 format 参数,即 format='onnx'format='engine'.您可以直接对导出的模型进行预测或验证,即 yolo predict model=yolov8n.onnx.导出完成后会显示模型的使用示例。

Format格式format ArgumentModel 模型MetadataArguments
PyTorch-yolov8n.pt-
TorchScripttorchscriptyolov8n.torchscriptimgsz, optimize, batch
ONNXonnxyolov8n.onnximgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolov8n_openvino_model/imgsz, half, int8, batch
TensorRTengineyolov8n.engineimgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolov8n.mlpackageimgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolov8n_saved_model/imgsz, keras, int8, batch
TF GraphDefpbyolov8n.pbimgsz, batch
TF Litetfliteyolov8n.tfliteimgsz, half, int8, batch
TF Edge TPUedgetpuyolov8n_edgetpu.tfliteimgsz
TF.jstfjsyolov8n_web_model/imgsz, half, int8, batch
PaddlePaddlepaddleyolov8n_paddle_model/imgsz, batch
NCNNncnnyolov8n_ncnn_model/imgsz, half, batch

四、导出模型性能优化

4.1 使用TensorRT 导出模型有什么好处?

使用TensorRT 导出模型可显著提高性能。YOLOv8 导出到TensorRT 的模型速度最高可达GPU 的 5 倍,是实时推理应用的理想选择。

  • **多功能性:**针对特定硬件设置优化模型。
  • **速度:**通过高级优化实现更快的推理。
  • **兼容性:**可与NVIDIA 硬件顺利集成。

YOLOv8__INT8__97">4.2导出YOLOv8 模型时,如何启用 INT8 量化?

INT8 量化是压缩模型和加快推理速度的绝佳方法,尤其是在边缘设备上。下面介绍如何启用 INT8 量化:

示例

from ultralytics import YOLOmodel = YOLO("yolov8n.pt")  # Load a model
model.export(format="onnx", int8=True)
yolo export model=yolov8n.pt format=onnx int8=True   # export model with INT8 quantization

4.3 为什么输出模型时动态输入尺寸很重要?

动态输入尺寸允许导出的模型处理不同的图像尺寸,为不同的使用案例提供灵活性并优化处理效率。在导出为ONNX 或TensorRT 等格式时,启用动态输入尺寸可确保模型能无缝适应不同的输入形状。

要启用此功能,使用 dynamic=True 标志:

from ultralytics import YOLOmodel = YOLO("yolov8n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolov8n.pt format=onnx dynamic=True

4.4 优化模型性能需要考虑哪些关键的导出参数?

了解和配置导出参数对于优化模型性能至关重要:

  • format: 导出模型的目标格式(例如:“…”)、 onnx, torchscript, tensorflow).
  • imgsz: 模型输入所需的图像大小(例如:“…”)、 640(height, width)).
  • half: 启用 FP16 量化,减少模型大小,并可能加快推理速度。
  • optimize: 针对移动或受限环境进行特定优化。
  • int8: 启用 INT8 量化,非常有利于边缘部署。

五、问题

当使用 dynamic=Truehalf=True 导出 .onnx 格式的模型时,可能会发生不兼容的问题

因为动态尺寸 (dynamic) 功能和半精度 (half) 可能会与某些 ONNX Runtime 版本或配置产生冲突。解决方案:

  1. 分开使用: 先尝试使用 dynamic=Falsehalf=True,看看是否能成功导出并验证模型。这样,你可以确定是否确实是动态和半精度之间的具体冲突。
  2. 使用最新 ONNX Runtime: 确保你的 ONNX Runtime 是最新版本,有时版本更新会解决这类问题。
  3. 不使用半精度导出: 试试仅用 dynamic=True 而不开启 half,以检查是否是半精度计算导致的问题。
yolo export model=your_model.pt format=onnx dynamic=True half=False

六、疑问

其他人对model进行修改,修改它的意义是什么??

# 直接使用Pytorch的保存功能,保存为PyTorch
import torch
from ultralytics import YOLO# 加载模型
model = YOLO('path/to/your/model.pt')  # 加载您的.pt模型# 进行您的模型修改
# model.xxx = ...# 保存模型
torch.save(model.state_dict(), 'path/to/save/your_modified_model.pt')

YOLOv8模型进行修改并导出为TorchScript(默认格式)

from ultralytics import YOLO# 加载模型
model = YOLO('path/to/your/model.pt')# 导出为TorchScript,默认不需要设置format参数
model.export('path/to/save/your_model.torchscript')

大佬写的onnx模型查看网络结构,以及修改onnx简化模型!!


http://www.ppmy.cn/embedded/121712.html

相关文章

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展,传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求,未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放,以及如何实现多路音频功放方案。…

论文阅读:多模态医学图像融合方法的研究进展

摘要 背景: 多模态融合技术可将多模态的医学图像融合到单模态的图像中,且单模态图像具有多种模态图像间的互补信息, 从而在单一图像中得到充足的便于临床诊断的信息。 贡献: 本文将多模态医学图像融合方法整理为两种&#xff0…

《OpenCV》—— 指纹验证

用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…

uniapp修改uni-ui组件样式(对微信小程序/H5有效,vue3)

寻找要修改的样式 使用开发者工具找到具体要修改的class类名 修改 <style lang"scss">//.nav为上一级的class.nav::v-deep .uni-navbar--border {border-bottom-style: none !important;} </style>完整代码 <template><view><uni-na…

ChatGPT的150个角色提示场景实测(12)保姆

我希望你能充当一个保姆。你将负责监督幼儿&#xff0c;准备饭菜和零食&#xff0c;协助做家庭作业和创意项目&#xff0c;参与游戏时间的活动&#xff0c;在需要时提供安慰和安全保障&#xff0c;注意家中的安全问题&#xff0c;并确保所有需求得到照顾。请给出具体计划&#…

软件工程的详细学习要点和学习方向

软件工程的详细学习要点和学习方向主要包括以下几个方面&#xff1a; 学习要点 1. 编程语言基础&#xff1a; - 熟练掌握至少一种编程语言&#xff0c;如Java、Python、C等。 - 学习编程语言的语法、特性、常用库函数&#xff0c;并具备编写、调试和优化代码的能力。 …

滚雪球学Oracle[8.3讲]:区块链与Oracle

全文目录&#xff1a; 前言一、Oracle Blockchain的架构与应用1.1 Oracle Blockchain的基本架构1.1.1 Oracle Blockchain的核心组件 1.2 Oracle Blockchain的优势示例&#xff1a;Oracle Blockchain的实际应用 二、区块链与传统数据库的集成2.1 区块链与传统数据库的关系2.2 区…

macOS 系统中python的安装步骤

在macOS系统中安装Python的步骤可以总结如下&#xff1a; ‌检查是否已预装Python‌&#xff1a;首先&#xff0c;检查MacOS是否已经预装了Python。打开终端&#xff0c;输入python --version命令&#xff0c;如果显示Python版本号&#xff0c;说明系统中已经安装了Python。但…