Skip to content

使用c# paddle_inference部署静态图模型推理报错 #72369

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
bailandeshen opened this issue Apr 19, 2025 · 7 comments
Open

使用c# paddle_inference部署静态图模型推理报错 #72369

bailandeshen opened this issue Apr 19, 2025 · 7 comments
Assignees

Comments

@bailandeshen
Copy link

bailandeshen commented Apr 19, 2025

请提出你的问题 Please ask your question

使用c# paddle_inference部署静态图模型推理报错
使用.\main --model_dir=E:\PaddlePAddle\rcnn\inference_model\output\config --image_file=E:/PaddlePAddle/images/0.jpg

调用main文件时

E:\PaddlePAddle\out\Release>.\main  --model_dir=E:\PaddlePAddle\rcnn\inference_model\output\config     --image_file=E:/PaddlePAddle/images/0.jpg
[libprotobuf ERROR C:\cache_release\third_party\cuda116\67adea02c33c66ac6ad095989ae5e741\protobuf\src\extern_protobuf\src\google\protobuf\message_lite.cc:121] Can't parse message of type "paddle.framework.proto.ProgramDesc" because it is missing required fields: blocks[13].ops[72].attrs[13].type
[libprotobuf ERROR C:\cache_release\third_party\cuda116\67adea02c33c66ac6ad095989ae5e741\protobuf\src\extern_protobuf\src\google\protobuf\message_lite.cc:121] Can't parse message of type "paddle.framework.proto.ProgramDesc" because it is missing required fields: blocks[13].ops[72].attrs[13].type


--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
Not support stack backtrace yet.

----------------------
Error Message Summary:
----------------------
InvalidArgumentError: Failed to parse program_desc from binary string.
  [Hint: Expected desc_.ParseFromString(binary_str) == true, but received desc_.ParseFromString(binary_str):0 != true:1.] (at ..\paddle\fluid\framework\program_desc.cc:143)
paddle_inference 11.6 CUDA 11.6 
@lshpku
Copy link
Contributor

lshpku commented Apr 19, 2025

你好!C#不是paddle_inference官方维护的语言,我无法根据报错信息定位报错原因,但是推测可能不是语言或框架的问题,更像是模型本身配置有误或参数有误。你可以提供更多有关PaddlePAddle\rcnn模型的信息,或使用paddle_inference推荐的C++/Python语言进行复现以确认不是C#独有的问题,或等周一工作日由负责paddle_inference的同学来排查问题。谢谢!

@bailandeshen
Copy link
Author

bailandeshen commented Apr 19, 2025

你好!C#不是paddle_inference官方维护的语言,我无法根据报错信息定位报错原因,但是推测可能不是语言或框架的问题,更像是模型本身配置有误或参数有误。你可以提供更多有关PaddlePAddle\rcnn模型的信息,或使用paddle_inference推荐的C++/Python语言进行复现以确认不是C#独有的问题,或等周一工作日由负责paddle_inference的同学来排查问题。谢谢!

您好,采用c++部署使用vs2019生成文件后,在out/release目录下调用main文件进行推理出现报错:

E:\PaddlePAddle\out\Release>.\main  --model_dir=E:\PaddlePAddle\rcnn\inference_model\output\config     --image_file=E:/PaddlePAddle/images/0.jpg
[libprotobuf ERROR C:\cache_release\third_party\cuda116\3ad0da47b86006a7bf40b5685bc39f90\protobuf\src\extern_protobuf\src\google\protobuf\message_lite.cc:121] Can't parse message of type "paddle.framework.proto.ProgramDesc" because it is missing required fields: blocks[13].ops[71].attrs[13].type
[libprotobuf ERROR C:\cache_release\third_party\cuda116\3ad0da47b86006a7bf40b5685bc39f90\protobuf\src\extern_protobuf\src\google\protobuf\message_lite.cc:121] Can't parse message of type "paddle.framework.proto.ProgramDesc" because it is missing required fields: blocks[13].ops[71].attrs[13].type


--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
Not support stack backtrace yet.

----------------------
Error Message Summary:
----------------------
InvalidArgumentError: Failed to parse program_desc from binary string.
  [Hint: Expected desc_.ParseFromString(binary_str) == true, but received desc_.ParseFromString(binary_str):0 != true:1.] (at ..\paddle\fluid\framework\program_desc.cc:103)

模型采用的是 https://aistudio.baidu.com/datasetdetail/240620 的静态图模型。

@lshpku lshpku added type/bug-report 报bug and removed type/question 用户提问 labels Apr 21, 2025
@lshpku
Copy link
Contributor

lshpku commented Apr 22, 2025

推理同学根据报错信息认为是模型没有加载成功,事实上我根据book_jiangjie.ipynb里的命令是可以在Linux上用Python成功加载这个模型并进行推理的(使用output.zip里的模型和wsi_coco.zip数据集):

cd PaddleDetection
# 将output.zip解压到当前目录
# 将wsi_coco.zip解压到dataset目录
python deploy/python/infer.py --model_dir=./output/config --device=GPU --image_file=./dataset/wsi_coco/train/0.jpg

