跳转到内容

RKNN-Toolkit2模型转换API说明

1.API详细说明

1.1 RKNN初始化与释放

RKNN-Toolkit2的所有的API使用場合、RKNN()方法调用RKNN对象初始化需要。该对象使用場合、release()方法调用释放。

RKNN对象的初始化時在、verbose和verbose_file参数设置、详细信息输出可以。verbose详细输出指定。verbose_file设置、verboseTrue的場合、信息指定文件在書込。

示例:

# 输出详细日志
from rknn.api import RKNN
rknn = RKNN(verbose=True)
# ...
rknn.release()

1.2 模型配置

RKNN模型构建前在、模型在対通道平均値、量化画像的RGB2BGR変換、量化等设置需要。的操作config接口在设置可以。

项目内容
APIconfig
说明模型変換参数设置。
参数以下的各参数参照。
返回值无。

config参数详细说明

参数说明
mean_values输入的平均値。参数格式列表在、列表在1或多个的平均値列表含。多个输入模型在、各输入在支持多个的列表指定。各列表的長該当输入的通道数一致需要。示例:[[128,128,128]] 、1的输入的3通道値从128減算表示。默认值None在、所有的mean値0在表示。
std_values输入的归一化値。参数格式列表在、列表在1或多个的归一化値列表含。多个输入模型在、各输入在支持多个的列表指定。各列表的長該当输入的通道数一致需要。示例:[[128,128,128]] 、1的输入的3通道値在、平均値減算後在128在除算表示。默认值None在、所有的std値1在表示。
quant_img_RGB2BGR量化画像読込際在、先在RGB2BGR処理行表示。输入多个場合、[True, True, False] 的在列表在指定。该设置一般在Caffe模型在使用。Caffe模型的学習時在、多的場合数据画像在対RGB2BGR変換行为、该場合该设置True在。另外、该设置量化画像格式jpg/png/bmp的場合在的有效在、npy格式的加载時在無視。该为、模型输入BGR在場合、npy数据BGR格式在用意需要。该设置量化段階(build接口)在量化画像読込場合、或量化精度分析(accuracy_analysis接口)在的使用、最終的RKNN模型在保存。、模型输入BGR的場合、toolkit2的inference或C-API的run函数呼出前在、渡画像数据BGR格式在保証需要。
quantized_dtype量化。当前支持量化 w8a8、w4a16、w8a16、w4a8、w16a16i、w16a16i_dfp 。默认值w8a8。
- w8a8:重8bit非对称量化精度、活性値8bit非对称量化精度。(RK2118非支持)
- w4a16:重4bit非对称量化精度、活性値16bit浮点精度。(RK3576/RV1126B的支持)
- w8a16:重8bit非对称量化精度、活性値16bit浮点精度。(RK3562的支持)
- w4a8:重4bit非对称量化精度、活性値8bit非对称量化精度。(当前未支持)
- w16a16i:重16bit非对称量化精度、活性値16bit非对称量化精度。(RV1103/RV1106的支持)
- w16a16i_dfp:重16bit动态定点量化精度、活性値16bit动态定点量化精度。(RV1103/RV1106的支持)
quantized_algorithm各層的量化参数計算際在使用量化。当前支持量化 normal、mmse、kl_divergence、gdq 。默认值normal。normal量化速度速特徴在、推奨量化数据量一般在20~100枚程度。比多数据使用精度必在向上限。mmse量化総当反復方式採用为速度遅、通常normal比高精度得。推奨量化数据量一般在20~50枚程度在、用户必要在応量化数据量適宜増減可以。kl_divergence量化normal比時間、mmse比大幅在少、feature分布不均一場面在良好改善効果得場合。推奨量化数据量一般在20~100枚程度。gdq量化w4a16和w8a16在的有效在、w4a16和w8a16的重量化精度効果的在向上可以。推奨量化数据量200枚以上。
quantized_method当前支持方式 layer、channel、或 group{SIZE} 。默认值channel。
- layer:各層的weight在対1的量化参数持。
- channel:各層的weight的各输出通道在1的量化参数持。通常、channellayer比高精度在。
- group{SIZE}:channel基礎作为、各输出通道的weight输入通道方向在在{SIZE}単位的多个到分割、各個別的量化参数持。通常、group{SIZE}channel比高精度在。{SIZE}32~256的間的32的倍数在、例作为group32或group128。当前、group{SIZE}quantized_dtypew4a16的場合在的有效。
float_dtype非量化的場合在使用浮点数据类型指定。当前支持数据类型float16。默认值float16。
optimization_level模型最適化。默认值3。该値変更在、模型変換過程在使用一部或所有的最適化規則无效化可以。默认值3在所有的最適化有效。値2或1在设置、模型精度在影響与可能性的一部的最適化无效在。値0在设置、所有的最適化无效在。
target_platformRKNN模型的目标平台向在生成指定。当前 “rv1103”、“rv1103b”、“rv1106”、“rv1106b”、“rv1126b”、“rk2118”、“rk3562”、“rk3566”、“rk3568”、“rk3576”、“rk3588” 等支持。该参数大文字小文字区別。默认值None。
custom_stringRKNN模型在用户定义的字符串信息追加。runtime時在query在该信息获取在为、異RKNN模型在応特殊処理時在行。默认值None。
remove_weightconv等的weight除去、RKNN的従属模型生成。该従属模型完全weight持RKNN模型weight共有在、内存消費削減可以。默认值False。
compress_weight模型weight圧縮、RKNN模型削減可以。默认值False。
single_core_mode单一模型的生成指定。RKNN模型内存消費削減可以。默认值False。当前RK3588 / RK3576在的有效。
model_pruning模型在対枝刈行。weight疎模型在、変換後的RKNN模型計算量削減可以。默认值False。
op_targetOP的具体的执行对象(NPU/CPU/GPU等在执行)指定。输出tensor名用方式在、{‘op0_output_name’:‘cpu’, ‘op1_output_name’:‘npu’, …} 的在指定。此外、op_type指定方式在、{‘op_type’:‘cpu’, …} 的在指定可以。在、{‘op_type’:‘cpu’, ‘op0_output_name’:‘npu’, …} 的混在指定支持。默认值None。‘op0_output_name’和’op1_output_name’支持OP的输出tensor名在、精度分析(accuracy_analysis)機能的結果从获取可以。指定値该tensor在支持OP的执行对象CPU或NPU在表示。当前選択可能値 ‘cpu’ / ‘npu’ / ‘gpu’ / ‘auto’ 在、‘auto’执行对象自動選択。op_type指定場合精度分析結果从获取必要、模型内的所有的該当op_type的执行对象CPU或NPU在设置可以。示例:{‘Add’:‘cpu’, ‘Expand’:‘cpu’, …}。
dynamic_input用户指定多个組的输入shape在基、动态输入模擬機能。格式 [[input0_shapeA, input1_shapeA, …], [input0_shapeB, input1_shapeB, …], …] 。默认值None在、実験的機能。例、元的模型输入1在shape[1,3,224,224]的場合、或元的模型输入shape自体动态在、[1,3,height,width]或[1,3,-1,-1]的shape在場合在、该模型在3種類的输入shape [1,3,224,224]、[1,3,192,192]、[1,3,160,160] 支持場合、dynamic_input=[[[1,3,224,224]], [[1,3,192,192]], [[1,3,160,160]]] 设置可以。RKNN模型在変換後、推理時在支持shape的输入数据渡需要。
注:
1. 该機能有效在在、元的模型自体动态输入支持需要。在場合在。
2. 元的模型输入shape自体动态在場合、动态軸的異値设置可以。
quantize_weightbuild接口的do_quantizationFalse的場合在、一部的weight量化RKNN模型削減。默认值False。
remove_reshape模型的输入和输出在存在可能性的Reshape OP削除、模型执行時性能向上(当前多的平台在ReshapeCPU上在执行为)。默认值False。
注:有效在、模型的输入或输出节点的shape変更可能性。変換過程的warning表示注意深確認、時在输入和输出shape的変化考慮需要。
sparse_infer在在疎化模型在対疎化推理行、推理性能向上。当前RK3576/RV1126B在的有效。默认值False。
enable_flash_attentionFlash Attention有效在指定。默认值False。
注:FlashAttention https://arxiv.org/abs/2307.08691 在基実装、高速缓存内在高速化、帯域幅使用削減。、模型大为、模型在応有效化選択。详细 “RKNN Compiler Support Operator List” 的 exSDPAttention 说明参照。
auto_hybrid_cos_thresh模型量化時在自動混合量化有效在際的余弦距離値。默认值0.98。
auto_hybrid_euc_thresh模型量化時在自動混合量化有效在際的距離値。默认值None在、在有效在。

