|
只是将模型保存下来了,还没跑通,保存的模型初始化有问题。tensor切片操作得到的尺寸跟onnx上不一样。
前面保存的rknn模型,在rknn.init_runtime()时会报错,提示的错误如下:
D [setup_node:441]Setup node id[22] uid[158] op[CONCAT] name[Concat_Concat_1_158]
D [print_tensor:146]in(0) : id[ 119] vtl[1] const[0] shape[ 56, 56, 3, 1 ] fmt[f16] qnt[NONE]
D [print_tensor:146]in(1) : id[ 135] vtl[1] const[0] shape[ 56, 56, 3, 8 ] fmt[f16] qnt[NONE]
D [print_tensor:146]out(0): id[ 137] vtl[1] const[0] shape[ 56, 56, 3, 9 ] fmt[f16] qnt[NONE]
D [setup_node:441]Setup node id[23] uid[155] op[CONCAT] name[Concat_Concat_2_155]
E [op_check:348]Concat input dims size(8 vs 9)
E [setup_node:456]Check node[23] CONCAT fail
分析问题主要是出现在concat操作,在concat操作前有一个Slice切片操作,在onnx上slice的输出为[56 56 7 3],但是看rknn的log中显示slice的输出尺寸却为[56 56 8 3],导致concat后尺度错误。
下面是onnx模型和转好的rknn模型,以及切片和concat操作的代码,麻烦大佬帮忙看看哪里有问题!非常感谢!!!
链接: https://pan.baidu.com/s/1MXZZhZKBg_O49vQIzzNzdQ 密码: ebv0
链接: https://pan.baidu.com/s/1aMiNk0S12PfemJ1SamsSqQ 密码: fk4l
def shift_paddle_onebatch(x, seg_num, shift_ratio):
nt, c, h, w = x.shape
shape = x.shape # [N*T, C, H, W]
# print("x.shape:{}".format(x.shape))
c1 = int(shape[1] * shift_ratio)
c2 = int(shape[1] * 2 * shift_ratio)
# left_side部分的slice输出为[7,3,56,56],zeros输出为[1,3,56,56],concat输出为[8,3,56,56]
left_side = paddle.concat(x=[x[1:, :c1, :, :], paddle.zeros(shape=[1, c1, h, w])], axis=0)
# middle_side部分在onnx模型下结果也正常,但是rknn模型的slice输出为[8,3,56,56],导致concat后输出为[9,3,56,56]
middle_side = paddle.concat(x=[paddle.zeros(shape=[1, c2-c1, h, w]), x[:-1, c1: c2,:,:]], axis=0)
out = paddle.concat(x=[left_side, middle_side, x[:, c2:c,:,:]], axis=1) # 最终此处concat时导致8:9报错
print("out:{}".format(out.shape))
return out |
|