netrans/docs/netrans_py.md

5.2 KiB
Raw Permalink Blame History

netrans_py 使用

netrans_py 为 Netrans 编译器的 python 调用接口。 使用 ntrans_py 完成模型转换的步骤如下:

  1. 导入模型
  2. 生成并修改前处理配置文件 *_inputmeta.yml
  3. 量化模型
  4. 导出模型

Netrans 类

创建 Netrans

描述: 实例化 Netrans 类。 代码示例:

from netrans import Netrans
yolo_netrans = Netrans("../examples/darknet/yolov4_tiny")

参数

参数名 类型 说明
model_path str 第一位置参数,模型文件的路径
netrans str 如果 NETRANS_PATH 没有设置可通过该参数指定netrans的路径

输出返回: 无。

Netrans.load 模型导入

描述: 将模型转换成 Pnna 支持的格式。 代码示例:

yolo_netrans.load()

参数: 无。

输出返回: 无。 在工程目录下生成 Pnna 支持的模型格式,以.json结尾的模型文件和 .data结尾的权重文件。

Netrans.config 预处理配置文件生成

描述: 将模型转换成 Pnna 支持的格式。 代码示例:

# 没有直接可用的 inputmeta,需要生成.
yolo_netrans.config()
# 指定复用的 inputmeta.
yolo_netrans.config(inputmeta="../examples/darknet/yolov4_tiny/yolov4_tiny_inputmeta.yml")
# 指定预处理参数 mean 和 scale. 支持 int, float 和 list.  
yolo_netrans.config(mean=128, scale = 0.0039)
# 需要对数据分通道进行normlize, menas为128,127,125,scale 为 0.0039, 且reverse_channel 为 True 
yolo_netrans.config(mean=[128, 127, 125], scale = 0.0039, reverse_channel= True)

参数:

: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 模型量化

描述: 对模型生成量化配置文件。 代码示例:

yolo_netrans.quantize("uint8")

参数:

:widths: 20, 30, 50
:align: left
| 参数名 | 类型 | 说明  |
|:---| -- | -- |
|quantize_type| str| 第一位置参数,模型量化类型,仅支持 "uint8", "int8", "int16"|

输出返回: 无。

Netrans.export 模型导出

描述: 对模型生成量化配置文件。 代码示例:

yolo_netrans.export()

参数: quantize_type (可选): 定义导出的量化类型, 默认和 quantize() 一致.

输出返回: 无。请在目录 “wksp/*/” 下检查是否生成nbg文件。

Netrans.model2nbg 模型生成nbg文件

描述: 模型导入、量化、及nbg文件生产 代码示例:

 # 无预处理
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)

参数

: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文件。

使用示例

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()
# 配置预处理 normlize 的参数
net.config(scale=1,mean=0)
# 模型量化
net.quantize("uint8")
# 模型导出
net.export()

# 模型直接量化成 int16 并导出, 直接复用刚配置好的 inputmeta
net.model2nbg(quantize_type = "int16", inputmeta=True)

作者 {{xujiao}}