airockchip / rknn-toolkit2

BSD 3-Clause "New" or "Revised" License
491 stars 59 forks source link

RKNN模型的实际输入Shape与通过RKNN_QUERY_INPUT_ATTR获得的输入Shape不一致 #61

Open happyme531 opened 2 weeks ago

happyme531 commented 2 weeks ago

模型文件: matmul_1_1_256_256..zip 测试过的RKNN版本: 2.0.0b0/ 2.0.0b14

测试代码:

#include <iostream>
#include <cstring>
#include "rknn_api.h"
rknn_context ctx;
rknn_init(&ctx, (void*)"../matmul_1_1_256_256.rknn",0,0,nullptr);
rknn_tensor_attr input_attrs[1];
std::memset(input_attrs, 0, sizeof(input_attrs));
rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, input_attrs, sizeof(rknn_tensor_attr));
std::cout << get_format_string(input_attrs[0].fmt) << std::endl;
std::cout << input_attrs[0].name << std::endl;

结果:

clang-repl> #include <iostream>
clang-repl> #include <cstring>
clang-repl> %lib /usr/lib/librknnrt.so
clang-repl> #include "rknn_api.h"
clang-repl> rknn_context ctx;
clang-repl> rknn_init(&ctx, (void*)"../matmul_1_1_256_256.rknn",0,0,nullptr);
clang-repl> rknn_tensor_attr input_attrs[1];
clang-repl> std::memset(input_attrs, 0, sizeof(input_attrs));
clang-repl> rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, input_attrs, sizeof(rknn_tensor_attr));
clang-repl> std::cout << get_format_string(input_attrs[0].fmt) << std::endl;
NHWC
clang-repl> std::cout << input_attrs[0].name << std::endl;
input
clang-repl> std::cout << input_attrs[0].dims[0] << std::endl;
1
clang-repl> std::cout << input_attrs[0].dims[1] << std::endl;
256
clang-repl> std::cout << input_attrs[0].dims[2] << std::endl;
256
clang-repl> std::cout << input_attrs[0].dims[3] << std::endl;
1
yuyun2000 commented 2 weeks ago

是有这个bug,按经验来说,onnx是什么你就输什么样的shape 如果不对就需要0 2 3 1转置了

chenhongming commented 2 weeks ago

rknn_input m_inputs[1]; m_inputs[0].fmt = RKNN_TENSOR_NHWC; 初始化的时候有个图像维度的参数