OAID/Tengine

onnx转为tmfile之后所有卷积后接的relu都丢失,导致推理结果有问题

jiawenxue1004 opened this issue · 2 comments

环境是ubuntu22.04 WSL+最新版tengine代码,尝试将resnet18的预训练模型转为onnx再转为tmfile进行测试,代码如下:

pth转onnx:
model=models.resnet18(pretrained=True)
input=torch.rand(1,3,224,224)
torch.onnx.export(model,input,'resnet18.onnx',export_params=True)

onnx转tmfile:
./convert_tool -f onnx -m resnet18.onnx -o resnet18.tmfile
用网页转换的结果与代码结构一致,都丢失了relu。现将onnx、生成的tmfile文件与官方给出的resnet18-cifar10_int8.tmfile模型的可视化效果进行对比:
onnx文件:
image
生成的tmfile文件:
image
官方的tmfile文件:
image
(可以看出虽然官方的模型中卷积尺寸有差异,但是relu都是被正常保留了的)

利用align_tool进行对齐结果如下:
image

基于tm_classification_opendla.cpp编写了这个所生成的fp32类型tmfile的测试代码,测试结果全部为0。

初学tengine,不太明白问题出在了哪里,还请大佬赐教呜呜呜QAQ

找到原因了,conv和relu融合是onx2tengine代码中调用graph_opt中的融合函数导致的,之所以结果出错是因为我在opendla环境下跑的,而这个融合操作不适用于opendla

H2OD commented

找到原因了,conv和relu融合是onx2tengine代码中调用graph_opt中的融合函数导致的,之所以结果出错是因为我在opendla环境下跑的,而这个融合操作不适用于opendla

您好,我遇到了同样的问题,请问您是如何解决的呢,可否留一个联系方式