转换为 ONNX
概述
.onnx 格式的方法。建议进行此转换,因为它能为后续在相应 RVC 平台 上的转换提供最多的选项。转换
从 PyTorch
Python
1import torch
2import torch.nn as nn
3
4# 定义模型架构(必须与保存的模型匹配)
5class Model(nn.Module):
6 ...
7
8# 初始化模型并加载训练好的权重
9model = Model()
10model.load_state_dict(torch.load("model_name.pt"))
11model.eval() # 将模型设置为推理模式
12
13# 定义输入形状并创建虚拟输入张量
14input_shape = ... # 例如 (1, 3, 512, 288)
15dummy_input = torch.randn(input_shape)
16
17# 将模型导出为 ONNX 格式
18torch.onnx.export(model, dummy_input, "model_name.onnx")YOLO 模型
tools-cli 包:Command Line
1git clone --recursive https://github.com/luxonis/tools.git
2cd tools
3pip install .tools 目录的根目录下运行):Command Line
1tools <MODEL>.pt --imgsz "<WIDTH> <HEIGHT>"(512, 288) 的 BGR 图像的 YOLOv6n 模型,请运行以下命令:Command Line
1tools yolov6n.pt --imgsz "512 288" --encoding BGR(1, 3, 512, 288),输出形状为 (1,85,36,64)、(1,85,18,32) 和 (1,85,9,16)(与通用转换获得的原始模型输出形状 (1, 2304, 85)、(1, 576, 85) 和 (1, 144, 85) 相反;如果连接成一个张量,则为 (1, 3024, 85))。如果你有兴趣使用 Docker 运行这些工具,请查看这些指南。
从 TensorFlow
.pb)、Keras(.h5)、tensorflow.js(.json 和 .bin)或 TensorFlow Lite(.tflite)格式的模型,我们推荐使用 tf2onnx 转换工具。- 首先,安装
tensorflow和tf2onnx包:
Command Line
1pip install tensorflow
2pip install -U tf2onnx- 其次,可以通过命令行进行转换:
Command Line
1python -m tf2onnx.convert --saved-model tensorflow-model-path --output model.onnx验证
输入/输出张量
- 正确定义(从相应层接收输入/向相应层发送输出)。
- 如果不是,请使 用 onnx-modifier 工具重新定义输入/输出张量。
- 形状为 NCHW 形式(批次大小、颜色通道数、高度、宽度)。
- 如果不是,请在运行 tf2onnx 工具时定义
--inputs-as-nchw data和--outputs-as-nchw标志。
- 如果不是,请在运行 tf2onnx 工具时定义
- 没有维度是动态的(例如批次大小是固定的)。
- 如果是动态的,请使用 onnxruntime 库将形状固定(有关详细信息,请参见本教程)。
我们建议使用 Netron 工具检查模型。
性能
- 更新到最新的 ONNX Opset:确保你使用的是最新的 ONNX opset 版本。较新的 opset 通常包含增强模型兼容性的改进和错误修复。
- 简化模型操作:在将模型转换为 ONNX 之前,先简化模型中的复杂操 作或层。这有助于减少与转换相关的问题。
- 确保精度一致性:在两个模型中为权重、输入和输出使用相同的数据类型(例如 float32),以保持数值精度。