但我没有用C++或者C#试过,也没有用Windows运行过,不排除是教材代码有误或运行环境、运行参数等原因导致模型加载失败(照理来说Python能跑说明模型是没问题的,然后paddle inference这个框架很多人用也不太可能出这种问题,那就只有可能是调用的代码出问题了),建议你可以先用Python代替,或者提供更多关于模型版本、导出方式和paddle inference版本的信息以供我们排查

@bailandeshen
Copy link
Author

bailandeshen commented Apr 22, 2025

推理同学根据报错信息认为是模型没有加载成功,事实上我根据book_jiangjie.ipynb里的命令是可以在Linux上用Python成功加载这个模型并进行推理的(使用output.zip里的模型和wsi_coco.zip数据集):
cd PaddleDetection
# 将output.zip解压到当前目录
# 将wsi_coco.zip解压到dataset目录
python deploy/python/infer.py --model_dir=./output/config --device=GPU --image_file=./dataset/wsi_coco/train/0.jpg
但我没有用C++或者C#试过,也没有用Windows运行过,不排除是教材代码有误或运行环境、运行参数等原因导致模型加载失败(照理来说Python能跑说明模型是没问题的,然后paddle inference这个框架很多人用也不太可能出这种问题,那就只有可能是调用的代码出问题了),建议你可以先用Python代替,或者提供更多关于模型版本、导出方式和paddle inference版本的信息以供我们排查

是的,这个模型在windows上使用python可以正常推理运行,只是c++运行跑不起来。
模型训练采用book_jiangjie上提供的内容,paddlepaddle版本为2.52
paddle inference版本的信息:

GIT COMMIT ID: 4596b9a22540fb0ea5d369c3c804544de61d03d0
WITH_MKL: ON
WITH_MKLDNN: ON
WITH_GPU: ON
WITH_ROCM: OFF
WITH_ASCEND_CL: OFF
WITH_ASCEND_CXX11: OFF
WITH_IPU: OFF
CUDA version: 11.6
CUDNN version: v8.4
CXX compiler version: 19.29.30145.0
WITH_TENSORRT: ON
TensorRT version: v8.4.1.5

@lshpku
Copy link
Contributor

lshpku commented Apr 22, 2025

我今天又拿Linux复现了一下,貌似CPU版的C++是可以跑通的,就是编译过程中有些坑

大致按照cpp/README.md里面的方法编译,但需要修改一些地方:

  • cpp/CMakeLists.txt里面的-o2改成-O2
  • cpp/cmake/yaml-cpp.cmake第5行加上set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fPIC)
  • cpp/src/main.cc里面注释的内容对换一下,被注释掉的才是正确代码;另外把DEFINE_bool(use_mkldnn...这整行换成DECLARE_bool(use_mkldnn);,不然报重复定义

编译:

$ cd cpp
$ bash scripts/build.sh

运行:

$ build/main --model_dir=../output/config --image_file=../wsi_coco/val/1017.jpg
total images = 1, batch_size = 1, total steps = 1
class=0 confidence=0.6409 rect=[732 92 980 405]
class=1 confidence=0.7778 rect=[0 1614 205 1884]
../wsi_coco/train/1017.jpg The number of detected box: 2
Visualized output saved as output/1017.jpg

GPU版的环境依赖太复杂我就没复现,你可以再检查下有什么问题,这个教材的代码本来也不太规范,应该并非paddle_inference的问题

@bailandeshen
Copy link
Author

bailandeshen commented Apr 24, 2025

我今天又拿Linux复现了一下,貌似CPU版的C++是可以跑通的,就是编译过程中有些坑

大致按照cpp/README.md里面的方法编译,但需要修改一些地方:

  • cpp/CMakeLists.txt里面的-o2改成-O2
  • cpp/cmake/yaml-cpp.cmake第5行加上set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fPIC)
  • cpp/src/main.cc里面注释的内容对换一下,被注释掉的才是正确代码;另外把DEFINE_bool(use_mkldnn...这整行换成DECLARE_bool(use_mkldnn);,不然报重复定义

编译:

$ cd cpp
$ bash scripts/build.sh
运行:

$ build/main --model_dir=../output/config --image_file=../wsi_coco/val/1017.jpg
total images = 1, batch_size = 1, total steps = 1
class=0 confidence=0.6409 rect=[732 92 980 405]
class=1 confidence=0.7778 rect=[0 1614 205 1884]
../wsi_coco/train/1017.jpg The number of detected box: 2
Visualized output saved as output/1017.jpg
GPU版的环境依赖太复杂我就没复现,你可以再检查下有什么问题,这个教材的代码本来也不太规范,应该并非paddle_inference的问题

您好,请问“cpp/src/main.cc里面注释的内容对换一下,被注释掉的才是正确代码”具体是指哪一段?或者能提供相关代码么。
以及,尝试将paddle_inference版本倒回2.5后成果修复了问题,没有再出现报错,问题解决

@lshpku
Copy link
Contributor

lshpku commented Apr 25, 2025

改成这样:cpp/src/main.cc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants