168 lines
4.6 KiB
Markdown
168 lines
4.6 KiB
Markdown
# netrans_py 使用
|
||
|
||
netrans_py 为 Netrans 编译器的 python 调用接口。
|
||
使用 ntrans_py 完成模型转换的步骤如下:
|
||
|
||
1. 导入模型
|
||
2. 生成并修改前处理配置文件 *_inputmeta.yml
|
||
3. 量化模型
|
||
4. 导出模型
|
||
|
||
## Netrans 类
|
||
|
||
创建 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.import 模型导入
|
||
|
||
描述: 将模型转换成 Pnna 支持的格式。
|
||
代码示例:
|
||
|
||
```py3
|
||
yolo_netrans.import()
|
||
```
|
||
|
||
参数:
|
||
无。
|
||
|
||
输出返回:
|
||
无。
|
||
在工程目录下生成 Pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。
|
||
|
||
## Netrans.config 预处理配置文件生成
|
||
|
||
描述: 将模型转换成 Pnna 支持的格式。
|
||
代码示例:
|
||
|
||
```py3
|
||
yolo_netrans.config()
|
||
```
|
||
|
||
参数:
|
||
|
||
```{table}
|
||
:widths: 20, 30, 50
|
||
:align: left
|
||
| 参数名 | 类型 | 说明 |
|
||
|:---| -- | -- |
|
||
|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")
|
||
```
|
||
|
||
参数:
|
||
|
||
```{table}
|
||
:widths: 20, 30, 50
|
||
:align: left
|
||
| 参数名 | 类型 | 说明 |
|
||
|:---| -- | -- |
|
||
|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)
|
||
|
||
```
|
||
|
||
参数
|
||
|
||
```{table}
|
||
:widths: 20, 30, 50
|
||
:align: left
|
||
| 参数名 | 类型 | 说明 |
|
||
|:---| -- | -- |
|
||
|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.import()
|
||
# 配置预处理 normlize 的参数
|
||
net.config(scale=1,mean=0)
|
||
# 模型量化
|
||
net.quantize("uint8")
|
||
# 模型导出
|
||
net.export()
|
||
|
||
# 模型直接量化成 int16 并导出, 直接复用刚配置好的 inputmeta
|
||
net.model2nbg(quantize_type = "int16", inputmeta=True)
|
||
```
|