Toybrick
标题: 4M 的 onnx 转换出 rknn 居然有 500M 是怎么回事? [打印本页]
作者: sawyer_z 时间: 2024-9-23 10:44
标题: 4M 的 onnx 转换出 rknn 居然有 500M 是怎么回事?
本帖最后由 sawyer_z 于 2024-9-23 10:47 编辑
一个支持 dynamic shape 的 onnx,本来是 4M 大小,已验证可以正常运行。
通过下面的代码转换后,生成的 rknn 模型居然有 500多 M。可能会是什么原因,该怎么处理?源模型见附件。[attach]2867[/attach]
import numpy as np
import torch
from rknn.api import RKNN
# Create RKNN object
rknn = RKNN()
dynamic_input = [
[[1, 100, 13], [1, 25, 112, 112]],
# [[1, 200, 13], [1, 50, 112, 112]],
# [[1, 300, 13], [1, 75, 112, 112]],
# [[1, 400, 13], [1, 100, 112, 112]],
# [[1, 500, 13], [1, 125, 112, 112]],
# [[1, 600, 13], [1, 150, 112, 112]]
]
# Pre-process config
print('--> Config model')
rknn.config(target_platform='rk3588', optimization_level=3, dynamic_input=dynamic_input)
print('done')
print('--> Loading ONNX model')
ret = rknn.load_onnx(model='model.onnx')
if ret != 0:
print('Load ONNX model failed!')
exit(ret)
print('done')
# print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=False)
if ret != 0:
print('Build RKNN model failed!')
exit(ret)
print('done')
# Export RKNN model
print('--> Export RKNN model')
ret = rknn.export_rknn('./model.rknn')
if ret != 0:
print('Export RKNN model failed!')
exit(ret)
print('done')
# Release RKNN object for next use
rknn.release()
python3 onnx2rknn.py
I rknn-toolkit2 version: 2.2.1
--> Config model
W config: Please make sure the model can be dynamic when enable 'config.dynamic_input'!
I The 'dynamic_input' function has been enabled, the MaxShape is dynamic_input[0] = [[1, 100, 13], [1, 25, 112, 112]]!
The following functions are subject to the MaxShape:
1. The quantified dataset needs to be configured according to MaxShape
2. The eval_perf or eval_memory return the results of MaxShape
done
--> Loading ONNX model
I Loading : 100%|████████████████████████████████████████████████| 60/60 [00:00<00:00, 33442.96it/s]
W load_onnx: The config.mean_values is None, zeros will be set for input 0!
W load_onnx: The config.std_values is None, ones will be set for input 0!
W load_onnx: The config.mean_values is None, zeros will be set for input 1!
W load_onnx: The config.std_values is None, ones will be set for input 1!
done
--> Building model
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 384.21it/s]
I OpFusing 1 : 29%|█████████████▋ | 29/100 [00:00<00:01, 45.54it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 51%|███████████████████████▉ | 51/100 [00:02<00:02, 22.76it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 67%|███████████████████████████████▍ | 67/100 [00:08<00:04, 7.81it/s]W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
I OpFusing 1 : 71%|█████████████████████████████████▎ | 71/100 [00:08<00:03, 8.28it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 1%|▍ | 1/100 [00:08<14:19, 8.68s/it]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 23%|██████████▊ | 23/100 [00:08<00:29, 2.65it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 53%|████████████████████████▉ | 53/100 [00:08<00:07, 6.09it/s]W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 96%|█████████████████████████████████████████████ | 96/100 [00:08<00:00, 10.98it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 85%|███████████████████████████████████████▉ | 85/100 [00:08<00:01, 9.60it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:08<00:00, 11.15it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:09<00:00, 10.32it/s]
I OpFusing 1 : 0%| | 0/100 [00:09<?, ?it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
I OpFusing 1 : 53%|████████████████████████▉ | 53/100 [00:09<00:08, 5.46it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:09<00:00, 10.23it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:09<00:00, 10.14it/s]
I OpFusing 1 : 0%| | 0/100 [00:09<?, ?it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:09<00:00, 10.11it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:09<00:00, 10.07it/s]
I OpFusing 0 : 100%|██████████████████████████████████████████████| 100/100 [00:10<00:00, 9.98it/s]
I OpFusing 1 : 0%| | 0/100 [00:10<?, ?it/s]W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
I OpFusing 1 : 100%|██████████████████████████████████████████████| 100/100 [00:10<00:00, 9.95it/s]
I OpFusing 2 : 100%|██████████████████████████████████████████████| 100/100 [00:10<00:00, 9.95it/s]
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 544.68it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 451.09it/s]
I OpFusing 2 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 424.94it/s]
I rknn building ...
I rknn buiding done.
done
--> Export RKNN model
done
ls -al
-rw-r--r-- 1 root root 4129926 Sep 21 11:58 model.onnx
-rw-r--r-- 1 root root 524161785 Sep 22 13:56 model.rknn
另外,如果更改 opset 为14,会出现下面的错误:
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable _p_convert_maxpool_to_maxpool_tile!
W build: The 'dynamic_input' function is enabled, disable tiling_global_maxpool2!
I rknn building ...
terminate called after throwing an instance of 'std:ut_of_range' what(): vector::_M_range_check: __n (which is 2) >= this->size() (which is 3)
Aborted
欢迎光临 Toybrick (https://t.rock-chips.com/) |
Powered by Discuz! X3.3 |