netrans/docs/netrans_cli.md

6.7 KiB
Raw Blame History

netrans_cli

netrans_cli 是 netrans 进行模型转换的命令行工具,使用 netrans_cli 完成模型转换的步骤如下:

  1. 使用 load 导入模型 & 生成前后处理配置文件
  2. 使用 quantize 量化模型 & 生成量化参数文件
  3. 使用 add_pre_post 把前后处理加入推理计算图
  4. 使用 export 导出模型

目录

系统依赖 安装指南 模型准备 命令介绍 使用示例

系统依赖

  • CPUIntel® 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

请参照examplesexamples 提供 caffe 模型转换示例,darknet 模型转换示例,tensorflow 模型转换示例,onnx 模型转换示例