为啥使用 TensorRT 使用 INT8 推理输出更多数据

Posted

技术标签:

【中文标题】为啥使用 TensorRT 使用 INT8 推理输出更多数据【英文标题】:Why more output data using INT8 inference using TensorRT为什么使用 TensorRT 使用 INT8 推理输出更多数据 【发布时间】:2019-06-19 14:05:53 【问题描述】:

使用 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))

【问题讨论】:

【参考方案1】:

这是因为训练批次大小为 50,并且为该批次大小分配了内存。

需要重塑为输出 = outputs.reshape((50, 60, 80, 57))

然后取 [0] 张量,这是我们对一张图像进行推理时的结果。

【讨论】:

以上是关于为啥使用 TensorRT 使用 INT8 推理输出更多数据的主要内容,如果未能解决你的问题,请参考以下文章

利用TensorRT实现INT8量化感知训练QAT

TensorRT模型加速 | 网络结构优化 | 低精度推理

TensorRT模型加速 | 网络结构优化 | 低精度推理

TensorRT模型加速 | 网络结构优化 | 低精度推理

TensorRT 模型加速 2- 优化方式

TensorRT 与 TensorFlow 1.7 集成