Tensorflow推理运行时间在第一个数据点上较高,在随后的数据点上减少

时间:2019-04-08 20:49:56

标签: tensorflow deep-learning object-detection object-detection-api pre-trained-model

我正在使用TensorFlow的对象检测模块中的一种模型进行推理。我在同一会话中循环测试图像并执行sess.run()。但是,在对这些运行进行概要分析时,我意识到与后续运行相比,第一运行总是有更长的时间。

我找到了答案here,以了解发生这种情况的原因,但是没有解决方法。

我正在Intel i7 CPU上部署对象检测推理管道。一个session.run(),1、2、3和第四个图像的时间看起来像(以秒为单位):

1. 84.7132628
2. 1.495621681
3. 1.505012751
4. 1.501652718

只是我尝试过的一切的背景:

  • 我尝试使用TensorFlow作为示例here给出的TFRecords方法。我希望它会更好,因为它不使用feed_dict。但是由于涉及更多的I / O操作,因此我不确定它是否理想。我尝试使它在不写入磁盘的情况下工作,但始终在图像编码方面出现一些错误。

  • 我尝试使用TensorFlow数据集来馈送数据,但是我不确定如何提供输入,因为在推理过程中,我需要为图中的“图像张量”键提供输入。关于如何使用它为冻结图形提供输入的任何想法?

任何帮助将不胜感激!

TLDR:出于部署目的,希望减少第一个映像的推理运行时间。

1 个答案:

答案 0 :(得分:0)

即使我已经看到第一次推断要花费更长的时间,但所显示的差异(84 Vs 1.5)似乎还是令人难以置信。您是否还在此时间指标内计算加载模型的时间?对于较大的时差,这可能会有所不同吗?拓扑是否如此复杂,以至于可以证明这种时差?

我的建议:

  1. 尝试Openvino:查看Openvino是否支持您正在使用的拓扑。众所周知,OpenVino具有优化网络操作的能力,可大大提高推理工作量。而且,在大多数情况下,加载openvino模型所需的时间相对较短。

  2. 关于TFRecords方法,能否请您分享确切的错误以及在哪个阶段出现错误?

  3. 关于Tensorflow数据集,能否请您检出https://github.com/tensorflow/tensorflow/issues/23523https://www.tensorflow.org/guide/datasets。关于图形中的“图像张量”键,希望您的原始推理管道可以为您提供一些线索。