onnx模型转为bin模型后,bin模型输入的属性 hbDNNTensorShape validShape 与 alignedShape不一致

用户您好,请详细描述您所遇到的问题。

1.硬件获取渠道:供应商

2.当前系统镜像版本:Ubuntu 18.04

3.当前天工开物版本:1.11.4 gpu

4.问题定位:模型转换

5.开发的demo/案例:

6.需要提供的解决方案:

onnx模型转为bin模型后,bin模型输入的属性 hbDNNTensorShape validShape (1*640*640*3)与 hbDNNTensorShape alignedShape(1*640*640*4) 不一致,请问是什么原因?cv读取的是640*640*3(配置文件规定的模型输入为 1*640*640*3) ,是否可以直接作为模型的输入?

感谢您使用地平线芯片算法工具链,最近我们在收集大家的满意度反馈,欢迎您填写问卷,详细情况可见:https://developer.horizon.ai/forumDetail/146177053698464782

您好,关于validshape和alignedshape的尺寸分配问题,可以查看社区上的这篇文章:模型输入输出对齐规则解析

你好,需要扩展到alignedShape进行推理,保证是4的倍数,可以发挥推理的性能,数据需要进行扩展

你的意思是可以通过将

// 第四步准备输入数据-
hbDNNTensor input;-
hbDNNTensorProperties input_properties;-
hbDNNGetInputTensorProperties(&input_properties, dnn_handle, 0);-
input.properties = input_properties;-
auto &mem = input.sysMem[0];-
int rgb_length = 640 * 640 * 3;-
hbSysAllocCachedMem(&mem, rgb_length);-
memcpy(mem.virAddr, rgb_data, rgb_length); // rgb_data是cv读取的640*640*3的图片数据-
hbSysFlushMem(&mem, HB_SYS_MEM_CACHE_CLEAN);

直接改成

// 第四步准备输入数据-
hbDNNTensor input;-
hbDNNTensorProperties input_properties;-
hbDNNGetInputTensorProperties(&input_properties, dnn_handle, 0);-
input.properties = input_properties;-
auto &mem = input.sysMem[0];-
hbSysAllocCachedMem(&mem, 640 * 640 * 4);-
memcpy(mem.virAddr, rgb_data, 640 * 640 * 3_); // rgb_data是cv读取的640*640*3的图片数据_-
hbSysFlushMem(&mem, HB_SYS_MEM_CACHE_CLEAN);

就可以了是吗?

代码参考https://developer.horizon.ai/api/v1/fileData/doc/ddk\_doc/navigation/ai\_toolchain/docs\_cn/horizon\_ai\_toolchain\_user\_guide/application\_development.html#engineer-implementation的4.3工程实现

可以问一下怎么指定alignedShape = validShape吗?是在c代码里直接对input_properties的alignedShape进行赋值吗?代码如下?

input_properties.alignedShape = input_properties.validShape;

你好,维度扩展不是直接增加内存容量,可以败诉搜索进行相关示例学习

关于具体实现,可以参考ddk/samples/ai_toolchain/horizon_runtime_sample/code/00_quick_start/src/run_mobileNetV1_224x224.cc中的代码哈-

已解决,感谢

不客气,一起加油~