ONNX 模型转换示例
概述
本文档以 yolov5s 为例,演示如何使用 Netrans 对 ONNX 模型进行转换。Netrans 支持 ONNX 至 1.14.0,opset 支持至 19。
快速开始
1. 环境准备
确保已安装 Netrans,如未安装请参考 安装指南。
2. 进入示例目录
1cd /home/xj/work/nudt/netrans/examples/onnx
2mamba activate netrans # 激活 netrans 环境
3. 数据准备
本示例包含以下文件:
yolov5s/
├── 0.jpg # 校准图像
├── channel_mean_value.txt # 预处理参数 [0 0 0 0.003921568627451]
├── dataset.txt # 数据集路径配置
└── yolov5s.onnx # YOLOv5s ONNX模型
4. 一体化转换(推荐)
1# CLI 方式 - 一体化流程(推荐)
2netrans load yolov5s --mean 0 0 0 --scale 0.003921568627451
3netrans quantize yolov5s asymu8 --pre --post
4netrans export yolov5s asymu8
分步详细流程
1# 1. 模型导入
2netrans load yolov5s --mean 0 0 0 --scale 0.003921568627451
3
4# 2. 模型量化
5netrans quantize yolov5s asymu8
6
7# 3. 前后处理集成
8netrans add_pre_post yolov5s asymu8 --preprocess --postprocess
9
10# 4. 模型导出
11netrans export yolov5s asymu8
Python API 示例
基础转换
from netrans import Netrans
# 初始化
netrans = Netrans()
# 加载模型
netrans.load('yolov5s', mean=[0,0,0], scale=0.00392)
# 量化并集成前后处理
netrans.quantize('asymu8', pre=True, post=True)
# 导出NBG格式
netrans.export('asymu8')
分步API使用
from netrans import Netrans
netrans = Netrans()
# 分步执行
netrans.load('yolov5s', mean=[0,0,0], scale=0.00392)
netrans.quantize('asymu8')
netrans.add_pre_post('asymu8', pre=True, post=True)
netrans.export('asymu8')
输出说明
环境准备完成后,执行转换流程会生成:
1yolov5s/
2├── 0.jpg
3├── channel_mean_value.txt
4├── dataset.txt
5├── yolov5s.onnx
6├── yolov5s.data # 模型权重数据(生成)
7├── yolov5s.json # 模型结构描述(生成)
8├── yolov5s_asymu8.quantize # 量化配置(生成)
9├── yolov5s_inputmeta.yml # 输入元数据(生成)
10├── yolov5s_postprocess_file.yml # 后处理配置(生成)
11└── wksp/ # 工作空间(生成)
12 ├── yolov5s_asymu8/ # 量化模型工程
13 └── yolov5s_asymu8_nbg_unify/ # 最终NBG输出
14 ├── network_binary.nb # NBG模型文件(核心输出)
15 ├── nbg_meta.json # NBG元数据
16 ├── main.c # 测试程序
17 └── ... # 其他部署文件
核心输出文件:
'network_binary.nb' - 最终NBG模型文件,可直接部署到PNNA芯片
'nbg_meta.json' - 模型元数据,包含输入输出信息
'main.c' - 示例应用程序,展示如何加载和运行模型
相关文档
版本: 6.42.4+
更新日期: 2025-12-17
测试模型: yolov5s (ONNX格式)