为什么使用 TensorRT 使用 INT8 推理会输出更多数据
Why more output data using INT8 inference using TensorRT
使用 TensorRT 实现了 INT8 引擎推理。
训练批大小为 50,推理批大小为 1。
但在输出推理时
[outputs] = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream, batch_size=1)
输出大小为 13680000。
它必须是 273600。使用 FP32/FP16 产生的输出大小为 273600。
为什么使用 INT8 的输出大小增加了 5 倍?
我的推理代码是
with engine.create_execution_context() as context:
fps_time = time.time()
inputs, outputs, bindings, stream = common.allocate_buffers(engine)
im = np.array(frm, dtype=np.float32, order='C')
#im = im[:,:,::-1]
inputs[0].host = im.flatten()
[outputs] = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream, batch_size=1)
outputs = outputs.reshape((60, 80, 57))
这是因为训练批次大小为 50,并且为该批次大小分配了内存。
需要重塑输出 = outputs.reshape((50, 60, 80, 57))
然后取[0]张量,也就是我们用一张图片推理的结果。
使用 TensorRT 实现了 INT8 引擎推理。
训练批大小为 50,推理批大小为 1。
但在输出推理时
[outputs] = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream, batch_size=1)
输出大小为 13680000。
它必须是 273600。使用 FP32/FP16 产生的输出大小为 273600。
为什么使用 INT8 的输出大小增加了 5 倍?
我的推理代码是
with engine.create_execution_context() as context:
fps_time = time.time()
inputs, outputs, bindings, stream = common.allocate_buffers(engine)
im = np.array(frm, dtype=np.float32, order='C')
#im = im[:,:,::-1]
inputs[0].host = im.flatten()
[outputs] = common.do_inference(context, bindings=bindings, inputs=inputs, outputs=outputs, stream=stream, batch_size=1)
outputs = outputs.reshape((60, 80, 57))
这是因为训练批次大小为 50,并且为该批次大小分配了内存。
需要重塑输出 = outputs.reshape((50, 60, 80, 57))
然后取[0]张量,也就是我们用一张图片推理的结果。