paddle android capi加载模型预测结果与v1 api demo的预测结果不一致
Created by: bushidonggua
在android平台用capi的预测结果和服务端不一致
服务端预测相关代码: def get_data(self, img_path): """ 1. load image from img_path. 2. resize or oversampling. 3. transformer data: transpose, sub mean. return K x H x W ndarray. img_path: image path. """ image = image_util.load_image(img_path, self.is_color) if self.oversample: # image_util.resize_image: short side is self.resize_dim image = image_util.resize_image(image, self.resize_dim) image = np.array(image) input = np.zeros( (1, image.shape[0], image.shape[1], 3), dtype=np.float32) input[0] = image.astype(np.float32) input = image_util.oversample(input, self.crop_dims) else: image = image.resize(self.crop_dims, Image.ANTIALIAS) input = np.zeros( (1, self.crop_dims[0], self.crop_dims[1], 3), dtype=np.float32) input[0] = np.array(image).astype(np.float32)
data_in = []
for img in input:
img = self.transformer.transformer(img).flatten()
data_in.append([img.tolist()])
return data_in
def forward(self, input_data):
in_arg = self.converter(input_data)
return self.network.forwardTest(in_arg)
def forward(self, data, output_layer):
"""
input_data: py_paddle input data.
output_layer: specify the name of probability, namely the layer with
softmax activation.
return: the predicting probability of each label.
"""
input = self.converter(data)
self.network.forwardTest(input)
output = self.network.getLayerOutputs(output_layer)
# For oversampling, average predictions across crops.
# If not, the shape of output[name]: (1, class_number),
# the mean is also applicable.
return output[output_layer]['value'].mean(0)
def predict(self, image=None, output_layer=None):
assert isinstance(image, basestring)
assert isinstance(output_layer, basestring)
data = self.get_data(image)
prob = self.forward(data, output_layer)
lab = np.argsort(-prob)
# logging.info("Label of %s is: %d", image, lab[0])
return lab[0], prob[lab[0]]
android paddle capi:我把输入设置贴出来看,其他的就是demo里的,模型加载用paddle_gradient_machine_create_for_inference_with_parameters: for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { //opencv brg->rgb array[index++] = (paddle_real)frame.at(i, j)[2]; // R array[index++] = (paddle_real)frame.at(i, j)[1]; // G array[index++] = (paddle_real)frame.at(i, j)[0]; // B } } PS: 模型加载没有日志,没法知道是不是这个模型加载有问题。。