同幅图像,Tensorflow预测速度增加



我使用tensorflow-gpu 2.5.0作为对象检测模型。在模型中,我用model(x)来调用预测函数。当我批量运行测试时,我发现在同一图像上重复调用预测将导致更快的推断。这给了我的模型一个不准确的推断时间估计。速度提升的原因是什么?

下面的例子是对三个不同的图像进行重复推理的推理时间结果。它是在格式为<image number> - <inference time>的循环中执行的。模型分别看到图像1和图像2一次后,推理速度变快。当我添加新图像3时,第一次模型需要更长的时间来预测,随后也变得更快。

1 - 3.5671939849853516 seconds
2 - 1.1461808681488037 seconds
1 - 0.07942032814025879 seconds
2 - 0.08655834197998047 seconds
1 - 0.0813601016998291 seconds
2 - 0.08380460739135742 seconds
1 - 0.07466459274291992 seconds
2 - 0.08526778221130371 seconds
3 - 1.0617506504058838 seconds
3 - 0.07965445518493652 seconds

调用model(x)与调用任何带有x输入的函数@tf.function相同。

我在一篇3部分的文章中介绍了这些场景,对您的范围最有用的是第2部分。

实际情况是,在第一次调用特定输入类型时,您定义了所谓的"concretefunction";-这是python代码的执行+跟踪+签名调用+创建tf.Graph对象和该对象的后续缓存。

这就是为什么第一个电话这么慢。

其他调用在后面,因为你只是在缓存映射中查找张量类型,你找到了正确的tf。使用已经创建的图形绘制并运行向前传递。

最新更新