Toybrick

请问rknn支持视频分类网络吗?

chen1234520

新手上路

积分
44
楼主
发表于 2022-7-27 14:39:04    查看: 5199|回复: 13 | [复制链接]    打印 | 只看该作者
使用TSM视频分类识别网络,onnx模型的输入是1*8*3*224*224,在转rknn模型的时候,
提示E ValueError: axes don't match array,      

猜测是输入多了一维,有5个维度的原因。
请问各位大佬在rknn上运行视频相关的网络模型吗


回复

使用道具 举报

chen1234520

新手上路

积分
44
沙发
 楼主| 发表于 2022-7-28 14:20:11 | 只看该作者
有人吗???????????
回复

使用道具 举报

jefferyzhang

版主

积分
12926
板凳
发表于 2022-7-28 17:12:19 | 只看该作者
你这里8是什么?
回复

使用道具 举报

chen1234520

新手上路

积分
44
地板
 楼主| 发表于 2022-8-2 17:21:27 | 只看该作者

大佬 终于等到你,我的输入是1*8*3*224*224=batch*time*3*224*224
我的模型是TSM视频分类,输入是8帧图像,所以这里比一般的图片输入多一个维度。
不过在网络第一层直接将输入reshape成8*3*224*224。
看了下您在论坛之前的内容,我这个需求应该不能用rknn_batch_size。
我目前想到两种方式,一种是将input_size_list=[[8,3,224,224]],另一种是input_size_list=[[1,24,224,224]]。
想请问您哪种方式可以实现,另外如果能实现mean_values和std_values怎么传参?

下面是我的onnx模型:
链接: https://pan.baidu.com/s/1JE3-uG8yOUuALp4Pvb8BvQ  密码: 9mhb
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
论坛没怎么看到rknn跟视频任务多帧相关的资料,希望借这个帖子您能给点意见给大家。
回复

使用道具 举报

chen1234520

新手上路

积分
44
5#
 楼主| 发表于 2022-8-2 17:29:43 | 只看该作者

补充一下,我使用input_size_list=[[8,3,224,224]]能够将onnx转换成rknn模型(将meanvalue注释了)
链接: https://pan.baidu.com/s/1XewlhMzl4ffhTI-bDyop_Q  密码: s8um

由于没弄清楚mean_values和std_values怎麼使用,所以還沒測試轉好的rknn模型是否可以使用。
回复

使用道具 举报

jefferyzhang

版主

积分
12926
6#
发表于 2022-8-2 17:30:08 | 只看该作者
你用,24,224,224,进去后在reshape吧。
mean和std不用写,默认就是0和1,不会对输出数据造成影响
回复

使用道具 举报

jefferyzhang

版主

积分
12926
7#
发表于 2022-8-2 17:31:37 | 只看该作者
chen1234520 发表于 2022-8-2 17:29
补充一下,我使用input_size_list=[[8,3,224,224]]能够将onnx转换成rknn模型(将meanvalue注释了)
链接: h ...

mean和std就是数据的归一化减均值除方差而已。
不用写,或者写0,1,减0除1就是原始数据
回复

使用道具 举报

chen1234520

新手上路

积分
44
8#
 楼主| 发表于 2022-8-2 17:33:26 | 只看该作者
jefferyzhang 发表于 2022-8-2 17:30
你用,24,224,224,进去后在reshape吧。
mean和std不用写,默认就是0和1,不会对输出数据造成影响 ...

注釋掉mean std可以轉,但是我訓練模型時使用了mean和std參數。是需要訓練的時候也刪掉mean和std嗎?
回复

使用道具 举报

jefferyzhang

版主

积分
12926
9#
发表于 2022-8-2 17:49:14 | 只看该作者
chen1234520 发表于 2022-8-2 17:33
注釋掉mean std可以轉,但是我訓練模型時使用了mean和std參數。是需要訓練的時候也刪掉mean和std嗎? ...

你可以自己推理送数据之前先对视频图片做mean,std。
前处理不一定要给npu做的
回复

使用道具 举报

chen1234520

新手上路

积分
44
10#
 楼主| 发表于 2022-8-4 11:37:20 | 只看该作者
jefferyzhang 发表于 2022-8-2 17:49
你可以自己推理送数据之前先对视频图片做mean,std。
前处理不一定要给npu做的 ...

大佬您好,有一个新的问题请教您!
前面保存的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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表