diff --git a/introduction.md b/introduction.md
index 6873048..b2fa548 100644
--- a/introduction.md
+++ b/introduction.md
@@ -38,49 +38,34 @@ 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 需要修改为您实际的安装目录。
-
+执行以下命令安装 Netrans。
+创建 conda 环境 .
```bash
-cd install_path/netrans/netrans_py
-pip3 install -e .
+conda create -n netrans python=3.8 -y
+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_cli 将工作流程如下:
-- 1. 使用 import_model.sh 导入并转换模型到中间模型文件
-- 2. 使用 gen_inputmeta.sh 生成gen_inputmeta文件
-- 3. 使用quantize.sh 量化导入后的中间模型文件
-- 4. 使用export.sh 导出应用部署程序工程,以便部署到硬件。
-
-在使用 gen_inputmeta.sh 生成gen_inputmeta文件时,您可能需要根据您预训练模型的数据预处理流程修改生成的inputmeta.yml文件。具体请参考[introduction.md](./introduction.md)
-
-使用 Netrans_py 的工作流程如下:
-
-- 1. 始化 Netrans
-- 2. 使用 model2nbg 函数实现模型导入、预处理参数配置、量化和导出,生成应用部署程序工程。
+Netrans 工作流程如下:
+- 1. 导入并转换模型到中间模型文件
+- 2. 生成 inputmeta 文件
+- 3. 量化模型
+- 4. 导出模型应用部署程序工程,以便部署到硬件。
Netrans 提供 tensorflow、caffe、darknet 和 onnx 的模型转换示例,请参考 examples。
@@ -262,4 +247,4 @@ yolov5s/
├── 0.jpg # 校准数据
├── dataset.txt # 指定数据地址的文件
└── yolov5s.onnx # 网络模型
-```
\ No newline at end of file
+```
diff --git a/netrans_cli/README.md b/netrans_cli/README.md
index 600c5e5..80546a9 100644
--- a/netrans_cli/README.md
+++ b/netrans_cli/README.md
@@ -5,53 +5,30 @@ netrans_cli 是 netrans 进行模型转换的命令行工具,使用 ntrans_cli
3. 量化模型
4. 导出模型
-
-## 安装
-
-**注意:准备好的工程目录应符合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 脚本介绍
|脚本|功能|使用|
|:---|---|---|
-|import_model.sh| 模型导入功能,将模型转换成 pnna 支持的格式| sh import_model.sh model_name|
-|gen_inputmeta.sh| 预处理模版生成功能,生成预处理模版,根据模型进行对于的修改| sh gen_inputmeta.sh model_name|
-| quantize.sh| 量化功能, 对模型进行量化生成量化参数文件| sh quantize.sh model_name quantize_data_type|
-|infer.sh| 推理功能,对模型进行推理|sh infer.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|
+|import.sh| 模型导入功能,将模型转换成 pnna 支持的格式| import_model.sh model_name|
+|config.sh| 预处理模版生成功能,生成预处理模版,根据模型进行对于的修改| config.sh model_name|
+|quantize.sh| 量化功能, 对模型进行量化生成量化参数文件| quantize.sh model_name quantize_data_type|
+|export.sh|导出功能,将量化好的模型导出成 pnna 上可以运行的runtime| export.sh model_name quantize_data_type|
-## 使用 netrans_cli 完成模型转换
-### import.sh 导入模型
+## 数据准备
+对于不同框架下训练的模型,需要准备不同的数据,所有的数据都需要放在同一个文件夹下。
+模型名和文件名需要保持一致。
-使用import.sh脚本进行导入
-- 用法: ./import.sh 以模型文件名命名的模型数据文件夹,例如:
- ```shell
- $ ./import.sh lenet
- ... ...
- I End importing tensorflow...
- I Dump net to lenet.json
- I Save net to lenet.data
- I ----------------Error(0),Warning(0)----------------
- SUCCESS
+## import.sh 导入模型
+
+使用 import.sh 导入模型
+- 用法: import.sh 以模型文件名命名的模型数据文件夹,例如:
+ ```bash
+ $ import.sh lenet
```
+
"lenet"是文件夹名,也作为模型名和权重文件名。导入会打印相关日志信息,成功后会打印SUCESS。导入后lenet文件夹应该有"lenet.json"和"lenet.data"文件:
- ```shell
+
+ ```bash
$ ls -lrt lenet
total 3396
-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
```
-### gen_inputmeta 生成Inputmeta文件
-在netrans_cli目录下使用inputmeta_gen.sh脚本生成inputmeta文件
-- ./gen_inputmeta.sh 以模型文件名命名的模型数据文件夹,例如:
- ```shell
- $ ./gen_inputmeta.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)----------------
+## config 生成 Inputmeta 文件
+使用 config.sh 生成 inputmeta 文件
+- config.sh 以模型文件名命名的模型数据文件夹,例如:
+ ```bash
+ $ config.sh lenet
```
-
+ inputmeta 文件生成会打印相关日志信息,成功后会打印SUCESS。导入后lenet文件夹应该有 "lenet_inputmeta.yml" 文件:
```shell
$ ls -lrt lenet
total 3400
@@ -172,67 +144,26 @@ input_meta:
可以根据实际情况对生成的inputmeta文件进行修改。
### 模型量化
-如果我们训练好的模型的数据类型是float32的,为了使模型以更高的效率在pnna上运行,我们可以对模型进行量化操作,量化操作可能会带来一定程度的精度损失。<
-在netrans_cli目录下使用quantize.sh脚本进行量化操作。
+如果我们训练好的模型的数据类型是float32的,为了使模型以更高的效率在pnna上运行,我们可以对模型进行量化操作,量化操作可能会带来一定程度的精度损失。
+
+- 在netrans_cli目录下使用quantize.sh脚本进行量化操作。
用法:./quantize.sh 以模型文件名命名的模型数据文件夹 量化类型,例如:
-```shell
-$ ./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
-
+```bash
+$ quantize.sh lenet uint8
```
支持的量化类型有: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
-./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 ===========
-=======================================================================
+```bash
+export.sh lenet uint8
```
导出支持的数据类型:float、uint8、int8、int16,其中使用uint8、int8、int16导出时需要先进行模型量化。导出的工程会在模型所在的目录下面的wksp目录里。
diff --git a/netrans_py/README.md b/netrans_py/README.md
index 7796519..661d345 100644
--- a/netrans_py/README.md
+++ b/netrans_py/README.md
@@ -7,27 +7,7 @@ netrans_py 支持通过 python api 灵活地将模型转换成pnna 支持的格
3. 量化模型
4. 导出模型
-## 安装
-在使用netrans_py之前,需要安装netrans_py。
-设置环境变量 NETRANS_PATH 并指向该 bin 目录。
-注意: 在该项目中,项目下载目录为 `/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 导入api及创建实例
创建 Netrans
@@ -68,17 +48,22 @@ pip3 install -e .
无。
在工程目录下生成 pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。
-### Netrans.gen_inputmeta 预处理配置文件生成
+### Netrans.config 预处理配置文件生成
描述: 将模型转换成 pnna 支持的格式。
代码示例:
```py3
- yolo_netrans.gen_inputmeta()
+ yolo_netrans.config()
```
参数:
- 无。
+ | 参数名 | 类型 | 说明 |
+|:---| -- | -- |
+|inputmeta| bool,str, [Fasle, True, "inputmeta_filepath"] | 指定 inputmeta, 默认为False。
如果为False,则会生成inputmeta模板,可使用mean、scale、reverse_channel 配合修改常用参数。
如果已有现成的 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
model_path = 'example/darknet/yolov4_tiny'
netrans_path = "netrans/bin" # 如果进行了export定义申明,这一步可以不用
diff --git a/netrans_py/gen_inputmeta.py b/netrans_py/config.py
similarity index 95%
rename from netrans_py/gen_inputmeta.py
rename to netrans_py/config.py
index 68979f9..2ab9c52 100644
--- a/netrans_py/gen_inputmeta.py
+++ b/netrans_py/config.py
@@ -3,7 +3,7 @@ import os
import sys
from utils import check_path, AttributeCopier, creat_cla
-class InputmetaGen(AttributeCopier):
+class Config(AttributeCopier):
def __init__(self, source_obj) -> None:
super().__init__(source_obj)
diff --git a/netrans_py/netrans.py b/netrans_py/netrans.py
index d42673c..62fe560 100644
--- a/netrans_py/netrans.py
+++ b/netrans_py/netrans.py
@@ -7,7 +7,7 @@ import file_model
from import_model import ImportModel
from quantize import Quantize
from export import Export
-from gen_inputmeta import InputmetaGen
+from config import Config
# from utils import check_path
import warnings
warnings.simplefilter('ignore', yaml.error.UnsafeLoaderWarning)
@@ -109,7 +109,7 @@ class Netrans():
func.import_network()
def inputmeta_gen(self):
- func = InputmetaGen(self)
+ func = Config(self)
func.inputmeta_gen()
def quantize(self, quantize_type):
diff --git a/quick_start_guide.md b/quick_start_guide.md
index 37f260c..289d0e8 100644
--- a/quick_start_guide.md
+++ b/quick_start_guide.md
@@ -15,7 +15,7 @@ conda create -n netrans python=3.8 -y
conda activate netrans
```
-安装 Netrans .
+下载 Netrans .
```bash
mkdir -p ~/app
cd ~/app