示例:

# model config
rknn.config(mean_values=[[103.94, 116.78, 123.68]],
std_values=[[58.82, 58.82, 58.82]],
quant_img_RGB2BGR=True,
target_platform='rk3566')

1.3 模型加载

RKNN-Toolkit2当前、Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch等的模型加载和変換在支持。的模型読込際、支持接口呼出需要。以下在各接口说明。

1.3.1 Caffe模型加载接口

项目内容
APIload_caffe
说明Caffe模型加载。(ARM64版在该接口当前未支持)
参数model:Caffe模型文件(.prototxt拡張子)的路径。
blobs:Caffe模型的数据文件(.caffemodel拡張子)的路径。
input_name:Caffe模型多个输入的場合、该参数在输入層名的順序指定可以。格式[‘input1’,‘input2’,‘input3’]。名称模型输入名一致需要。默认值None在、Caffe模型文件(.prototxt)在基自动态在指定。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前路径加载 mobilenet_v2 模型
ret = rknn.load_caffe(model='./mobilenet_v2.prototxt',
blobs='./mobilenet_v2.caffemodel')

1.3.2 TensorFlow模型加载接口

项目内容
APIload_tensorflow
说明TensorFlow模型加载。(ARM64版在该接口当前未支持)
参数tf_pb:TensorFlow模型文件(.pb拡張子)的路径。
inputs:模型的输入节点(tensor名)。多个输入节点支持。所有的输入节点名1的列表在入。
input_size_list:各输入节点在支持shape。所有的输入shape1的列表在入。例的ssd_mobilenet_v1模型在、输入节点在支持输入shape[[1, 300, 300, 3]]。
outputs:模型的输出节点(tensor名)。多个输出节点支持。所有的输出节点名1的列表在入。
input_is_nchw:模型输入的layout在在NCHW表示。默认值False在、输入layoutNHWC。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前目录加载 ssd_mobilenet_v1_coco_2017_11_17 模型
ret = rknn.load_tensorflow(tf_pb='./ssd_mobilenet_v1_coco_2017_11_17.pb',
inputs=['Preprocessor/sub'],
outputs=['concat', 'concat_1'],
input_size_list=[[300, 300, 3]])

