netrans/examples/onnx
xujiao 19e41d9e83 Update docs 2025-04-09 14:13:31 +08:00
..
yolov5s netrans model conversion examples 2025-04-07 11:31:19 +08:00
README.md Update docs 2025-04-09 14:13:31 +08:00

README.md

Onnx模型转换示例

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

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

安装Netrans

创建 conda 环境 .

conda create -n netrans python=3.8 -y
conda activate netrans

下载 Netrans .

mkdir -p ~/app
cd ~/app
git clone https://gitlink.org.cn/nudt_dsp/netrans.git

安装 Netrans。

cd ~/app/netrans
./setup.sh

数据准备

转换ONNX模型需准备

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

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

cd netrans/
cd examples/onnx

此时目录如下:

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

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

示例目录如下:

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

3.1.1 导入模型

import.sh yolov5s

该命令会在工程目录下生成包含模型信息的 .json 和 .data 数据文件。 此时 yolov5s 的目录结构如下

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

3.1.2 生成配置文件

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

config.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

此时 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

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