使用ATC转换Disk模型出现onnx模型和om模型精度差异,整个匹配模型精度出现很大误差
收藏回复举报
使用ATC转换Disk模型出现onnx模型和om模型精度差异,整个匹配模型精度出现很大误差
t('forum.solved') 已解决
发表于2025-04-12 11:46:39
0 查看

整个模型流程是disk+knnransac,目标是实现图像匹配,但是在模型转换的时候软硬件差距比较大,类似结果如下,找到的关键点数很少,软硬件disk模型输出的按scores排序的前十个关键点坐标也相差很大。

image.png

image.png这是软件平台结果。

这是硬件平台结果

image.png

image.png

我们定位到模型转换出问题之后,下面是我们对disk模型转换过程一些的debug记录。希望能得到帮助!

模型转换ATC命令 atc --input_shape="inputs:512,640,3" --input_format=ND --soc_version=Ascend310B1 --framework=5 --model="./models/disk2.onnx" --output="./models/disk2" 

导出disk-onnx模型的代码在网盘链接中,有点不同的操作就是预处理放在了模型的推理里面,所以整个模型输入是HWC,但是之前也尝试把图片的预处理解码出来,结果会好一点,但是输出的结果和软件对比还是差距比较大。

目前的硬件版本环境如下 

cke_9779.png

尝试msit debug compare分析,命令如下

msit debug compare -gm /home/HwHiAiUser/project/cnn-matching-200DK-A2/models/disk2.onnx -om /home/HwHiAiUser/project/cnn-matching-200DK-A2/models/disk2.om -i /home/HwHiAiUser/project/cnn-matching-200DK-A2/test_640_512_3_uint8.bin -o ./debug_result/ --advisor

在尝试的几次模型转化的过程中会分别出现fp16 overflow 和gatherv2算子精度误差很大原因

image.png

对于前者我们定位其的问题可能是在软件代码中有一句F.normalize()这里归一化的时候为了防止除0有个1e-12的eps,超出了fp16的精度范围,但是这里修改位1e-7之后同样还是会有fp16overflow问题。

image.png

解决办法是在模型ATC转换的时候加了precision_mode这个参数,尝试了force_fp32和allow_fp32_to_fp16,会没有fp16 overflow的专家诊断。但是其精度差异还是比较大。

image.png

image.png

image.png

查看几次msit debug compare的result文件中,定位到这个gather_2算子的位置,是出现在软件代码中尝试按索引取出前topk个张量的地方。

image.png

image.png

于是在软件模型到处的时候尝试后面全部注释掉,不进行后面的逻辑操作,导出disk_initial.onnx模型

cke_279078.png

但是进行模型转换调用,打印软硬件对应的输出的还是不太对,两者还是有误差。

image.png

image.png

image.png

本帖最后由 匿名用户2025/04/14 09:31:40 编辑

我要发帖子