PaddlePaddle / X2Paddle

Deep learning model converter for PaddlePaddle. (『飞桨』深度学习模型转换工具)
http://www.paddlepaddle.org/
Apache License 2.0
736 stars 164 forks source link

yolox官方coco预训练模型转换失败 #768

Closed kouhinn closed 2 years ago

kouhinn commented 2 years ago

感谢您参与 X2Paddle 社区! 问题模版为了 X2Paddle 能更好的迭代,例如新功能发布、 RoadMaps 和错误跟踪. :smile_cat:

问题描述

yolox官方coco预训练模型转换失败。

具体信息

wjj19950828 commented 2 years ago

@kouhinn 我这边有验证yolox_s.pth这个模型没有遇到你说的相关问题,最好给我一个最小复现代码包括模型,打包到百度云

另外,这个aten::copy是已知问题,主要是因为forward函数中有inplace操作导致

只要有两个解决方案: 1、去掉或者替换PyTorch中相关inplace相关代码 2、导出ONNX,再从ONNX转到Paddle,这个之前验证是可以走通的

kouhinn commented 2 years ago

这个代码就是官方原来的代码(https://github.com/Megvii-BaseDetection/YOLOX 最新版),这个yolox_s.pth也是官方提供的(https://github.com/Megvii-BaseDetection/YOLOX 里边的yolox_s下载链接)。 同样的内容打包到百度网盘: 链接:https://pan.baidu.com/s/1rvm4uwPLwGps8tt7DHo1bg 提取码:j5uh --来自百度网盘超级会员V6的分享

@kouhinn 我这边有验证yolox_s.pth这个模型没有遇到你说的相关问题,最好给我一个最小复现代码包括模型,打包到百度云

好的。谢谢。如下方案我先试试。

另外,这个aten::copy是已知问题,主要是因为forward函数中有inplace操作导致

只要有两个解决方案: 1、去掉或者替换PyTorch中相关inplace相关代码 2、导出ONNX,再从ONNX转到Paddle,这个之前验证是可以走通的

wjj19950828 commented 2 years ago

@kouhinn 根据你发给我的代码,需要在转换前加上model.head.decode_in_inference = False,因为部署时需要将decode去掉,如下图 image

因为decode阶段有inplace操作,导致出现aten::copy,这个 tvm 中有相关讨论,不予支持 https://github.com/apache/tvm/pull/7513

kouhinn commented 2 years ago

好的,谢谢!