关于YOLOv8转成om模型后,输出形状不匹配问题
收藏回复举报
关于YOLOv8转成om模型后,输出形状不匹配问题
t('forum.solved') 已解决
发表于2023-11-12 12:03:07
0 查看
 

cke_753.png

代码中通过得到模型输出后的数组大小为352800,大小应该为[1.42,8200],但是om模型得到输出要得到[1,84,8200] 

 

将om可视化之后,输出shape也是[1,84,8200] 

 

但是通过以下代码只读取到了[1,42,8200] 

代码中通过得到模型输出后的数组大小为352800,大小应该为[1.42,8200],但是om模型得到输出要得到[1,84,8200] 

 

将om可视化之后,输出shape也是[1,84,8200] 

 cke_1463.png

但是通过以下代码只读取到了[1,42,8200] 

def _gen_output_dataset(self):
    ''' 组织输出数据的dataset结构 '''
    output_num = acl.mdl.get_num_outputs(self.model_desc)  # 根据模型信息得到模型输出个数
    self.load_output_dataset = acl.mdl.create_dataset()  # 创建输出dataset结构
    for i in range(output_num):
        temp_buffer_size = acl.mdl.get_output_size_by_index(self.model_desc, i)  # 获取模型输出个数
        temp_buffer, ret = acl.rt.malloc(temp_buffer_size, ACL_MEM_MALLOC_HUGE_FIRST)  # 为每个输出申请device内存
        dataset_buffer = acl.create_data_buffer(temp_buffer, temp_buffer_size)  # 创建输出的data buffer结构,将申请的内存填入data buffer
        _, ret = acl.mdl.add_dataset_buffer(self.load_output_dataset, dataset_buffer)  # 将 data buffer 加入输出dataset
    print("create model output dataset success")

以上是官网的构造输出数据集的函数

buffer = acl.mdl.get_dataset_buffer(self.load_output_dataset, i)  # 从输出dataset中获取buffer
data = acl.get_data_buffer_addr(buffer)  # 获取输出数据内存地址
size = acl.get_data_buffer_size(buffer)  # 获取输出数据字节数
narray = acl.util.ptr_to_bytes(data, size)  # 将指针转为字节流数据

通过官网构造的数据集函数,在得到数组大小只有[1,42,8200]与模型期望的输出少了yi'ban

我要发帖子