1.3.3 TensorFlow Lite模型加载接口

项目内容
APIload_tflite
说明TensorFlow Lite模型加载。(ARM64版在该接口当前未支持)
参数model:TensorFlow Lite模型文件(.tflite拡張子)的路径。
input_is_nchw:模型输入的layout在在NCHW表示。默认值False在、输入layoutNHWC。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前目录加载 mobilenet_v1 模型
ret = rknn.load_tflite(model='./mobilenet_v1.tflite')

1.3.4 ONNX模型加载

项目内容
APIload_onnx
说明ONNX模型加载。
参数model:ONNX模型文件(.onnx拡張子)的路径。
inputs:模型输入节点(tensor名)。多个输入节点支持、所有的输入节点名1的列表在入。默认值None在、模型从获取。
input_size_list:各输入节点在支持shape。所有的输入shape1的列表在入。inputs设置場合、input_size_list设置需要。默认值None。
input_initial_val:模型输入的初期値设置。格式ndarray的列表。默认值None。主在一部的输入定数在固定为在使用。定数在固定输入None在设置可以。示例:[None, np.array([1])]。
outputs:模型的输出节点(tensor名)。多个输出节点支持、所有的输出节点名1的列表在入。默认值None在、模型从获取。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前目录加载 arcface 模型
ret = rknn.load_onnx(model='./arcface.onnx')

1.3.5 DarkNet模型加载接口

项目内容
APIload_darknet
说明DarkNet模型加载。(ARM64版在该接口当前未支持)
参数model:DarkNet模型文件(.cfg拡張子)的路径。
weight:重文件(.weights拡張子)的路径。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前目录加载 yolov3-tiny 模型
ret = rknn.load_darknet(model='./yolov3-tiny.cfg',
weight='./yolov3.weights')

1.3.6 PyTorch模型加载接口

项目内容
APIload_pytorch
说明PyTorch模型加载。量化意識学習(QAT)模型在支持。、torch的版本1.9.0以上到更新需要。
参数model:PyTorch模型文件(.pt拡張子)的路径。torchscript格式的模型在需要。
input_size_list:各输入节点在支持shape。所有的输入shape1的列表在入。
返回值0:导入成功。
-1:导入失败。

