rknn-toolkit2
rknn-toolkit2 copied to clipboard
新版本toolkit不支持onnx中lstm操作
您好,我看op支持文档上,onnx支持lstm转换,实际在转带lstm的模型时,发现段错误,原始模型为降噪模型DTLN模型,模型结构及原始模型如下:
model_p1.zip
尝试用onnx搭建了一个简单的lstm层,转换也有问题,代码如下: import onnx from onnx import helper from onnx import TensorProto import numpy as np from onnxsim import simplify
node_def = onnx.helper.make_node( "LSTM", inputs=["X", "W", "R"], outputs=["Y", "Y_h"], hidden_size=128, )
X = helper.make_tensor_value_info('X', TensorProto.FLOAT, [1, 1, 128]) weight = np.random.ranf(1512128).astype(np.float32) W = helper.make_tensor('W', TensorProto.FLOAT, [1, 512, 128], weight) R = helper.make_tensor('R', TensorProto.FLOAT, [1, 512, 128], weight) Y = helper.make_tensor_value_info('Y', TensorProto.FLOAT, [1, 1, 1, 128]) Y_h = helper.make_tensor_value_info('Y_h', TensorProto.FLOAT, [1, 1, 128])
graph_def = helper.make_graph( [node_def], 'test_conv_mode', [X], # graph inputs [Y, Y_h], # graph outputs initializer=[W, R], )
mode_def = helper.make_model(graph_def, opset_imports=[helper.make_opsetid("", 12)])
onnx.checker.check_model(mode_def)
model_simp, check = simplify(mode_def) onnx.save(model_simp, "lstm.onnx")
模型转换脚本如下:
import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN
ONNX_MODEL = 'Conv.onnx'
RKNN_MODEL = 'model_p1.rknn'
QUANTIZE_ON = False
if name == 'main':
rknn = RKNN(verbose=True)
print('--> Config model')
rknn.config()
print('done')
# Load ONNX model
print('--> Loading model')
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# Build model
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# Export RKNN model
print('--> Export rknn model')
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# Init runtime environment
print('--> Init runtime environment')
ret = rknn.init_runtime()
# ret = rknn.init_runtime('rk3566')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
print('done')
rknn.release()
尝试使用1.3.0版本和1.4.0版本均报段错误问题,能否帮忙排查下问题?
验证了一下,应该是带了stateful,因为我们的是纯时序的网络,这种能否考虑支持呢?
您好,请问该问题解决了嘛,我用的tflite模型转rknn 也遇到lstm不支持的问题
您好,请问该问题解决了嘛,我用的tflite模型转rknn 也遇到lstm不支持的问题
没解决
我试了下非stateful的onnx模型是可以转的 带stateful的就不行了
你好,请问解决了吗,我目前也在研究基于DTLN的AEC和NS,也希望部署在这一款芯片上面。
我试了下非stateful的onnx模型是可以转的 带stateful的就不行了
请问你解决了吗,nonstateful是不能流式的呜呜呜
我试了下非stateful的onnx模型是可以转的 带stateful的就不行了
请问你解决了吗,nonstateful是不能流式的呜呜呜
没有哎