Open chliang opened 4 years ago
可以直接贴代码或者问题吗?这边显示图片挂掉了~
可以直接贴代码或者问题吗?这边显示图片挂掉了~
models/PaddleCV/image_classification/ 中 infer.py 的结果 和 predict.py 的结果 不一致,其中 predict.py 用的模型是 infer.py用的模型固化后的模型 paddlepaddle-gpu 1.6.2.post97 模型 Xception41, Xception65, Xception71
您好,感谢您的反馈,可以将下面的 https://github.com/PaddlePaddle/models/blob/b587334f24be09e7c1ea24139a930fc4d5ba77c2/PaddleCV/image_classification/predict.py#L110 修改为
predictor = create_paddle_predictor(config.to_native_config())
来避免这个问题~
您好,感谢您的反馈,可以将下面的 https://github.com/PaddlePaddle/models/blob/b587334f24be09e7c1ea24139a930fc4d5ba77c2/PaddleCV/image_classification/predict.py#L110
修改为
predictor = create_paddle_predictor(config.to_native_config())
来避免这个问题~
这么改确实解决了,现在结果对齐了。 但是为什么要这么改呢,为什么 其他的模型没有问题 Xception系列不对呢
感谢您的关注,正在排查这个问题~有结论第一时间回复您
您好,感谢您的反馈,可以将下面的 https://github.com/PaddlePaddle/models/blob/b587334f24be09e7c1ea24139a930fc4d5ba77c2/PaddleCV/image_classification/predict.py#L110
修改为
predictor = create_paddle_predictor(config.to_native_config())
来避免这个问题~
这么改确实解决了,现在结果对齐了。 但是为什么要这么改呢,为什么 其他的模型没有问题 Xception系列不对呢
感谢您的关注,正在排查这个问题~有结论第一时间回复您
好的,C++预测代码,这么改的话(predictor = create_paddle_predictor(config.to_native_config()))程序崩溃。
C++的话,需要修改为ToNativeConfig
函数,可以参考
https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/pybind/inference_api.cc#L443
关于这个问题,目前有以下的方法可以解决: Python:
predictor = create_paddle_predictor(config.to_native_config()) # 预测时将不会使用任何pass
或者是: 可以使用 最新的develop 编的whl包,使用一个新加的python接口,
config.delete_pass("conv_elementwise_add_fuse_pass") # 预测时,只是不使用这个pass
C++预测代码可以这么写:
auto predictor = CreatePaddlePredictor(config.ToNativeConfig()); // 预测时将不会使用任何pass
或者是:
config.pass_builder()->DeletePass("conv_elementwise_add_fuse_pass"); // 预测时,只是不使用这个pass
auto predictor = CreatePaddlePredictor(config);
python是封装的C++的API,C++崩溃可以确认下gcc版本是否是一致。
结果无法对齐的原因查到是conv_elementwise_add_fuse_pass被不支持的fuse pattern触发了导致,已经提交PR修复。 详见Paddle #22124
关于这个问题,目前有以下的方法可以解决: Python:
predictor = create_paddle_predictor(config.to_native_config()) # 预测时将不会使用任何pass
或者是: 可以使用 最新的develop 编的whl包,使用一个新加的python接口,
config.delete_pass("conv_elementwise_add_fuse_pass") # 预测时,只是不使用这个pass
C++预测代码可以这么写:
auto predictor = CreatePaddlePredictor(config.ToNativeConfig()); // 预测时将不会使用任何pass
或者是:
config.pass_builder()->DeletePass("conv_elementwise_add_fuse_pass"); // 预测时,只是不使用这个pass auto predictor = CreatePaddlePredictor(config);
python是封装的C++的API,C++崩溃可以确认下gcc版本是否是一致。
原因查到是conv_elementwise_add_fuse_pass被不支持的fuse pattern触发了导致,已经提交PR修复。 详见Paddle #22124
非常感谢,我有三个问题:
“问题是否重现了呢,其他的模型没有问题 Xception系列不对” 问题可以复现,已经提交PR修复,烦请查看上条回复最后的解释。
“配置文件转换成 Native方式”
请问指的是config.ToNativeConfig()
?如果是这个意思,是没有问题的。ToNativeConfig()
的作用只是在预测时候不会执行这些pass,采用与训练前向相同的方式计算模型结果。
“Python API可以,但C++报错” Python API封装的C++的API,如果Python API可以,可以查看下gcc的版本,官网提供的预测库是基于gcc482编译的,麻烦还是使用gcc482的环境编写cmake。 因C++端图片处理比较繁琐,或者也可以确认下输入的数据有无问题。 可以尝试下载官网提供的C++预测的sample,链接,可以作为编写cmake的参考;也可以通过测试样例确认下环境是否有问题;或者直接修改测试样例,运行Xception的模型。官网C++预测库API使用文档说明可以参考链接
可以麻烦提供下您C++预测的代码么?熟悉Windows的同事稍后会和您讨论一下 @silingtong123
根据你的代码中的copy_from_cpu函数,确认是否使用的zerocopytensor进行预测?zerocopytensor目前只支持使用analysisConfig进行预测,使用ToNativeConfig()将使用NativeConfig,目前NativeConfig不支持zerocopytensor
若使用普通PaddleTensor进行预测,则需要config.SwitchUseFeedFetchOps(false);这个需要修改为true,只有在使用zerocopytensor时才设置为false,之后应避免使用zerocopytensor相关接口
请提供本地能复现的该问题demo
请看上一条回复的内容,NativeConfig的使用请参考:https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/inference/api/demo_ci/vis_demo.cc
models/PaddleCV/image_classification/ 中 infer.py 的结果 和 predict.py 的结果 不一致,其中 predict.py 用的模型是 infer.py用的模型固化后的模型
paddlepaddle-gpu 1.6.2.post97
模型 Xception41, Xception65, Xception71