You're reading an pre-release version of this documentation.
For the latest stable release version, please have a look at master.

Netrans Python API 参考

版本: v6.33.3 (Python 3.10 + Acuity 6.33)

概述

Netrans 提供简洁的 Python API,用于将神经网络模型转换为 PNNA 芯片可运行的 NBG 格式。

核心流程

load() → quantize() → export()

快速示例

from netrans import Netrans

model = Netrans()
model.load('./yolov5s', mean=[0, 0, 0], scale=255)
model.quantize('asymu8')
model.export('asymu8', platform='pnna')

Netrans 类

初始化

Netrans()

创建 Netrans 实例,自动验证运行环境和依赖项。


加载模型

load()

load(model_path, *, mean=None, scale=None)

加载并准备模型,支持多种框架格式和预处理参数配置。

参数:

  • model_path (str): 模型目录路径,必须包含有效的模型文件

  • mean (float | list[float], 可选): 通道均值

    • 列表:长度必须与模型输入通道数一致

    • 单值:仅适用于单通道模型

  • scale (float | list[float], 可选): 通道缩放系数

    • 单值:自动广播到所有通道

    • 列表:长度必须与 mean 一致

示例:

# 三通道模型
model.load('./yolov5s', mean=[0, 0, 0], scale=255)

# 单通道模型
model.load('./lenet_gray', mean=127.5, scale=255)

注意:

  • 支持的模型格式:ONNX, TensorFlow, TFLite, PyTorch, Caffe, Darknet, Keras

  • 导入格式兼容性详见 cookbook.md


load_generated()

load_generated(model_path, quantized="float32", use_hybrid=False)

加载已生成的模型(用于继续处理已量化的模型)。

参数:

  • model_path (str): 模型目录路径

  • quantized (str, 可选): 量化类型,默认 "float32"

  • use_hybrid (bool, 可选): 是否使用混合量化,默认 False


量化

quantize()

quantize(quantized, *, algorithm=1, iterations=1, entropy=False, mle=False)

对加载的模型进行量化处理。

参数:

  • quantized (str): 目标量化类型

    • asymu8: 非对称8位无符号(默认推荐)

    • symi8: 对称8位有符号

    • symi16: 对称16位有符号

    • fp16: 半精度浮点

    • 更多类型详见 cookbook.md 速查表

  • algorithm (int, 可选): 量化算法,默认 1

    • 0: normal - 普通量化

    • 1: KL - KL散度(默认)

    • 2: moving_average - 移动平均

    • 3: auto - 自动选择

  • iterations (int, 可选): 量化迭代次数,默认 1

  • entropy (bool, 可选): 计算张量熵,用于量化分析,默认 False

  • mle (bool, 可选): 最小化层间误差,用于量化分析,默认 False

示例:

# 基础量化
model.quantize('asymu8')

# 高精度量化
model.quantize('asymu8', algorithm=1, iterations=5)

# 量化分析模式
model.quantize('asymu8', entropy=True, mle=True)

quantize_hybrid()

quantize_hybrid(quantized, *, algorithm=1, iterations=1, 
                hybrid_qtype='dfpi16', cust_qnt_layers=None)

对指定层应用混合精度量化。

参数:

  • quantized (str): 基础量化类型

  • algorithm (int, 可选): 量化算法,同 quantize()

  • iterations (int, 可选): 迭代次数,默认 1

  • hybrid_qtype (str, 可选): 混合层量化类型,默认 'dfpi16'

  • cust_qnt_layers (str, 可选): 自定义量化层配置文件路径

配置文件格式(cust_qnt_layers.txt):

Conv_245
Conv_269
Conv_293

示例:

model.quantize_hybrid('asymu8', cust_qnt_layers='layers.txt')

导出

export()

export(quantized='float32', *, model_path=None, platform='pnna', 
       use_hybrid=False, preprocess=True, postprocess=True, core_num=None)

将量化后的模型导出为 PNNA 芯片可加载的 NBG 格式。

参数:

  • quantized (str, 可选): 量化类型,默认 'float32'

  • model_path (str, 可选): 模型目录路径

  • platform (str, 可选): 目标芯片平台,默认 'pnna'

    • 'pnna': VIP8000(单核架构,默认平台)

    • 'pnna2': VIP9400(多核架构,支持 1-4 核)

  • use_hybrid (bool, 可选): 是否使用混合量化,默认 False

  • preprocess (bool, 可选): 是否集成预处理到网络图,默认 True

  • postprocess (bool, 可选): 是否集成后处理到网络图,默认 True

  • core_num (str, 可选): 多核配置(仅 pnna2 支持)

    • "1core" / "1": 单核

    • "2core" / "2": 双核

    • "4core" / "4": 四核

示例:

# 基础导出
model.export('asymu8')

# 带前后处理
model.export('asymu8', preprocess=True, postprocess=True)

# 多核导出(仅 pnna2)
model.export('asymu8', platform='pnna2', core_num='4core')

输出文件:

  • wksp/<model>_<quantized>_nbg_unify/network_binary.nb: NBG 文件

  • wksp/<model>_<quantized>_nbg_unify/nbg_meta.json: 元数据


调试分析

dump()

dump(quantized='float32', *, use_hybrid=False)

导出网络各层张量数据,用于量化效果分析。

参数:

  • quantized (str, 可选): 量化类型,默认 'float32'

  • use_hybrid (bool, 可选): 是否使用混合量化,默认 False

输出: dump/<model>_<quantized>/ 目录下的张量文件


inference()

inference(quantized='float32', *, iterations=1, use_hybrid=False)

运行模型推理并保存输入输出张量。

参数:

  • quantized (str, 可选): 量化类型,默认 'float32'

  • iterations (int, 可选): 推理迭代次数,默认 1

  • use_hybrid (bool, 可选): 是否使用混合量化,默认 False

输出: wksp/<model>_<quantized>/golden/ 目录


check_opset()

check_opset(model_path, verbose=False)

检查 ONNX 模型的 opset 版本是否符合要求。

参数:

  • model_path (str): ONNX 模型文件路径或目录

  • verbose (bool, 可选): 是否显示详细信息,默认 False

返回: bool,是否符合要求

支持的 opset 版本: 7 - 17

示例:

is_valid = model.check_opset('./model.onnx')

参数速查

量化类型

详见 cookbook.md - 量化类型

量化算法

算法

说明

0

normal

普通量化

1

KL

KL散度(推荐)

2

moving_average

移动平均

3

auto

自动选择

预处理参数

详见 cookbook.md - 预处理参数


完整示例

更多示例请参考 cookbook.md


相关文档