- 版本、环境信息:
1)PaddlePaddle版本:1.8.4
2)CPU:i7
3)GPU:N/A
4)Mac OS 10.15, Python 3.7
- 预测信息
1)参考 PaddleDetection/deploy/python/infer.py
2)修改input
for i in range(len(input_names)):
input_tensor = self.predictor.get_input_tensor(input_names[i])
# 模拟 batch size = 4
emu = inputs[input_names[i]].repeat(4, axis=0)
input_tensor.copy_from_cpu(emu)
3)获取输出
boxes_tensor = self.predictor.get_output_tensor(output_names[0])
np_boxes = boxes_tensor.copy_to_cpu()
print(np_boxes.shape)
# (4, 6)
- 问题:
get_output_tensor 只有[n, 6]维, n是目标结果数量,如何将box在batch中定位?
2条答案
按热度按时间kpbpu0081#
输出是个LoDTensor,是通过LoD来区分batch维的,deploy/infer.py里面一般都是batch_size=1,可以不关注这个,认为[n, 6]里的n是检测框个数。
或者可以参考eval里的下面代码把lod里的batch维解出来
https://github.com/PaddlePaddle/PaddleDetection/blob/84dde59eaf0f2704ca971fa267b8b430c4e16837/ppdet/utils/eval_utils.py#L130
lod这个概念稍微有点复杂,如果你deploy的时候batch_size=1可以不关注这个,简单认为是把batch_size=1那一维省略了
sxissh062#
@heavengate 感谢回复
回头研究一下Lod再继续。