win7+vs2015 通过paddle V1.7库,调用模型进行预测,图像数据输入报错
Created by: ZHOUKAI1
windows7, cuda是9.0 ,i7-6700,P4000 我训练好了一个模型,现在想用opencv读图片,输入模型进行训练,从官方网站找到样例[C++预测 c++预测 官方是用数组填0来输入,假如我有两个图片,batch=2,通过如下代码输入,到 input_t->copy_from_cpu(ary);就出错:
0x0000000141EC7C38 处有未经处理的异常(在 windows_mobilenet.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x0000000000173000)。
核心代码: // 2. create predictor, prepare input data std::unique_ptr predictor = CreatePaddlePredictor(config); int batch_size = 2; int channels = 3; int height = 224; int width = 224; int nums = batch_size * channels * height * width;
cv::Mat image1 = cv::imread("rose.jpg", cv::IMREAD_COLOR); cv::Mat image = cv::imread("tulips.jpg", cv::IMREAD_COLOR); cv::Mat dst = image.clone(); cv::Mat dst1 = image.clone(); cv::resize(image, dst, cv::Size(224, 224), 0, 0, cv::INTER_LINEAR); cv::resize(image1, dst1, cv::Size(224, 224), 0, 0, cv::INTER_LINEAR);
float *ary = new float[2 * 224 * 224 * 3];
for (int i = 0; i < 224 * 224 * 3; i++) { ary[i] = (dst.data[i]- 127.5)*0.007843; };
for (int i = 224 * 224 * 3; i <2* 224 * 224 * 3; i++) { ary[i] = (dst1.data[i] - 127.5)*0.007843; };
// 3. create input tensor, use ZeroCopyTensor auto input_names = predictor->GetInputNames(); auto input_t = predictor->GetInputTensor(input_names[0]); input_t->Reshape({batch_size, channels, height, width}); input_t->copy_from_cpu(ary);
// 4. run predictor predictor->ZeroCopyRun();
图片输入一张,batch=1,是能出结果的。
还有追加的几个问题: 1 opencv格式的Mat通过 input_t->copy_from_cpu(数组)输入有没有更好的方法? 2 batch=2以上,输出的结果怎么获取? 谢谢!