已浏览过历史issue中所有相关问题,也已确保输入完全一致。
标题:c++ 预测与python预测结果不一致
版本、环境信息:
1)PaddlePaddle版本:python 1.4.0, c++ 1.4.0
4)系统环境:
python: Mac pip install paddlepaddle==1.4.0
c++: nvidia/cuda:9.0-devel; 自行checkout release/1.4 编译。(直接下载官网的编译好的,运行出core,Issue在这里。)
-预测信息
1)C++预测:
GIT COMMIT ID: 4b3f9e5c61d687ea90e6599bf9494df92ed088fb
WITH_MKL: ON
WITH_MKLDNN: ON
WITH_GPU: ON
CUDA version: 9.0
CUDNN version: v7
2)CMake包含路径的完整命令
cmake -DCMAKE_INSTALL_PREFIX=/baidu/ppp/paddle/Paddle/install \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_SWIG_PY=OFF \
-DWITH_GOLANG=OFF \
-DWITH_PYTHON=OFF \
-DWITH_MKL=ON \
-DWITH_GPU=ON \
-DON_INFER=ON \
..
3)API信息
调用方式没有问题,因为在效果好的模型上,结果还是正确的,只不过c++预测的结果 准确率大幅降低
cv::Mat image; // 输入图片
auto input_size = static_cast<size_t>(_prep.height * _prep.width * 3);
std::vector<float> raw(input_size);
int index= 0;
for (int c = 0; c < 3; ++c) {
for (int h = 0; h < _prep.height; ++h) {
for (int w = 0; w < _prep.width; ++w) {
raw[index] = (int(image.at<cv::Vec3b>(h, w)[c]) - _prep.mean[c]) * _prep.scale;
index += 1;
}
}
}
PaddleTensor tensor;
tensor.shape = std::vector<int>({1, 3, image.cols, image.rows}); // TODO: 哪个w,哪个h?
tensor.data = PaddleBuf((void*)raw.data(), input_size);
tensor.dtype = PaddleDType::FLOAT32;
std::vector<PaddleTensor> paddle_tensor_feeds(1, tensor);
_predictor->Run(paddle_tensor_feeds, &outputs);
data = np.swapaxes(data, 1, 2)
data = np.swapaxes(data, 1, 0)
print(data.shape)
print(data[0, 0:2, ])
res = self._exe.run(self._inference_program,
feed={self._feed_target_names[0]: np.array([data])},
fetch_list=self._fetch_targets,
return_numpy=(self._model_type == c.ModelType.ImageClassification)
) # type: fluid.Tensor
我 已将python和c++的输入依次打印出来,完全一致(size, chw, rgb)
标题:c++ 预测与python预测结果不一致
版本、环境信息:
1)PaddlePaddle版本:python 1.4.0, c++ 1.4.0
4)系统环境:
python: Mac pip install paddlepaddle==1.4.0
c++: nvidia/cuda:9.0-devel; 自行checkout release/1.4 编译。(直接下载官网的编译好的,运行出core,Issue在这里。)
-预测信息
1)C++预测:
GIT COMMIT ID: 4b3f9e5c61d687ea90e6599bf9494df92ed088fb
WITH_MKL: ON
WITH_MKLDNN: ON
WITH_GPU: ON
CUDA version: 9.0
CUDNN version: v7
2)CMake包含路径的完整命令
cmake -DCMAKE_INSTALL_PREFIX=/baidu/ppp/paddle/Paddle/install \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_SWIG_PY=OFF \
-DWITH_GOLANG=OFF \
-DWITH_PYTHON=OFF \
-DWITH_MKL=ON \
-DWITH_GPU=ON \
-DON_INFER=ON \
..
3)API信息
调用方式没有问题,因为在效果好的模型上,结果还是正确的,只不过c++预测的结果 准确率大幅降低
cv::Mat image; // 输入图片
auto input_size = static_cast<size_t>(_prep.height * _prep.width * 3);
std::vector<float> raw(input_size);
int index= 0;
for (int c = 0; c < 3; ++c) {
for (int h = 0; h < _prep.height; ++h) {
for (int w = 0; w < _prep.width; ++w) {
raw[index] = (int(image.at<cv::Vec3b>(h, w)[c]) - _prep.mean[c]) * _prep.scale;
index += 1;
}
}
}
PaddleTensor tensor;
tensor.shape = std::vector<int>({1, 3, image.cols, image.rows}); // TODO: 哪个w,哪个h?
tensor.data = PaddleBuf((void*)raw.data(), input_size);
tensor.dtype = PaddleDType::FLOAT32;
std::vector<PaddleTensor> paddle_tensor_feeds(1, tensor);
_predictor->Run(paddle_tensor_feeds, &outputs);
data = np.swapaxes(data, 1, 2)
data = np.swapaxes(data, 1, 0)
print(data.shape)
print(data[0, 0:2, ])
res = self._exe.run(self._inference_program,
feed={self._feed_target_names[0]: np.array([data])},
fetch_list=self._fetch_targets,
return_numpy=(self._model_type == c.ModelType.ImageClassification)
) # type: fluid.Tensor
我 已将python和c++的输入依次打印出来,完全一致(size, chw, rgb)