tensorflow - 为什么使用 TensorRT 使用 INT8 推理输出更多数据
问题描述
使用 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] 张量,这是我们对一张图像进行推理时的结果。
推荐阅读
- android-studio - OpenJDK平台二进制资源问题
- c++ - 如何建立对消费者比发布者慢的队列的并发访问?
- java - 我们如何使用 ObjectOutputStream 为大量自定义对象编写数据块
- function - Stm Cube IDE ERROR:函数比较错误
- mysql - 是否可以在 MySQL 中使用绕过行的查询(如果重复)并获取最后一个?
- reactjs - 在具有状态的其他组件中重用变量
- flutter - 有没有办法获取应用程序的早期版本或知道它是否已更新或下载?
- python - 如何用两个不同的 X_train 数据预测 Y_train
- r - 如何为意大利面条图准备数据
- c# - 类型或命名空间定义,或预期文件结尾和类记录中的无效标记“else”