PaddlePaddle/Paddle-Inference-Demo

使用paddle_inference在c++中调用官方例程报错

Opened this issue · 4 comments

首先我下载了官方所给的resunet模型的参数和模型文件:inference.pdiparams和inference.pdiparams.info和inference.pdmodel,然后调用了官方的例程,一直在“auto input_names = predictor->GetInputNames();”这一步代码出错,显示内存已被破坏,后来经过调试发现config中根本就没读取到,
代码如下: // 字符串 prog_file 为 Combine 模型文件所在路径
std::string prog_file = "./resunet/inference.pdmodel";
// 字符串 params_file 为 Combine 模型参数文件所在路径
std::string params_file = "./resunet/inference.pdiparams";
// 设置推理模型路径,即为本小节第2步中下载的模型
// 根据模型文件和参数文件构造 Config 对象
paddle_infer::Config config(prog_file, params_file);

// 不启用 GPU 和 MKLDNN 推理
config.DisableGpu();
config.EnableMKLDNN();

// 开启 内存/显存 复用
config.EnableMemoryOptim();

auto predictor = paddle_infer::CreatePredictor(config);
// 获取输入 Tensor
auto input_names = predictor->GetInputNames();
auto input_tensor = predictor->GetInputHandle(input_names[0]);

// 设置输入 Tensor 的维度信息
std::vector<int> INPUT_SHAPE = { 1, 3, 224, 224 };
input_tensor->Reshape(INPUT_SHAPE);

// 准备输入数据
int input_size = 1 * 3 * 224 * 224;
std::vector<float> input_data(input_size, 1);
// 设置输入 Tensor 数据
input_tensor->CopyFromCpu(input_data.data());

##以下是config的参数截图,可以发现根本就没读取的到文件,但是我的文件是确实存在的
image

其实一开始我是打算使用自己的模型来进行推理的,但是也是在config那一步就没读取到模型参数信息,我觉得是不是我自己的模型参数文件有问题,就下载了官方所给的文件,结果依然也是报错

请问这个模型文件来源是什么呢?需要用推理的模型(动转静后的模型)

来源于这个网页:https://www.paddlepaddle.org.cn/inference/v2.6/guides/quick_start/cpp_demo.html
image
点击ResNet50即可自动下载,下载完解压就是我提到的那三个文件

来源于这个网页:https://www.paddlepaddle.org.cn/inference/v2.6/guides/quick_start/cpp_demo.html image 点击ResNet50即可自动下载,下载完解压就是我提到的那三个文件

看起来模型没什么问题,推理的api也是正常使用,请问参数有确定是传对了吗?比如这个模型文件名:resunet ->resnet