netrans/examples/onnx
xujiao b39abda2fa netrans model conversion examples 2025-04-07 11:31:19 +08:00
..
yolov5s netrans model conversion examples 2025-04-07 11:31:19 +08:00
README.md netrans model conversion examples 2025-04-07 11:31:19 +08:00

README.md

Onnx模型转换示例

本文档以 yolov5s 为例介绍如何使用 Netrans 对 Onnx 模型进行转换。

Netrans 支持 ONNX 至 1.14.0 opset支持至19。

安装Netrans

  1. 先确定您的 Netrans 下载目录,使用以下命令将 Netrans 加入系统配置文件。记得使用您真实的 Netrans下载目录 替换下行命令中的文字。
export NETRANS_PATH=Netrans下载目录/bin
  1. 安装 netrans_py
cd netrans_py
pip3 install -e .

数据准备

转换ONNX模型需准备

  • .onnx 文件:网络模型
  • dataset.txt数据路径配置文件

我们的示例 已经完成数据准备,可以使用下面命令进入目录执行。

cd netrans/
cd examples/onnx

此时目录如下:

yolov5s/
├── 0.jpg          # 校准数据
├── dataset.txt    # 指定数据地址的文件 
└── yolov5s.onnx   # 网络模型

3.1 使用 netrans_cli 转换 onnx 示例模型 yolov5s

使用 netrans_cli 之前,请先使用以下命令将 命令行脚本 拷贝至当前目录。

cp ../../netrans_cli/*sh ./

此时目录如下:

onnx/
├── export.sh
├── gen_inputmeta.sh
├── import_model.sh
├── infer.sh
├── quantize.sh
└── yolov5s
    ├── 0.jpg
    ├── dataset.txt
    └── yolov5s.onnx

3.1.1 导入模型

./import_model.sh yolov5s

该步骤会生成 .json 结尾的网络结构文件和 .data 结尾的权重数据文件。

此时 yolov5s 的目录结构如下

yolov5s/
├── 0.jpg
├── dataset.txt
├── yolov5s.data
├── yolov5s.json
└── yolov5s.onnx

3.1.2 生成配置文件

数据在推理前一般会经过预处理,为了确保模型可以正确的输入数据,需要生产对应的配置文件。

./gen_inputmeta.sh yolov5s

此时 yolov5s 的目录结构如下:

yolov5s/
├── 0.jpg
├── dataset.txt
├── yolov5s.data
├── yolov5s_inputmeta.yml
├── yolov5s.json
└── yolov5s.onnx

根据 yolov5s 的实际情况 我们需要修改yml中的 mean 为 0scale为 0.003921568627。 打开 yolov5s_inputmeta.yml 文件, 修改第30-33行为

        scale:
        - 0.003921568627
        - 0.003921568627
        - 0.003921568627

关闭并保存。

3.1.3 量化模型

./quantize.sh yolov5s uint8

量化模型需要两个参数目录模型名字和量化类型。量化类型包括float int8和uint8。

此时 yolov5s 的目录结构如下:

yolov5s/
├── 0.jpg
├── dataset.txt
├── yolov5s_asymmetric_affine.quantize
├── yolov5s.data
├── yolov5s_inputmeta.yml
├── yolov5s.json
└── yolov5s.onnx

3.1.4 导出模型

./export.sh yolov5s uint8

此时 yolov5s 的目录结构如下:

yolov5s/
├── 0.jpg
├── dataset.txt
├── wksp
│   └── asymmetric_affine
│       ├── BUILD
│       ├── dump_core_graph.json
│       ├── graph.json
│       ├── main.c
│       ├── makefile.linux
│       ├── network_binary.nb
│       ├── vnn_global.h
│       ├── vnn_post_process.c
│       ├── vnn_post_process.h
│       ├── vnn_pre_process.c
│       ├── vnn_pre_process.h
│       ├── vnn_yolov5sasymmetricaffine.c
│       ├── vnn_yolov5sasymmetricaffine.h
│       ├── yolov5sasymmetricaffine.2012.vcxproj
│       ├── yolov5s_asymmetric_affine.export.data
│       └── yolov5sasymmetricaffine.vcxproj
├── yolov5s_asymmetric_affine.quantize
├── yolov5s.data
├── yolov5s_inputmeta.yml
├── yolov5s.json
└── yolov5s.onnx

3.2 使用 netrans_py 转换 onnx 示例模型 yolov5s

3.2.1 安装netrans_py

cd netrans_py
pip3 install -e .

3.2.2 准备示例脚本

cd ../example/onnx
cp ../../netrans_py/example.py ./

3.2.3 运行示例脚本

python3 example.py yolov5s -q uint8 -m 0 -s 0.003921568627