netrans/netrans_py/README.md

157 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Python api netrans_py 使用介绍
netrans_py 支持通过 python api 灵活地将模型转换成pnna 支持的格式。
使用 ntrans_py 完成模型转换的步骤如下:
1. 导入模型
2. 生成并修改前处理配置文件 *_inputmeta.yml
3. 量化模型
4. 导出模型
## netrans_py api
### Netrans 导入api及创建实例
创建 Netrans
描述: 实例化 Netrans 类。
代码示例:
```py3
from netrans import Netrans
yolo_netrans = Netrans("../examples/darknet/yolov4_tiny")
```
参数
| 参数名 | 类型 | 说明 |
|:---| -- | -- |
|model_path| str| 第一位置参数,模型文件的路径|
|netans| str | 如果 NETRANS_PATH 没有设置可通过该参数指定netrans的路径|
输出返回:
无。
<font color="#dd0000">注意:</font> 模型目录准备需要和netrans_cli一致具体数据准备要求见[introduction](./introduction.md)。
### Netrans.load_model 模型导入
描述: 将模型转换成 pnna 支持的格式。
代码示例:
```py3
yolo_netrans.load_model()
```
参数:
无。
输出返回:
无。
在工程目录下生成 pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。
### Netrans.config 预处理配置文件生成
描述: 将模型转换成 pnna 支持的格式。
代码示例:
```py3
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 参数 |
输出返回:
无。
### Netrans.quantize 量化模型
描述: 对模型生成量化配置文件。
代码示例:
```py3
yolo_netrans.quantize("uint8")
```
参数:
| 参数名 | 类型 | 说明 |
|:---| -- | -- |
|quantize_type| str| 第一位置参数,模型量化类型,仅支持 "uint8", "int8", "int16"|
输出返回:
无。
### Netrans.export 模型导出
描述: 对模型生成量化配置文件。
代码示例:
```py3
yolo_netrans.export()
```
参数:
无。
输出返回:
无。请在目录 “wksp/*/” 下检查是否生成nbg文件。
### Netrans.model2nbg 一键生成nbg文件
描述: 模型导入、量化、及nbg文件生产
代码示例:
```py3
# 无预处理
yolo_netrans.model2nbg(quantize_type='uint8')
# 需要对数据进行normlize, menas为128, scale 为 0.0039
yolo_netrans.model2nbg(quantize_type='uint8',mean=128, scale = 0.0039)
# 需要对数据分通道进行normlize, menas为128,127,125,scale 为 0.0039, 且reverse_channel 为 True
yolo_netrans.model2nbg(quantize_type='uint8'mean=[128, 127, 125], scale = 0.0039, reverse_channel= True)
# 已经进行初始化设置
yolo_netrans.model2nbg(quantize_type='uint8', inputmeta=True)
```
参数
| 参数名 | 类型 | 说明 |
|:---| -- | -- |
|quantize_type| str, ["uint8", "int8", "int16" ] | 量化类型,将模型量化成该参数指定的类型 |
|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 参数 |
<!-- |||| -->
输出返回:
请在目录 “wksp/*/” 下检查是否生成nbg文件。
## 使用实例
```py3
from nertans import Netrans
model_path = 'example/darknet/yolov4_tiny'
netrans_path = "netrans/bin" # 如果进行了export定义申明这一步可以不用
# 初始化netrans
net = Netrans(model_path,netrans=netrans_path)
# 模型载入
net.load_model()
# 生成 inputmeta 文件
net.gen_inputmeta()
# 配置预处理 normlize 的参数
net.config(scale=1,mean=0)
# 模型量化
net.quantize("uint8")
# 模型导出
net.export()
# 模型直接量化成 int16 并导出, 直接复用刚配置好的 inputmeta
net.model2nbg(quantize_type = "int16", inputmeta=True)
```