推理过程中怎么处理模型的输出数据?
收藏回复举报
推理过程中怎么处理模型的输出数据?
t('forum.solved') 已解决
新人帖
发表于2024-01-02 21:34:31
0 查看

如题,使用https://gitee.com/ascend/samples.git下的样例 YOLOV3_coco_detection_video

在推理执行完成后,通过void* ObjectDetect::GetInferenceOutputItem(uint32_t& itemDataSize,

                                                                                                     aclmdlDataset* inferenceOutput,

                                                                                                      uint32_t idx)

函数中的:

aclDataBuffer* dataBuffer = aclmdlGetDatasetBuffer(inferenceOutput, idx);

void* dataBufferDev = aclGetDataBufferAddr(dataBuffer);

size_t bufferSize = aclGetDataBufferSize(dataBuffer);

这几条语句获得的推理输出怎么后处理?

Result ObjectDetect::Postprocess(cv::Mat& frame,aclmdlDataset* modelOutput)函数中使用的方法为:

float* detectData = (float*)GetInferenceOutputItem(dataSize, modelOutput,g_bBoxDataBufId);

将GetInferenceOutputItem函数得到的detectData指针使用float指针强制转化去接收。

而我将模型换为我自己模型后(我自己模型输出为float16数据类型的一维数组数据),按照float* detectData这样去接收输出数据,得到的detectData[i]数据很不对,即使做了unit_t 32这种数据转换得到的目标检测像素坐标很大,为10万多的数值,明显不对;

后面使用如下方法接收转换

cke_110464.png

得到的坐标值却偏小很多,坐标X输出在20左右,实际上应该在400-500范围内的区间;置信度大于0,为40多的数值,应该为类似于0.45这样的数值;类别应该全为0,但是输出了很多1、52、11这种不应该出现的数值。

实在不知如何处理这个输出,以及不知问题出在何处,请教大家,被这个问题卡了一周了。

本帖最后由 匿名用户2024/01/03 10:21:09 编辑

我要发帖子