示例:

# 从当前目录加载 resnet18 模型
ret = rknn.load_pytorch(model='./resnet18.pt',
input_size_list=[[1,3,224,224]])

1.4 RKNN模型构建

项目内容
APIbuild
说明RKNN模型构建。
参数do_quantization:模型量化指定。默认值True。
dataset:量化校正在使用数据。当前文件格式支持。用户校正在使用画像(jpg或png格式)或npy文件的路径.txt文件在記述可以。文件在1行在1的路径記述。示例:
a.jpg
b.jpg

a.npy
b.npy
多个输入的場合、各输入在支持文件在区切。示例:
a.jpg a2.jpg
b.jpg b2.jpg

a.npy a2.npy
b.npy b2.npy
注:量化画像、予測在比較的近画像選択推奨。
rknn_batch_size:模型输入的Batch参数調整。默认值None在、調整表示。1比大場合、1回的推理在多个的输入画像或输入数据同時在推理可以。例MobileNet模型的元的input维度[1, 224, 224, 3]、output维度[1, 1001]的場合、rknn_batch_size4在设置、input维度[4,224,224,3]、output维度[4,1001]在。
注:
1. rknn_batch_sizeNPU平台在的性能向上(利用率向上)期待可以。该为、rknn_batch_size的値数一致推奨。
2. rknn_batch_size変更、模型的input/output的shape変更。inference在模型推理場合、支持input设置必要、後処理時在返却outputs処理需要。
auto_hybrid:自動混合量化有效在、精度或調整指定。默认值False在、調整表示。模型量化場合、自動混合量化有效在、指定値比低余弦距離/距離的opfp16計算到変換。(当前w8a8量化在的支持)。模型量化場合、自動混合量化有效在、fp16的数値範囲超opint16計算到変換。
注:
1. 余弦距離和距離的値、config接口的auto_hybrid_cos_thresh和auto_hybrid_euc_thresh在设置可以。
返回值0:构建成功。
-1:构建失败。

示例:

# 构建 RKNN 模型并执行量化
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')

1.5 RKNN模型导出

本在构建RKNN模型、该接口在比RKNN模型文件作为导出、模型在使用可以。

项目内容
APIexport_rknn
说明RKNN模型指定文件(.rknn拡張子)在保存。
参数export_path:导出模型文件的路径。
返回值0:导出成功。
-1:导出失败。

示例:

# 将构建完成的 RKNN 模型保存为当前路径下的 mobilenet_v1.rknn 文件
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')

1.6 RKNN模型加载

项目内容
APIload_rknn
说明RKNN模型加载。RKNN模型読込後、模型配置、模型加载、RKNN模型构建的手順不要。此外、加载後的模型NPU硬件在接続推理或性能数据获取等行場合在限定、模拟器精度分析在使用在。
参数path:RKNN模型文件的路径。
返回值0:加载成功。
-1:加载失败。

示例:

# 从当前路径加载 mobilenet_v1.rknn 模型
ret = rknn.load_rknn(path='./mobilenet_v1.rknn')

1.7 运行时环境初始化

模型推理或性能評価的前在、必运行时環境初始化、模型的执行平台(具体的目标硬件平台或软件模拟器)明確在需要。

