Toybrick

标题: 4M 的 onnx 转换出 rknn 居然有 500M 是怎么回事? [打印本页]

作者: sawyer_z    时间: 10 小时前
标题: 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