rockchip-linux / rknn-toolkit2

BSD 3-Clause "New" or "Revised" License
881 stars 155 forks source link

Segmentation fault during convertation of onnx model #127

Open nicolausYes opened 1 year ago

nicolausYes commented 1 year ago

There's always a segmentation fault during onnx model conversion. The target platform is rk3588.

The working environment is Ubuntu 20.04.5, Python 3.8.10, rknn-toolkit2 1.4.0. Onnx model. https://drive.google.com/file/d/1LpFK0U5kv72I6yHiY0RkhQUeH3s_eHev/view?usp=sharing

Conversion code.


import numpy as np
import os
import urllib
import tarfile
import shutil
import traceback
import time
import sys
from rknn.api import RKNN

# Create RKNN object
rknn = RKNN(verbose=True)

# pre-process config
print('--> Config model')
rknn.config(target_platform='rk3588')
print('done')

print('--> Loading model')
ret = rknn.load_onnx(model = './supercombo_big_fp.onnx')
if ret != 0:
    print('Load failed!')
    exit(ret)
print('done')

# Build model
print('--> Building model')
ret = rknn.build(do_quantization=False)
if ret != 0:
    print('Build *.rknn failed!')
    exit(ret)
print('done')

# Export rknn model
print('--> Export RKNN model')
ret = rknn.export_rknn("supercombo_big_fp.rknn")
if ret != 0:
    print('Export *.rknn failed!')
    exit(ret)
print('done')

Error.

I sparse_weight ... I sparse_weight done. I I rknn building ... I RKNN: [15:09:36.000] compress = 0, conv_arith_fuse = 1, global_fuse = 1, multi-core-model-mode = I RKNN: librknnc version: 1.4.0 (3b4520e4f@2022-09-05T20:52:35) D RKNN: [15:09:37.090] RKNN is invoked D RKNN: [15:09:37.417] >>>>>> start: N4rknn16RKNNAddFirstConvE D RKNN: [15:09:37.417] <<<<<<<< end: N4rknn16RKNNAddFirstConvE D RKNN: [15:09:37.417] >>>>>> start: N4rknn27RKNNEliminateQATDataConvertE D RKNN: [15:09:37.421] <<<<<<<< end: N4rknn27RKNNEliminateQATDataConvertE D RKNN: [15:09:37.421] >>>>>> start: N4rknn22RKNNAddReshapeAfterRNNE D RKNN: [15:09:37.421] <<<<<<<< end: N4rknn22RKNNAddReshapeAfterRNNE D RKNN: [15:09:37.421] >>>>>> start: N4rknn17RKNNTileGroupConvE D RKNN: [15:09:37.422] <<<<<<<< end: N4rknn17RKNNTileGroupConvE D RKNN: [15:09:37.422] >>>>>> start: N4rknn19RKNNTileFcBatchFuseE D RKNN: [15:09:37.422] <<<<<<<< end: N4rknn19RKNNTileFcBatchFuseE D RKNN: [15:09:37.422] >>>>>> start: N4rknn15RKNNAddConvBiasE D RKNN: [15:09:37.423] <<<<<<<< end: N4rknn15RKNNAddConvBiasE D RKNN: [15:09:37.423] >>>>>> start: N4rknn15RKNNTileChannelE D RKNN: [15:09:37.424] <<<<<<<< end: N4rknn15RKNNTileChannelE D RKNN: [15:09:37.424] >>>>>> start: N4rknn18RKNNPerChannelPrepE D RKNN: [15:09:37.424] <<<<<<<< end: N4rknn18RKNNPerChannelPrepE D RKNN: [15:09:37.424] >>>>>> start: N4rknn21RKNNFuseOptimizerPassE D RKNN: [15:09:37.433] <<<<<<<< end: N4rknn21RKNNFuseOptimizerPassE D RKNN: [15:09:37.433] >>>>>> start: N4rknn11RKNNBnQuantE D RKNN: [15:09:37.434] <<<<<<<< end: N4rknn11RKNNBnQuantE D RKNN: [15:09:37.434] >>>>>> start: N4rknn15RKNNTurnAutoPadE D RKNN: [15:09:37.434] <<<<<<<< end: N4rknn15RKNNTurnAutoPadE D RKNN: [15:09:37.434] >>>>>> start: N4rknn16RKNNInitRNNConstE D RKNN: [15:09:37.434] <<<<<<<< end: N4rknn16RKNNInitRNNConstE D RKNN: [15:09:37.434] >>>>>> start: N4rknn17RKNNInitCastConstE D RKNN: [15:09:37.435] <<<<<<<< end: N4rknn17RKNNInitCastConstE D RKNN: [15:09:37.435] >>>>>> start: N4rknn20RKNNMultiSurfacePassE D RKNN: [15:09:37.435] <<<<<<<< end: N4rknn20RKNNMultiSurfacePassE D RKNN: [15:09:37.435] >>>>>> start: N4rknn14RKNNTilingPassE D RKNN: [15:09:37.441] <<<<<<<< end: N4rknn14RKNNTilingPassE D RKNN: [15:09:37.442] >>>>>> start: N4rknn20RKNNAddSecondaryNodeE D RKNN: [15:09:37.447] <<<<<<<< end: N4rknn20RKNNAddSecondaryNodeE D RKNN: [15:09:37.447] >>>>>> start: N4rknn23RKNNProfileAnalysisPassE D RKNN: [15:09:37.447] <<<<<<<< end: N4rknn23RKNNProfileAnalysisPassE D RKNN: [15:09:37.447] >>>>>> start: OpEmit Segmentation fault

taro-ishihara commented 1 year ago

Same issue on docker image with python 3.10 converting yolov5(sample) failed.

root@id:/home/rknn-toolkit2/examples/onnx/yolov5# python3 test.py
W __init__: rknn-toolkit2 version: 1.5.0+1fa95b5c
--> Config model
W config: 'target_platform' is None, use rk3566 as default, Please set according to the actual platform!
done
--> Loading model
Loading :   0%|                                                             | 0/Loading : 100%|█████████████████████████████████████████████████| 124/124 [00:00<00:00, 3967.18it/s]
done
--> Building model
I base_optimize ...
I base_optimize done.
I 
I fold_constant ...
I fold_constant done.
I 
I correct_ops ...
I correct_ops done.
I 
I fuse_ops ...
I fuse_ops results:
I     convert_resize_to_deconv: remove node = ['Resize_84'], add node = ['Resize_84_2deconv']
I     convert_resize_to_deconv: remove node = ['Resize_100'], add node = ['Resize_100_2deconv']
I     fold_constant ...
I     fold_constant done.
I fuse_ops done.
I 
I sparse_weight ...
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault