python 语法
模型转换流程:
1.初始化:
rknn = RKNN(verbose=True, verbose_file='./mobilenet_build.log')
verbose 决定是否在屏幕上显示详细日志信息。
如果设置了 verbose_file 参数并且 verbose 为 True,日志信息还将写入到指定的文
件中
2.模型 Config 配置:
rknn.config(
mean_values=[[103.94, 116.78, 123.68]],
std_values=[[58.82, 58.82, 58.82]],
quant_img_RGB2BGR=False,
target_platform='rk3566')
mean_values 和 std_values 用于设置输入的均值和归一化值。这些值在量化过程中使用,
且 C API 推理阶段图片不需再做均值和归一化值减小布署耗时。
quant_img_RGB2BGR 用于控制量化时加载量化校正图像时是否需要先进行 RGB 到
BGR 的转换,默认值为 False。该配置只在量化数据集时生效,实际部署模型时,模
型推理阶段不会生效,需要用户在输入前处理里预先处理好。注:
quant_img_RGB2BGR = True 时 模 型 的 推 理 顺 序 为 先 做 RGB2BGR 转 换 再 做
mean_values 和 std_values 操作,详细注意事项请见 10.3 章节。
target_platform 用于指定 RKNN 模型的目标平台,支持 RK3568、RK3566、RK3562、
RK3588、RV1106 和 RV1103。
quantized_algorithm 用于指定计算每一层的量化参数时采用的量化算法,可以选择
normal、mmse 或 kl_divergence,默认算法为 normal,详细说明见 3.1.7、6.1 和 6.2 章
节。
quantized_method 支 持 layer 或 channel , 用 于 每 层 的 权 重 是 否 共 享 参 数 , 默 认 为
channel,详细说明见 3.1.7、6.1 和 6.2 章节。
optimization_level 通过修改模型优化等级,可以关掉部分或全部模型转换过程中使用
到的优化规则。该参数的默认值为 3,打开所有优化选项,值为 2 或 1 时关闭一部分
可能会对部分模型精度产生影响的优化选项,值为 0 时关闭所有优化选项。
quantized_dtype 用 于 指 定 量 化 类 型 , 目 前 支 持 线 性 非 对 称 量 化 的 INT8 , 默 认 为
'asymmetric_quantized-8'。
custom_string 添加自定义字符串信息到 RKNN 模型,可以在 runtime 时通过 query 查
询 RKNN_QUERY_CUSTOM_STRING 得到该信息,方便部署时根据不同的 RKNN 模
型做特殊的处理。默认值为 None。
dynamic_input 支持动态输入,根据用户指定的多组输入 shape,来模拟动态输入的功
能,默认值为 None,详细说明见 5.4 章节。
更具体的 rknn.config()接口配置请参考 API 手册,上述仅列出部分常用参数。
3.加载模型
1)Caffe 模型加载接口:
ret = rknn.load_caffe(model='./mobilenet_v2.prototxt',
blobs='./mobilenet_v2.caffemodel')
2)TensorFlow 模型加载接口:
ret = rknn.load_tensorflow(
tf_pb='./ssd_mobilenet_v1_coco_2017_11_17.pb',
inputs=['Preprocessor/sub'],
outputs=['concat', 'concat_1'],
input_size_list=[[1, 300, 300, 3]])
需要提供 TensorFlow 模型文件(.pb 后缀)路径、输入节点名、输入节点的形状
以及输出节点名。
3)TensorFlow Lite 模型加载接口:
ret = rknn.load_tflite(model='./mobilenet_v1.tflite')
4)ONNX 模型加载接口:
ret = rknn.load_onnx(model='./arcface.onnx')
5)DarkNet 模型加载接口:
ret = rknn.load_darknet(model='./yolov3-tiny.cfg',
weight='./yolov3.weights')
6)PyTorch 模型加载接口
ret = rknn.load_pytorch(model='./resnet18.pt',
input_size_list=[[1, 3, 224, 224]])
4.构建 RKNN 模型
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
5.导出 RKNN 模型
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')
export_path 导出模型文件的路径。
cpp_gen_cfg 可以选择是否生成 C++ 部署示例。
6.模型释放
rknn.release()
模型推理
1.初始化
ret = rknn.init_runtime(target=platform,
device_id='515e9b401c060c0b')
target:目标硬件平台。默认值为 None,推理在模拟器上进行。需要获取板端实际推
理结果时需要填入相应的平台(RK3562 / RK3566 / RK3568 / RK3588 / RV1103 / RV1106)。
device_id:设备编号。默认值为 None。若有设置 target 则选择唯一一台设备进行推理。
如果电脑连接多台设备连板推理时,需要指定填入相应的设备 ID。
perf_debug : 进 行 性 能 评 估 时 是 否 开 启 debug 模 式 。 默 认 值 为 False , 调 用
rknn.val_perf()接口可以获取模型运行的总时间。设为 True 时,可以额外获取到每一层的运
行时间,RV1103 和 RV1106 平台不支持。
eval_mem:是否进入内存评估模式。默认值为 False。设为 True 进入内存评估模式后,
可以调用 rknn.eval_memory()接口获取模型运行时的内存使用情况。
2.模型推理
outputs = rknn.inference(inputs=[img])
inputs:待推理的输入列表,格式为 ndarray。
data_format : 输 入 数 据 的 layout 列 表 , 只 对 4 维 的 输 入 有 效 , 格 式 为 “NCHW” 或
“NHWC”。默认值为 None,表示所有输入的 layout 都为 NHWC。
3.模型评估
模型精度分析
ret = rknn.accuracy_analysis(inputs=[img_path], target=platform,
device_id='515e9b401c060c0b')
模型推理时间分析
ret = rknn.init_runtime(target=platform, perf_debug=True)
perf_detail = rknn.eval_perf()
perf_debug 为 true,会打印每一层的耗时结果和总的耗时结果。
模型内存评估分析
ret = rknn.init_runtime(target=platform, eval_mem=True)
memory_detail = rknn.eval_memory()