项目内容
APIinit_runtime
说明运行时環境初始化。
参数target:目标硬件平台。“rv1103”、“rv1103b”、“rv1106”、“rv1106b”、“rv1126b”、“rk3562”、“rk3566”、“rk3568”、“rk3576”、“rk3588” 支持。默认值None在、PC上在使用場合、模型模拟器上在执行。注:targetNone在设置場合、模型模拟器上在执行在先在build或hybrid_quantization接口呼出需要。
device_id:设备番号。PC在多个的设备接続場合、该参数指定需要。设备番号list_devices接口在確認可以。默认值None。
perf_debug:性能評価時在debug有效在指定。debug在各層的执行時間获取可以。有效在場合模型全体的执行時間的获取可以。默认值False。
eval_mem:内存評価在入指定。内存評価在入、eval_memory接口在模型执行時的内存使用状況获取可以。默认值False。
async_mode:非同期使用指定。默认值False。推理接口调用時在、输入画像设置、模型推理、推理結果获取的3段階。非同期有效在、当前的输入设置前的推理同時在执行可以。该为、最初的除、以降的各在输入设置時間隠蔽、性能向上可以。非同期在、毎回返推理結果前的結果。(当前版本在该参数未支持)
core_mask:运行时時的NPU设置。支持平台RK3588 / RK3576在、设置以下的如下。
RKNN.NPU_CORE_AUTO:模型自動、当前空NPU在自動执行。
RKNN.NPU_CORE_0:NPU0上在执行。
RKNN.NPU_CORE_1:NPU1上在执行。
RKNN.NPU_CORE_2:NPU2上在执行。
RKNN.NPU_CORE_0_1:NPU0和NPU1上在同時执行。
RKNN.NPU_CORE_0_1_2:NPU0、NPU1、NPU2上在同時执行。
RKNN.NPU_CORE_ALL:平台在基NPU数自動设置。默认值RKNN.NPU_CORE_AUTO。
注:RK3576在2为、NPU_CORE_2和NPU_CORE_0_1_2设置在。
fallback_prior_device:OPNPU仕様超場合的fallback優先順位设置。当前 “cpu” 或 “gpu” 支持。“gpu” GPU硬件存在平台在的有效。默认值 “cpu” 。
返回值0:运行时環境初始化成功。
-1:运行时環境初始化失败。

示例:

# 初始化运行时环境
ret = rknn.init_runtime(target='rk3566')

1.8 模型推理

模型推理行前在、必1的RKNN模型构建或読込需要。

项目内容
APIinference
说明当前的模型在対推理行、推理結果返。运行时環境初始化時在targetRockchip NPU设备在设置場合、硬件平台上的推理結果得。target设置場合、模拟器上的推理結果得。
参数inputs:推理对象输入列表在、格式ndarray。
data_format:输入数据的layout列表在、“nchw”或“nhwc”指定。4维度输入在的有效。默认值None在、所有的输入layoutNHWC在表示。
inputs_pass_through:输入的透過列表。默认值None在、所有的输入透過表示。非透過在、输入NPU驱动到渡前在、平均値減算標準偏差除算等行。透過在的処理行、输入直接NPU到渡。该参数値列表。例input0透過、input1透過場合、値[1, 0]。
返回值results:推理結果在、型ndarray list。

分類模型(mobilenet_v1等)的示例:

# 使用模型对图像进行推理并获取 TOP5 结果
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)

输出TOP5結果的示例:

-----TOP 5-----
[ 156] score:0.928223 class:"Shih-Tzu"
[ 155] score:0.063171 class:"Pekinese, Pekingese, Peke"
[ 205] score:0.004299 class:"Lhasa, Lhasa apso"
[ 284] score:0.003096 class:"Persian cat"
[ 285] score:0.000171 class:"Siamese cat, Siamese

1.9 模型性能评估

项目内容
APIeval_perf
说明模型性能評価。模型PC在接続RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588上在执行需要。init_runtime在运行时環境初始化際在perf_debugFalse在设置場合、硬件上在的模型全体执行時間得。perf_debugTrue在设置場合、全体時間在加各層的耗時信息返。
参数is_print:性能信息输出。默认值True。
fix_freq:硬件设备的周波数固定。默认值True。
返回值perf_result:性能信息(字符串)。

示例:

# 评估模型性能
perf_detail = rknn.eval_perf()

1.10 获取内存使用情况

项目内容
APIeval_memory
说明模型硬件平台上在执行際的内存使用状況获取。模型PC在接続RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588上在执行需要。
参数is_print:内存使用状況規定在输出。默认值True。
返回值memory_detail:内存使用状況在、型辞書。内存使用状況下記的格式在辞書在格納。
{
‘weight_memory’: 3698688,
‘internal_memory’: 1756160,
‘other_memory’: 484352,
‘total_memory’: 5939200,
}
‘weight_memory’ 运行时時的模型weight的内存占有表示。
‘internal_memory’ 运行时時的模型中間tensor内存占有表示。
‘other_memory’ 运行时時的该他内存占有表示。
‘total_model_allocation’ 运行时時的総内存占有表、weight、中間tensor、该他内存占有的合計。

示例:

# 评估模型内存使用情况
memory_detail = rknn.eval_memory()

examples/caffe/mobilenet_v2RK3588上在执行場合的内存占有示例:

