|  | 
| 只是将模型保存下来了,还没跑通,保存的模型初始化有问题。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
 | 
 |