Align commands with the CLI
This commit is contained in:
parent
2c54bcd852
commit
7e737e423b
|
@ -38,49 +38,34 @@ netrans
|
||||||
```
|
```
|
||||||
- 计算机需要满足上面描述的硬件需求
|
- 计算机需要满足上面描述的硬件需求
|
||||||
|
|
||||||
Netrans为编译好的文件,只需要在系统中添加对应的路径即可直接使用。
|
执行以下命令安装 Netrans。
|
||||||
|
|
||||||
方案一:需要修改.bashrc文件增加以下行,请注意路径匹配,下行命令中的install_path 需要修改为您实际的安装目录。
|
|
||||||
|
|
||||||
```shell
|
|
||||||
export NETRANS_PATH= install_path/netrans/bin
|
|
||||||
```
|
|
||||||
|
|
||||||
然后执行
|
|
||||||
|
|
||||||
```shell
|
|
||||||
source ~/.bashrc
|
|
||||||
```
|
|
||||||
|
|
||||||
方案二:在命令行中直接输入以下行,请注意路径匹配,下行命令中的install_path 需要修改为您实际的安装目录。
|
|
||||||
|
|
||||||
```shell
|
|
||||||
export NETRANS_PATH=netrans/bin
|
|
||||||
```
|
|
||||||
如果使用方案二,则每次使用 Nertans 之前都需要执行 export 操作。
|
|
||||||
|
|
||||||
如果您想使用 Netrans python api , 需要安装 netrans_py。请注意路径匹配,下行命令中的install_path 需要修改为您实际的安装目录。
|
|
||||||
|
|
||||||
|
|
||||||
|
创建 conda 环境 .
|
||||||
```bash
|
```bash
|
||||||
cd install_path/netrans/netrans_py
|
conda create -n netrans python=3.8 -y
|
||||||
pip3 install -e .
|
conda activate netrans
|
||||||
|
```
|
||||||
|
|
||||||
|
下载 Netrans .
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/app
|
||||||
|
cd ~/app
|
||||||
|
git clone https://gitlink.org.cn/nudt_dsp/netrans.git
|
||||||
|
```
|
||||||
|
|
||||||
|
安装 Netrans。
|
||||||
|
```bash
|
||||||
|
cd ~/app/netrans
|
||||||
|
./setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Netrans 工作流程介绍。
|
## Netrans 工作流程介绍。
|
||||||
|
|
||||||
使用 Netrans_cli 将工作流程如下:
|
Netrans 工作流程如下:
|
||||||
- 1. 使用 import_model.sh 导入并转换模型到中间模型文件
|
- 1. 导入并转换模型到中间模型文件
|
||||||
- 2. 使用 gen_inputmeta.sh 生成gen_inputmeta文件
|
- 2. 生成 inputmeta 文件
|
||||||
- 3. 使用quantize.sh 量化导入后的中间模型文件
|
- 3. 量化模型
|
||||||
- 4. 使用export.sh 导出应用部署程序工程,以便部署到硬件。
|
- 4. 导出模型应用部署程序工程,以便部署到硬件。
|
||||||
|
|
||||||
在使用 gen_inputmeta.sh 生成gen_inputmeta文件时,您可能需要根据您预训练模型的数据预处理流程修改生成的inputmeta.yml文件。具体请参考[introduction.md](./introduction.md)
|
|
||||||
|
|
||||||
使用 Netrans_py 的工作流程如下:
|
|
||||||
|
|
||||||
- 1. 始化 Netrans
|
|
||||||
- 2. 使用 model2nbg 函数实现模型导入、预处理参数配置、量化和导出,生成应用部署程序工程。
|
|
||||||
|
|
||||||
Netrans 提供 tensorflow、caffe、darknet 和 onnx 的模型转换示例,请参考 examples。
|
Netrans 提供 tensorflow、caffe、darknet 和 onnx 的模型转换示例,请参考 examples。
|
||||||
|
|
||||||
|
@ -262,4 +247,4 @@ yolov5s/
|
||||||
├── 0.jpg # 校准数据
|
├── 0.jpg # 校准数据
|
||||||
├── dataset.txt # 指定数据地址的文件
|
├── dataset.txt # 指定数据地址的文件
|
||||||
└── yolov5s.onnx # 网络模型
|
└── yolov5s.onnx # 网络模型
|
||||||
```
|
```
|
||||||
|
|
|
@ -5,53 +5,30 @@ netrans_cli 是 netrans 进行模型转换的命令行工具,使用 ntrans_cli
|
||||||
3. 量化模型
|
3. 量化模型
|
||||||
4. 导出模型
|
4. 导出模型
|
||||||
|
|
||||||
|
|
||||||
## 安装
|
|
||||||
|
|
||||||
**<font color="#dd0000">注意:</font>准备好的工程目录应符合netrans 要求,且和脚本在用一目录下**
|
|
||||||
|
|
||||||
比如导入一个TensorFlow的lenet模型,那么目录格式应如下:
|
|
||||||
```bash
|
|
||||||
.
|
|
||||||
├── export.sh
|
|
||||||
├── gen_inputmeta.sh
|
|
||||||
├── import_model.sh
|
|
||||||
├── infer.sh
|
|
||||||
├── lenet
|
|
||||||
│ ├── 0.jpg
|
|
||||||
│ ├── dataset.txt
|
|
||||||
│ ├── inputs_outputs.txt
|
|
||||||
│ └── lenet.pb
|
|
||||||
└── quantize.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## netrans_cli 脚本介绍
|
## netrans_cli 脚本介绍
|
||||||
|
|
||||||
|脚本|功能|使用|
|
|脚本|功能|使用|
|
||||||
|:---|---|---|
|
|:---|---|---|
|
||||||
|import_model.sh| 模型导入功能,将模型转换成 pnna 支持的格式| sh import_model.sh model_name|
|
|import.sh| 模型导入功能,将模型转换成 pnna 支持的格式| import_model.sh model_name|
|
||||||
|gen_inputmeta.sh| 预处理模版生成功能,生成预处理模版,根据模型进行对于的修改| sh gen_inputmeta.sh model_name|
|
|config.sh| 预处理模版生成功能,生成预处理模版,根据模型进行对于的修改| config.sh model_name|
|
||||||
| quantize.sh| 量化功能, 对模型进行量化生成量化参数文件| sh quantize.sh model_name quantize_data_type|
|
|quantize.sh| 量化功能, 对模型进行量化生成量化参数文件| quantize.sh model_name quantize_data_type|
|
||||||
|infer.sh| 推理功能,对模型进行推理|sh infer.sh model_name quantize_data_type<br/>注意:该功能仅用于测试,和开发板上推理结果不完全一致|
|
|export.sh|导出功能,将量化好的模型导出成 pnna 上可以运行的runtime| export.sh model_name quantize_data_type|
|
||||||
|export.sh|导出功能,将量化好的模型导出成 pnna 上可以运行的runtime| sh export.sh model_name quantize_data_type|
|
|
||||||
|img2dat.sh|图片数据转换成量化后的二进制文件。需要转换的图片名存放在dataset.txt中。需要实先进行 inputmeta 文件生成 和 模型量化。 | sh img2dat.sh model_name quantize_data_type|
|
|
||||||
|
|
||||||
## 使用 netrans_cli 完成模型转换
|
## 数据准备
|
||||||
### import.sh 导入模型
|
对于不同框架下训练的模型,需要准备不同的数据,所有的数据都需要放在同一个文件夹下。
|
||||||
|
模型名和文件名需要保持一致。
|
||||||
|
|
||||||
使用import.sh脚本进行导入
|
## import.sh 导入模型
|
||||||
- 用法: ./import.sh 以模型文件名命名的模型数据文件夹,例如:
|
|
||||||
```shell
|
使用 import.sh 导入模型
|
||||||
$ ./import.sh lenet
|
- 用法: import.sh 以模型文件名命名的模型数据文件夹,例如:
|
||||||
... ...
|
```bash
|
||||||
I End importing tensorflow...
|
$ import.sh lenet
|
||||||
I Dump net to lenet.json
|
|
||||||
I Save net to lenet.data
|
|
||||||
I ----------------Error(0),Warning(0)----------------
|
|
||||||
SUCCESS
|
|
||||||
```
|
```
|
||||||
|
|
||||||
"lenet"是文件夹名,也作为模型名和权重文件名。导入会打印相关日志信息,成功后会打印SUCESS。导入后lenet文件夹应该有"lenet.json"和"lenet.data"文件:
|
"lenet"是文件夹名,也作为模型名和权重文件名。导入会打印相关日志信息,成功后会打印SUCESS。导入后lenet文件夹应该有"lenet.json"和"lenet.data"文件:
|
||||||
```shell
|
|
||||||
|
```bash
|
||||||
$ ls -lrt lenet
|
$ ls -lrt lenet
|
||||||
total 3396
|
total 3396
|
||||||
-rwxr-xr-x 1 hope hope 1727201 Nov 5 2018 lenet.pb
|
-rwxr-xr-x 1 hope hope 1727201 Nov 5 2018 lenet.pb
|
||||||
|
@ -62,18 +39,13 @@ netrans_cli 是 netrans 进行模型转换的命令行工具,使用 ntrans_cli
|
||||||
-rw-r--r-- 1 hope hope 1725178 Jun 7 09:21 lenet.data
|
-rw-r--r-- 1 hope hope 1725178 Jun 7 09:21 lenet.data
|
||||||
```
|
```
|
||||||
|
|
||||||
### gen_inputmeta 生成Inputmeta文件
|
## config 生成 Inputmeta 文件
|
||||||
在netrans_cli目录下使用inputmeta_gen.sh脚本生成inputmeta文件
|
使用 config.sh 生成 inputmeta 文件
|
||||||
- ./gen_inputmeta.sh 以模型文件名命名的模型数据文件夹,例如:
|
- config.sh 以模型文件名命名的模型数据文件夹,例如:
|
||||||
```shell
|
```bash
|
||||||
$ ./gen_inputmeta.sh lenet
|
$ config.sh lenet
|
||||||
... ...
|
|
||||||
I Namespace(generate='inputmeta', input_meta_output=None, model='lenet.json', separated_database=True, which='generate')
|
|
||||||
I Load model in lenet.json
|
|
||||||
I Generate input meta lenet_inputmeta.yml
|
|
||||||
I ----------------Error(0),Warning(0)----------------
|
|
||||||
```
|
```
|
||||||
|
inputmeta 文件生成会打印相关日志信息,成功后会打印SUCESS。导入后lenet文件夹应该有 "lenet_inputmeta.yml" 文件:
|
||||||
```shell
|
```shell
|
||||||
$ ls -lrt lenet
|
$ ls -lrt lenet
|
||||||
total 3400
|
total 3400
|
||||||
|
@ -172,67 +144,26 @@ input_meta:
|
||||||
可以根据实际情况对生成的inputmeta文件进行修改。
|
可以根据实际情况对生成的inputmeta文件进行修改。
|
||||||
|
|
||||||
### 模型量化
|
### 模型量化
|
||||||
如果我们训练好的模型的数据类型是float32的,为了使模型以更高的效率在pnna上运行,我们可以对模型进行量化操作,量化操作可能会带来一定程度的精度损失。<
|
如果我们训练好的模型的数据类型是float32的,为了使模型以更高的效率在pnna上运行,我们可以对模型进行量化操作,量化操作可能会带来一定程度的精度损失。
|
||||||
在netrans_cli目录下使用quantize.sh脚本进行量化操作。
|
|
||||||
|
- 在netrans_cli目录下使用quantize.sh脚本进行量化操作。
|
||||||
|
|
||||||
用法:./quantize.sh 以模型文件名命名的模型数据文件夹 量化类型,例如:
|
用法:./quantize.sh 以模型文件名命名的模型数据文件夹 量化类型,例如:
|
||||||
|
|
||||||
```shell
|
```bash
|
||||||
$ ./quantize.sh lenet uint8
|
$ quantize.sh lenet uint8
|
||||||
... ...
|
|
||||||
I End quantization...
|
|
||||||
I Dump net quantize tensor table to lenet_asymmetric_affine.quantize
|
|
||||||
I Save net to lenet.data
|
|
||||||
I ----------------Error(0),Warning(0)----------------
|
|
||||||
SUCCESS
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
支持的量化类型有:uint8、int8、int16
|
支持的量化类型有:uint8、int8、int16
|
||||||
|
|
||||||
### 模型推理
|
|
||||||
|
|
||||||
在netrans_cli目录下使用infer.sh脚本进行推理
|
|
||||||
|
|
||||||
- 用法:./infer.sh 以模型文件名命名的模型数据文件夹 数据类型,例如:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
$ ./infer.sh lenet uint8
|
|
||||||
... ...
|
|
||||||
I Build lenet complete.
|
|
||||||
I Running 1 iterations
|
|
||||||
I Save tensor ./inf/iter_0_attach_output_out0_0_out0_1_10.tensor
|
|
||||||
I Save tensor ./inf/iter_0_attach_input_x-input_out0_1_out0_1_28_28_1.tensor
|
|
||||||
I Iter(0), top(5), tensor(@attach_output/out0_0:out0) :
|
|
||||||
I 0: 1.0
|
|
||||||
I 9: 0.0
|
|
||||||
I 8: 0.0
|
|
||||||
I 7: 0.0
|
|
||||||
I 6: 0.0
|
|
||||||
I Check const pool...
|
|
||||||
I Queue cancelled.
|
|
||||||
I End infer...
|
|
||||||
I ----------------Error(0),Warning(0)----------------
|
|
||||||
=========== End infer lenet model ===========
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
推理支持的数据类型:float、uint8、int8、int16,其中使用uint8、int8、int16推理时需要先进行模型量化。
|
|
||||||
|
|
||||||
### 模型导出
|
### 模型导出
|
||||||
|
|
||||||
在netrans_cli目录下使用export.sh脚本进行推理。
|
使用 export.sh 进行推理。
|
||||||
|
|
||||||
用法:./export.sh 以模型文件名命名的模型数据文件夹 数据类型,例如:
|
用法:export.sh 以模型文件名命名的模型数据文件夹 数据类型,例如:
|
||||||
|
|
||||||
```shell
|
```bash
|
||||||
./export.sh lenet uint8
|
export.sh lenet uint8
|
||||||
... ...
|
|
||||||
I End exporting ovxlib case...
|
|
||||||
I ----------------Error(0),Warning(0)----------------
|
|
||||||
=======================================================================
|
|
||||||
=========== End Generate lenet ovx C code with type of asymmetric_affine ===========
|
|
||||||
=======================================================================
|
|
||||||
```
|
```
|
||||||
|
|
||||||
导出支持的数据类型:float、uint8、int8、int16,其中使用uint8、int8、int16导出时需要先进行模型量化。导出的工程会在模型所在的目录下面的wksp目录里。
|
导出支持的数据类型:float、uint8、int8、int16,其中使用uint8、int8、int16导出时需要先进行模型量化。导出的工程会在模型所在的目录下面的wksp目录里。
|
||||||
|
|
|
@ -7,27 +7,7 @@ netrans_py 支持通过 python api 灵活地将模型转换成pnna 支持的格
|
||||||
3. 量化模型
|
3. 量化模型
|
||||||
4. 导出模型
|
4. 导出模型
|
||||||
|
|
||||||
## 安装
|
|
||||||
在使用netrans_py之前,需要安装netrans_py。
|
|
||||||
|
|
||||||
设置环境变量 NETRANS_PATH 并指向该 bin 目录。
|
|
||||||
<font color="#dd0000">注意:</font> 在该项目中,项目下载目录为 `/home/nudt_dps/netrans`,在您应用的过程中,可以使用 `pwd` 来确认您的项目目录。
|
|
||||||
|
|
||||||
```bash
|
|
||||||
export NETRANS_PATH=/home/nudt_dps/netrans/bin
|
|
||||||
```
|
|
||||||
同时设置LD_LIBRARY_PATH(Ubuntu,其他系统根据具体情况设置):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
export LD_LIBRARY_PATH=/home/nudt_dps/netrans/bin:$LD_LIBRARY_PATH
|
|
||||||
```
|
|
||||||
注意这一步每次使用前都需要执行,或者您可以写入 .bashrc (路径为 `~/.bashrc` )。
|
|
||||||
|
|
||||||
然后进入目录 netrans_py 进行安装。
|
|
||||||
```bash
|
|
||||||
cd /home/nudt_dps/netrans/netrans_py
|
|
||||||
pip3 install -e .
|
|
||||||
```
|
|
||||||
## netrans_py api
|
## netrans_py api
|
||||||
### Netrans 导入api及创建实例
|
### Netrans 导入api及创建实例
|
||||||
创建 Netrans
|
创建 Netrans
|
||||||
|
@ -68,17 +48,22 @@ pip3 install -e .
|
||||||
无。
|
无。
|
||||||
在工程目录下生成 pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。
|
在工程目录下生成 pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。
|
||||||
|
|
||||||
### Netrans.gen_inputmeta 预处理配置文件生成
|
### Netrans.config 预处理配置文件生成
|
||||||
|
|
||||||
描述: 将模型转换成 pnna 支持的格式。
|
描述: 将模型转换成 pnna 支持的格式。
|
||||||
代码示例:
|
代码示例:
|
||||||
|
|
||||||
```py3
|
```py3
|
||||||
yolo_netrans.gen_inputmeta()
|
yolo_netrans.config()
|
||||||
```
|
```
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
无。
|
| 参数名 | 类型 | 说明 |
|
||||||
|
|:---| -- | -- |
|
||||||
|
|inputmeta| bool,str, [Fasle, True, "inputmeta_filepath"] | 指定 inputmeta, 默认为False。 <br/> 如果为False,则会生成inputmeta模板,可使用mean、scale、reverse_channel 配合修改常用参数。<br/>如果已有现成的 inputmeta 文件,则可通过该参数进行指定,也可使用True, 则会自动索引 model_name_inputmeta.yml |
|
||||||
|
|mean| float, int, list | 设置预处理中 normalize 的 mean 参数 |
|
||||||
|
|scale| float, int, list | 设置预处理中 normalize 的 scale 参数 |
|
||||||
|
|reverse_channel | bool | 设置预处理中的 reverse_channel 参数 |
|
||||||
|
|
||||||
输出返回:
|
输出返回:
|
||||||
无。
|
无。
|
||||||
|
@ -148,7 +133,7 @@ yolo_netrans.model2nbg(quantize_type='uint8', inputmeta=True)
|
||||||
|
|
||||||
## 使用实例
|
## 使用实例
|
||||||
|
|
||||||
```
|
```py3
|
||||||
from nertans import Netrans
|
from nertans import Netrans
|
||||||
model_path = 'example/darknet/yolov4_tiny'
|
model_path = 'example/darknet/yolov4_tiny'
|
||||||
netrans_path = "netrans/bin" # 如果进行了export定义申明,这一步可以不用
|
netrans_path = "netrans/bin" # 如果进行了export定义申明,这一步可以不用
|
||||||
|
|
|
@ -3,7 +3,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
from utils import check_path, AttributeCopier, creat_cla
|
from utils import check_path, AttributeCopier, creat_cla
|
||||||
|
|
||||||
class InputmetaGen(AttributeCopier):
|
class Config(AttributeCopier):
|
||||||
def __init__(self, source_obj) -> None:
|
def __init__(self, source_obj) -> None:
|
||||||
super().__init__(source_obj)
|
super().__init__(source_obj)
|
||||||
|
|
|
@ -7,7 +7,7 @@ import file_model
|
||||||
from import_model import ImportModel
|
from import_model import ImportModel
|
||||||
from quantize import Quantize
|
from quantize import Quantize
|
||||||
from export import Export
|
from export import Export
|
||||||
from gen_inputmeta import InputmetaGen
|
from config import Config
|
||||||
# from utils import check_path
|
# from utils import check_path
|
||||||
import warnings
|
import warnings
|
||||||
warnings.simplefilter('ignore', yaml.error.UnsafeLoaderWarning)
|
warnings.simplefilter('ignore', yaml.error.UnsafeLoaderWarning)
|
||||||
|
@ -109,7 +109,7 @@ class Netrans():
|
||||||
func.import_network()
|
func.import_network()
|
||||||
|
|
||||||
def inputmeta_gen(self):
|
def inputmeta_gen(self):
|
||||||
func = InputmetaGen(self)
|
func = Config(self)
|
||||||
func.inputmeta_gen()
|
func.inputmeta_gen()
|
||||||
|
|
||||||
def quantize(self, quantize_type):
|
def quantize(self, quantize_type):
|
||||||
|
|
|
@ -15,7 +15,7 @@ conda create -n netrans python=3.8 -y
|
||||||
conda activate netrans
|
conda activate netrans
|
||||||
```
|
```
|
||||||
|
|
||||||
安装 Netrans .
|
下载 Netrans .
|
||||||
```bash
|
```bash
|
||||||
mkdir -p ~/app
|
mkdir -p ~/app
|
||||||
cd ~/app
|
cd ~/app
|
||||||
|
|
Loading…
Reference in New Issue