======================================================
Memory Profile Info Dump
======================================================
NPU model memory detail(bytes):
Weight Memory: 3.53 MiB
Internal Tensor Memory: 1.67 MiB
Other Memory: 473.00 KiB
Total Memory: 5.66 MiB
INFO: When evaluating memory usage, we need consider
the size of model, current model size is: 4.09 MiB
======================================================

1.11 查询SDK版本

项目内容
APIget_sdk_version
说明SDK API和驱动的版本番号获取。注:该接口使用前在、模型加载运行时環境初始化完了需要。此外、该接口硬件平台RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588上在的使用可以。
参数无。
返回值sdk_version:API和驱动的版本信息。型字符串。

示例:

# 获取 SDK 版本信息
sdk_version = rknn.get_sdk_version()
print(sdk_version)

返SDK信息示例:

==============================================
RKNN VERSION:
API: 1.5.2 (8babfea build@2023-08-25T02:31:12)
DRV: rknn_server: 1.5.2 (8babfea build@2023-08-25T10:30:12)
DRV: rknnrt: 1.5.3b13 (42cbca6f5@2023-10-27T10:13:21)
==============================================

1.12 混合量化

1.12.1 hybrid_quantization_step1

混合量化機能使用場合、第一段階在呼出主要接口hybrid_quantization_step1。该接口临时模型文件(<model_name>.model)、数据文件(<model_name>.data)、量化设置文件(<model_name>.quantization.cfg)生成。

项目内容
APIhybrid_quantization_step1
说明読込元模型在基、支持临时模型文件、设置文件、量化设置文件生成。
参数dataset:1.4「RKNN模型构建」的dataset说明参照。
rknn_batch_size:1.4「RKNN模型构建」的rknn_batch_size说明参照。
proposal:混合量化的设置推奨値生成。默认值False。
proposal_dataset_size:proposal在使用dataset的枚数。默认值1。proposal機能比較的時間为、在dataset内的最初的1枚的使用。
custom_hybrid:用户指定多个組的输入名输出名在基、混合量化对象選択。格式[[input0_name, output0_name], [input1_name, output1_name], …]。默认值None。
注:输入名输出名生成临时模型文件(<model_name>.model)在基選択需要。
返回值0:成功。
-1:失败。

示例:

# 调用 hybrid_quantization_step1 生成量化配置文件
ret = rknn.hybrid_quantization_step1(dataset='./dataset.txt')

1.12.2 hybrid_quantization_step2

混合量化機能使用場合在RKNN模型生成为的接口。

项目内容
APIhybrid_quantization_step2
说明临时模型文件、设置文件、量化设置文件、校正数据输入作为受取、混合量化後的RKNN模型生成。
参数model_input:hybrid_quantization_step1在生成临时模型文件(<model_name>.model)的路径。
data_input:hybrid_quantization_step1在生成数据文件(<model_name>.data)的路径。
model_quantization_cfg:hybrid_quantization_step1在生成、修正済的模型量化设置文件(<model_name>.quantization.cfg)的路径。
返回值0:成功。
-1:失败。

示例:

# Call hybrid_quantization_step2 to generate hybrid quantized RKNN model
ret = rknn.hybrid_quantization_step2(
model_input='./ssd_mobilenet_v2.model',
data_input='./ssd_mobilenet_v2.data',
model_quantization_cfg='./ssd_mobilenet_v2.quantization.cfg')

1.13 量化精度分析

该接口、浮点推理量化推理执行、各層的数据生成量化精度分析行。

项目内容
APIaccuracy_analysis
说明推理执行生成。各層的tensor数据dump。fp32quant的2種類的数据类型的dump、量化誤差的計算在使用。
注:
1. 该接口build或hybrid_quantization_step2的後在的呼出。
2. target指定、元模型量化済模型(QAT模型)在場合、调用失败。
3. 该接口在使用量化方式config在指定方式一致。
参数inputs:画像(jpg / png / bmp / npy等)的路径list。
output_dir:输出目录。所有的该目录在保存。默认值’./snapshot’。

target设置場合、output_dir配下在以下输出。
- simulator目录:量化模型全体simulator上在完全在执行際的各層結果(float32在変換済)保存。
- golden目录:浮点模型全体simulator上在完全在执行際的各層結果保存。
- error_analysis.txt:simulator上在量化模型層在执行際的各層結果golden浮点模型的各層結果的余弦距離(entire_error cosine)、和量化模型前層的浮点結果输入作为受取場合的输出浮点模型的余弦距離(single_error cosine)記録。详细信息error_analysis.txt確認。

