瑞芯微电子股份有限公司
1
密级状态:绝密( ) 秘密( ) 内部( ) 公开(√ )
RKNN-Toolkit 问题排查手册
(技术部,图形计算平台中心)
文件状态:
[ ] 正在修改
[√] 正式发布
当前版本:
1.6.0
作 者:
HPC
完成日期:
2020-12-31
审 核:
卓鸿添
完成日期:
2020-12-31
瑞芯微电子股份有限公司
Rockchip Electronics Co., Ltd
(版本所有,翻版必究)
瑞芯微电子股份有限公司
2
更新记录
版本
修改人
修改日期
修改说明
核定人
0.9
HPC
2019-04-01
初稿
卓鸿添
1.0
HPC
2019-07-18
增加一些常见问题
卓鸿添
1.1
HPC
2019-08-22
增加深度神经网络模型设计建议
卓鸿添
1.2
HPC
2019-10-11
增加一些常见问题
卓鸿添
1.3
HPC
2019-12-25
增加一些常见问题,重新整理目录结构
卓鸿添
1.3.2
HPC
2020-04-13
增加一些常见问题
卓鸿添
1.4.0
HPC
2020-08-13
增加一些常见问题,完善问题排查步骤
卓鸿添
1.6.0
HPC
2020-12-31
增加一些常见问题
卓鸿添
瑞芯微电子股份有限公司
3
目录
1 RKNN TOOLKIT 用法相关问题 ................................................................................................. 4
2 关于量化精度的问题 .................................................................................................................... 23
3 CAFFE 模型转换常见问题 ......................................................................................................... 26
4 TENSORFLOW 模型转换常见问题 ......................................................................................... 29
5 PYTORCH 模型转换常见问题 ................................................................................................... 31
6 ONNX 模型转换问题 ................................................................................................................... 33
7 深度神经网络模型设计建议 ........................................................................................................ 33
瑞芯微电子股份有限公司
4
1 RKNN Toolkit 用法相关问题
RKNN Toolkit 安装问题
安装 RKNN Toolkit 时出现”undefined symbol: PyFPE_jbuf”错误
出现这个错误的原因是 Python 环境不干净,比如在两个不同的路径里都安装了 numpy。
可以重新创建一个干净的 Python 环境后再试。
安装 RKNN Toolkit 出现“Permission Denied”错误。
安装的时候需要加上"—user"选项。
在虚拟机里是否可以安装 RKNN Toolkit 并使用模拟器进行推理?
可以。虚拟机操作系统得是 Ubuntu16.04 或 Ubuntu18.04,且 CPU 架构是 x86_64。
模型配置问题
rknn.config 函数,为什么 channel_mean_value 有 4 个值?如果是 rgb
图像,还是 4 个值吗?
rknn.config 里面的 channel-mean-value: 用来设置预处理的命令行参数。包括四个值(M0
M1 M2 S0),前三个值为均值参数,后面一个值为 Scale 参数。对于输入数据是三通的(Cin0,
Cin1, Cin2)数据来讲,经过预处理后,输出的数据为(Cout0, Cout1, Cout2),计算过程如下:
Cout0 = (Cin0 - M0)/S0
Cout1 = (Cin1 - M1)/S0
Cout2 = (Cin2 - M2)/S0
例如,如果需要将输入数据归一化到[-1, 1]之间,则可以设置这个参数为(128 128 128
128)。如果需要将输入数据归一化到[0, 1]之间,则可以设置这个参数为 (0 0 0 255)。
注:这个参数从 1.4.0 版本开始,用 mean_values 和 std_values 代替,从 1.6.0 版本开始
正式移除。
瑞芯微电子股份有限公司
5
当输入图像是单通道灰度图片时, rknn.config 接口如何设定
对于 1.3.0 之前的版本,请参考 1.2.1 的回答,当输入图像是单通道时,只用到”Cout0 =
(Cin0 - M0)/S0”,因此你可以设置为(M0, 0, 0, S0),M1、M2 的值不会被用到。
从 1.3.0 开始,单通道图片的 channel_mean_value 应该设成(M0, S0)。
从 1.4.0 开始,单通道图像可以设置 mean_values=[[M0]], std_values=[[S0]],或者
channel_mean_value=’M0, S0’。从 1.6.0 版本开始,channel_mean_value 参数被移除,请使用
mean_values 和 std_values。
rknn.config 函数,怎么设定 scale 参数,即把输入的 range 压缩到一
定的范围。e.g. from (0-255) to (0-1)
参考 1.2.1 的回答。
当输入的 channel 大于 3 时,rknn.config 接口如何设定
对于 1.3.0 之 前 的 版 本 , 比 如 输 入 维 度 为 1x25x25x96 ( NHWC 格 式 ) 时 ,
channel_mean_value 及 reorder_channel 均不要设置。这种情况下默认所有通道的 mean 为 0,
scale 为 1。
从 1.3.0 版本开始,如果输入维度为 1x25x25x4(NHWC)时,channel_mean_value 应该
被设置成(M0, M1, M2, M3, S0)。如果维度大于 5,如 1x25x25x96(NHWC 格式),
channel_mean_value 及 reorder_channel 均不要设置,这种情况下默认所有通道的 mean 为 0,
scale 为 1。
从 1.4.0 版本开始,维度在 5~128 之间时,不需要设置,但最大通道数不能超过 128,
否则会报错。建议使用 mean_values/std_values 替换。
从 1.6.0 版本开始,如果不设置,则 mean 值都设为 0,scale 值都为 1。否则需要自己设
置,而且 channel_mean_value 将被移除,请使用 mean_values/std_values 替换。
channel_mean_value 及 reorder_channel 的执行先后顺序是什么?
在 RKNN 内部处理是先做了通道转换,然后做 mean 和 scale 的处理。因此,比如对于
Caffe 的模型,reorder_channel 设置成"2 1 0",mean 需要按照 BGR 的顺序设置。