Paddle pp-yolo Batch inference use AnalysisConfig zero_copy_run, the outputs does not have batch dimension

kzmpq1sx  于 2022-10-20  发布在  其他
关注(0)|答案(2)|浏览(121)
  • 版本、环境信息:

   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中定位?

kpbpu008

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那一维省略了

sxissh06

sxissh062#

@heavengate 感谢回复

回头研究一下Lod再继续。

相关问题