target设置場合、output_dir在在以下输出。
- runtime目录:量化模型全体NPU上在完全在执行際的各層結果(float32在変換済)保存。
- error_analysis.txt:上記記録内容在加、量化模型simulator上在層在执行各層結果NPU上在層在执行各層結果的余弦距離(entire_error cosine)等的信息記録。详细信息error_analysis.txt確認。

target:目标硬件平台。“rv1103”、“rv1103b”、“rv1106”、“rv1106b”、“rv1126b”、“rk3562”、“rk3566”、“rk3568”、“rk3576”、“rk3588”支持。默认值None。target设置場合、NPU执行時的各層結果获取、精度分析行。
device_id:设备番号。PC在多个设备接続場合、该参数指定需要。设备番号list_devices接口在確認可以。默认值None。
返回值0:成功。
-1:失败。

示例:

# Accuracy analysis
ret = rknn.accuracy_analysis(inputs=['./dog_224x224.jpg'])

1.14 获取设备列表

项目内容
APIlist_devices
说明接続済的RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588列挙。注:当前、设备接続在ADBNTB的2種類。多个设备接続時、的所有同一在確認。
参数无。
返回值adb_devices列表和ntb_devices列表返。设备空的場合空列表返。

示例:

rknn.list_devices()

返设备一覧示例:

*************************
all device(s) with adb mode:
VD46C3KM6N
*************************

注:多个设备使用場合、接続一致需要。一致場合、競合発生、设备接続在失败。

1.15 导出加密模型

该接口、通常的RKNN模型暗号化、暗号化後的模型生成。

项目内容
APIexport_encrypted_rknn_model
说明用户指定暗号化在基、通常的RKNN模型暗号化。注:RV1103/RV1103B/RV1106/RV1106B/RK2118平台当前未支持。
参数input_model:暗号化对象的RKNN模型路径。
output_model:暗号化後模型的保存路径。默认值None在、{original_model_name}.crypt.rknn暗号化後模型名作为使用。
crypt_level:暗号化。1、2、3的3段階。默认值1。高安全性高、復号在時間長。逆在、低安全性低、復号速。数据类型整数。
返回值0:成功。
-1:失败。

示例:

ret = rknn.export_encrypted_rknn_model('test.rknn')

1.16 注册自定义算子

该接口、自定义算子登録为的。

项目内容
APIreg_custom_op
说明用户提供自定义算子登録。当前ONNX模型的支持。
参数custom_op:用户定义的算子。ONNX算子仕様内在存在新算子定义必要場合在使用。该算子的op_type“cst”在始推奨、该算子的shape_infer函数和compute函数用户自身実装需要。
注:custom_op算子模型変換和自定义算子付RKNN模型生成的在使用。设备側在場合、《RKNN SDK User Guide》的5.5章参照。
返回值0:成功。
-1:失败。

示例:

import numpy as np
from rknn.api.custom_op import get_node_attr
class cstSoftmax:
op_type = 'cstSoftmax'
def shape_infer(self, node, in_shapes, in_dtypes):
out_shapes = in_shapes.copy()
out_dtypes = in_dtypes.copy()
return out_shapes, out_dtypes
def compute(self, node, inputs):
x = inputs[0]
axis = get_node_attr(node, 'axis')
x_max = np.max(x, axis=axis, keepdims=True)
tmp = np.exp(x - x_max)
s = np.sum(tmp, axis=axis, keepdims=True)
outputs = [tmp / s]
return outputs
ret = rknn.reg_custom_op(cstSoftmax)

1.17 生成C++部署示例

项目内容
APIcodegen
说明C++的例自動生成。
参数output_path:输出文件夹的目录。用户目录名设置可以。
inputs:模型输入的路径列表指定。省略可能。有效文件格式jpg/png/npy。npy文件输入場合、npy数据的维度信息模型输入的维度信息一致需要。
overwrite:True在设置、output_path在指定目录内的文件上書。默认值False。
返回值0:成功。
-1:失败。

示例:

ret = rknn.codegen(output_path='./rknn_app_demo',
inputs=['./mobilenet_v2/dog_224x224.jpg'],
overwrite=True)