sophgo / sophon-demo

Other
234 stars 51 forks source link

yolov8n单通道图,batch>1执行in8,f16,f32demo推理均存在问题 #30

Open jiwenfei opened 7 months ago

jiwenfei commented 7 months ago

batch>1,单通道输入图像的场景,修改demo中的ff_decode.cpp的jpgDec后 bm_image_create(handle, height, width, FORMAT_GRAY, DATA_TYPE_EXT_1N_BYTE, &img); ,f32可以正常预测,但f16仍然不行

sophon-leevi commented 7 months ago

请描述清楚问题,你的描述里面说f32可以正常预测,但是f16不行。但是题目上说都存在问题。 还有,这种一般和推理没关系,可能是数据没有正常送给模型,你是如何修改jpgDec,需要发出来。 或者你也可以使用sophon-opencv读图,不一定要用ff_decode,通过cv::bmcv::toBMI这个接口把cv::Mat转换成bm_image.

jiwenfei commented 7 months ago

目前修改的地方有: 把图像转为灰度图 预处理修改gpu图片格式 经过上面修改后, 输入图像是灰度图,fp32 batch=4执行能够检出,fp16 batch=4每次推理只有一张图有结果

测试输入图像是rgb图, fp32 batch4和1 使用官网demo未作修改均可执行。

sophon-leevi commented 7 months ago

理论上fp16和fp32的输入输出应该是一样的,请检查一下你的fp16模型,在运行环境上使用tpu_model --info xxx.bmodel,检查一下fp32和fp16的bmodel输入输出是否有不同。

hychychyc2 commented 7 months ago

fp16加精度比对了吗

jiwenfei commented 7 months ago

@hychychyc2 没有加

jiwenfei commented 7 months ago

理论上fp16和fp32的输入输出应该是一样的,请检查一下你的fp16模型,在运行环境上使用tpu_model --info xxx.bmodel,检查一下fp32和fp16的bmodel输入输出是否有不同。

输入输出通道数据和尺寸是一致的 `bmodel version: B.2.2 chip: BM1684X create time: Mon Mar 25 19:36:45 2024

kernel_module name: libbm1684x_kernel_module.so kernel_module size: 2051624 kernel_module md5: c8f0d89db45a8374e162fbadacb4b518

net 0: [x_defect_f32_b4] static

stage 0: input: images, [4, 1, 416, 416], float32, scale: 1, zero point: 0 output: output0_Concat, [4, 6, 3549], float32, scale: 1, zero point: 0

device mem size: 43458560 (coeff: 12361728, instruct: 0, runtime: 31096832) host mem size: 0 (coeff: 0, runtime: 0)` @sophon-leevi

hychychyc2 commented 7 months ago

请问mlir版本是什么版本的,可以先加一个精度比对看一下能否通过

jiwenfei commented 7 months ago

请问mlir版本是什么版本的,可以先加一个精度比对看一下能否通过

tpu-mlir_v1.2.8

hychychyc2 commented 7 months ago

请使用最新版本得mlir试一下呢

sophon-leevi commented 7 months ago

在model_transform的时候加一下--test_input,参考https://github.com/sophgo/sophon-demo/blob/release/sample/YOLOv5/scripts/gen_int8bmodel_mlir.sh