6.7 KiB
netrans_cli
netrans_cli 是 netrans 进行模型转换的命令行工具,使用 netrans_cli 完成模型转换的步骤如下:
- 使用
load导入模型 & 生成前后处理配置文件 - 使用
quantize量化模型 & 生成量化参数文件 - 使用
add_pre_post把前后处理加入推理计算图 - 使用
export导出模型
目录
系统依赖
- CPU:Intel® Core™ i5-6500 CPU @ 3.2 GHz x4 支持 the Intel® Advanced Vector Extensions
- RAM:至少8GB
- 硬盘:160GB
- 操作系统:Ubuntu 20.04 LTS 64-bit with Python 3.10,不推荐使用其他版本
安装 Netrans_cli
建议使用 mamba 作为环境隔离管理工具,避免安装 Netrans 导致污染系统环境。安装并激活 mamba 步骤如下:
# 下载 mamba 安装脚本
wget "https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease//Miniforge3-$(uname)-$(uname -m).sh"
# 创建 mamba 的安装目录
mkdir -p ~/app
# 安装 mamba 到 ~/app/
bash Miniforge3-Linux-x86_64.sh -b -p ${HOME}/app/miniforge3
# 添加 mamba 的初始化脚本到环境配置文件
echo "source " ${HOME}/app/miniforge3/etc/profile.d/mamba.sh"" >> ${HOME}/.bashrc
# 重新加载 ~/.bashrc 文件,使 mamba 初始化生效
source ${HOME}/.bashrc
# 创建一个名为 netrans 的虚拟环境,并安装 Python 3.10
mamba create -n netrans python=3.10 -y
# 激活 netrans 虚拟环境
mamba activate netrans
下载 Netrans
cd ~/app
git clone https://gitlink.org.cn/nudt_dsp/netrans.git
Netrans_cli 是基于 Netrans_api 封装的命令行工具,执行 setup.sh 可安装 Netrans_cli。
cd ~/app/netrans
# 执行 setup.sh
bash setup.sh
# setup.sh 会修改系统环境变量,需要 source 重新生效
source ~/.bashrc
# 重新激活 netrans 环境
mamba activate netrans
模型准备
不同框架下训练的模型需要准备不同的数据,所有的数据都需要与模型放在同一个文件夹下。具体参照 example 中不同框架的示例说明。 如 ONNX 格式保存的 yolov8s 模型,目录结构如下:
yolov8s/
├── channel_mean_value.txt # 定义预处理中 mean & scale 的配置参数
├── dataset.txt # 定义量化数据的文件
├── input_image
│ ├── 0.jpg
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ └── 9.jpg
└── yolov8s.onnx # 模型结构 & 权重
命令介绍
load
描述:
使用 load 导入模型,同时生成配置文件。导入会打印相关日志信息,成功后会打印 SUCESS。
用法:
netrans load model_path [--mean MEAN [MEAN ...]] [--scale SCALE [SCALE ...]]
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| model_path | str | 第一位置参数,模型文件的路径 |
| --mean | float | 通道均值 (例如: 128 或 128 128 128) |
| --scale | float | 通道缩放 (例如: 1 或 1 1 1) |
输出
成功执行 load 后会打印 SUCESS 。在 model_path 目录下生成 :
- 网络结构文件
*.json - 网络权重
*.data文件 - 前处理配置文件
*_inputmeta.yml - 后处理配置文件
*_postprocess_file.yml
quantize
描述:
使用 quantize 对模型进行量化,以提高在 Pnna 上的运行效率。量化操作可能会带来一定程度的精度损失。
用法:
netrans quantize model_path quant_type [--pre] [--post]
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| model_path | str | 第一位置参数,模型文件的路径 |
| quant_type | str | 第二位置参数,量化类型 |
| --pre | action | 将前处理做进推理网络计算图 |
| --post | action | 将后处理做进推理网络计算图 |
如果我们训练好的模型的数据类型是float32的,为了使模型以更高的效率在 PNNA 上运行,我们可以对模型进行量化操作,量化操作可能会带来一定程度的精度损失。
支持的量化类型有:
- symi8: 对称量化算法,使用 int8 类型
- asymu8: 非对称量化算法,使用 uint8 类型
- symi16: 对称量化算法,使用 int16 类型
输出
成功执行 quantize 后会打印 SUCCESS 。在 model_path 目录下生成量化后的模型文件 *.quantize。
add_pre_post
描述:
使用 add_pre_post 将前后处理加入推理计算图,提升整体工程性能效率。
用法:
netrans add_pre_post model_path quant_type
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| model_path | str | 第一位置参数,模型文件的路径 |
| quant_type | str | 第二位置参数,量化类型 |
quant_type 和 quantize 命令中的该参数保持一致。
输出
成功执行 add_pre_post 后会打印 SUCCESS 。
export
描述:
使用 export 导出模型生成 nbg 文件,以便在 PNNA 上部署和运行。
用法:
netrans export model_path quant_type
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| model_path | str | 第一位置参数,模型文件的路径 |
| quant_type | str | 第二位置参数,量化类型 |
支持的量化类型有:
- symi8: 对称量化算法,使用 int8 类型
- asymu8: 非对称量化算法,使用 uint8 类型
- symi16: 对称量化算法,使用 int16 类型
输出
成功执行 export 后会打印 SUCCESS 。在 model_path 目录下生成量化后的模型文件 network_binary.nb。
目前支持将生成的 network_binary.nb 文件部署到 PNNA 硬件平台。具体部署方法请参阅模型部署相关文档。
使用示例
以 YOLOv8s 模型为例,演示使用 Netrans 命令行工具完成转换的全过程:
# 1. 定义模型路径,模型路径默认为工作路径
work_path='~/app/netrans/examples/infer_with_pre_post_process/yolov8s'
cd ${work_path}
# 2. 激活环境
mamba activate netrans
# 3. 模型导入
netrans load ./ --mean 0 0 0 --scale 1 1 1
# 4. 模型量化
netrans quantize ./ asymu8
# 5. 将前后处理加入推理网络
netrans add_pre_post ./ asymu8
# 6. 导出 nbg 文件
netrans export ./ asymu8
请参照examples,examples 提供 caffe 模型转换示例,darknet 模型转换示例,tensorflow 模型转换示例,onnx 模型转换示例。