Toybrick
标题:
onnx转rknn,推理结果不对
[打印本页]
作者:
lrzss
时间:
2025-7-25 14:59
标题:
onnx转rknn,推理结果不对
您好,我在进行onnx转rknn后,模型推理结果不对,且accuracy_**ysis()进行精度分析时,误差较大,请问是什么原因,要怎么解决?
我怀疑,问题在,转rknn时,将conv+bn+add三者融合到一起了,导致推理出错,如:rknn.png图中的ConvAdd 就是conv+bn+add的融合层, 请问下怎么让add不融合进去?
onnx模型已经推理验证过,没有问题!
模型很简单,全是conv bn relu add 构成!
图片分别是onnx rknn的模型结构
下面是accuracy_**ysis()精度分析的结果:
layer_name simulator_error
entire single
cos euc cos euc
--------------------------------------------------------------------------------------------------------------
[Input] input_z 1.00000 | 0.0 1.00000 | 0.0
[Conv] /conv_1/block/conv/Conv_output_0 1.00000 | 0.0486 1.00000 | 0.0486
[Relu] /conv_1/block/act/Relu_output_0 1.00000 | 0.0451 1.00000 | 0.0451
[Conv] /layer_1/layer_1.0/block/exp_1x1/block/conv/Conv_output_0 1.00000 | 1.0300 1.00000 | 1.0302
[Relu] /layer_1/layer_1.0/block/exp_1x1/block/act/Relu_output_0 1.00000 | 0.9870 1.00000 | 0.0977
[Conv] /layer_1/layer_1.0/block/conv_3x3/block/conv/Conv_output_0 1.00000 | 0.7599 1.00000 | 0.4446
[Relu] /layer_1/layer_1.0/block/conv_3x3/block/act/Relu_output_0 1.00000 | 0.6032 1.00000 | 0.1104
[Conv] /layer_1/layer_1.0/block/red_1x1/block/conv/Conv_output_0 1.00000 | 0.1664 1.00000 | 0.0442
[Conv] /layer_2/layer_2.0/block/exp_1x1/block/conv/Conv_output_0 0.99997 | 5.1958 1.00000 | 0.5601
[Relu] /layer_2/layer_2.0/block/exp_1x1/block/act/Relu_output_0 0.99997 | 3.6112 1.00000 | 0.1037
[Conv] /layer_2/layer_2.0/block/conv_3x3/block/conv/Conv_output_0 1.00000 | 0.4789 1.00000 | 0.0992
[Relu] /layer_2/layer_2.0/block/conv_3x3/block/act/Relu_output_0 1.00000 | 0.2896 1.00000 | 0.0869
[Conv] /layer_2/layer_2.0/block/red_1x1/block/conv/Conv_output_0 0.99999 | 0.2230 1.00000 | 0.0852
[Conv] /layer_2/layer_2.1/block/exp_1x1/block/conv/Conv_output_0 0.99997 | 2.4119 1.00000 | 0.1353
[Relu] /layer_2/layer_2.1/block/exp_1x1/block/act/Relu_output_0 0.99998 | 1.4822 1.00000 | 0.0484
[Conv] /layer_2/layer_2.1/block/conv_3x3/block/conv/Conv_output_0 0.99997 | 2.1584 1.00000 | 0.1730
[Relu] /layer_2/layer_2.1/block/conv_3x3/block/act/Relu_output_0 0.99999 | 1.0094 1.00000 | 0.0407
[Conv] /layer_2/layer_2.1/block/red_1x1/block/conv/Conv_output_0 0.99998 | 0.3212 1.00000 | 0.0196
[Add] /layer_2/layer_2.1/Add_output_0 0.99999 | 0.4174 1.00000 | 0.0283
[Conv] /layer_2/layer_2.2/block/exp_1x1/block/conv/Conv_output_0 0.99997 | 2.1384 1.00000 | 0.1682
[Relu] /layer_2/layer_2.2/block/exp_1x1/block/act/Relu_output_0 0.99997 | 1.4665 1.00000 | 0.0432
[Conv] /layer_2/layer_2.2/block/conv_3x3/block/conv/Conv_output_0 0.99995 | 2.7909 1.00000 | 0.1397
[Relu] /layer_2/layer_2.2/block/conv_3x3/block/act/Relu_output_0 0.99998 | 0.9551 1.00000 | 0.0332
[Conv] /layer_2/layer_2.2/block/red_1x1/block/conv/Conv_output_0 0.99997 | 0.5547 1.00000 | 0.0337
[Add] output_z 0.99999 | 0.7170 1.00000 | 0.0408
作者:
lrzss
时间:
2025-7-25 15:05
补充一下,我设置 optimization_level=0 和 do_quantization=False, 也是这情况, 版本:rknn-toolkit2-2.3.2
作者:
jefferyzhang
时间:
2025-7-25 15:34
没看出来误差较大,0.999几乎是没有误差了。
作者:
lrzss
时间:
2025-7-25 15:48
jefferyzhang 发表于 2025-7-25 15:34
没看出来误差较大,0.999几乎是没有误差了。
不是看euc这列哦?
作者:
lrzss
时间:
2025-7-25 15:56
我看的euc这列,不是看这列哦....euc这列是干嘛的啊
作者:
jefferyzhang
时间:
2025-7-25 20:57
euc是欧氏距离,数字基数越大这个值越大,不知道结果的数量级情况下这个数值没有什么意义。
cos算余弦距离,偏离角度越大偏离越大,这里看过去结果是正确的。
欢迎光临 Toybrick (https://t.rock-chips.com/)
Powered by Discuz! X3.3