【问题标题】:Run Tensorflow classify_image on numpy array在 numpy 数组上运行 Tensorflow 分类图像
【发布时间】:2016-11-15 15:06:41
【问题描述】:

我有一个实时应用程序,我试图在来自提要的图像到达时对其进行分类。分类图像示例有:

image_data = tf.gfile.FastGFile(image, 'rb').read()
#...
with tf.Session() as sess:
    predictions = sess.run(softmax_tensor,
        {'DecodeJpeg/contents:0': image_data})

其中image 是图像文件的路径。但是,我不是从文件中读取图像,而是将它们作为 numpy 数组接收。在先前获取的图像上运行 Tensorflow 会话的最佳方式是什么?此外,最好的做法是事先创建一个会话和一个图表,并且每当获取新帧时,在新图像上运行现有会话,而不是创建新图表和新会话?

编辑:

我试过了:

images_placeholder = tensorflow.placeholder(tensorflow.int32)
predictions = sess.run(softmax_tensor,
                       {images_placeholder: image})

它成功了!谢谢sygi!

编辑 2:

这会在没有错误消息的情况下在一段时间后崩溃,并且每一帧都具有相同的预测标签。我什至在每一帧都创建了一个新的 images_place 对象,但我仍然得到相同的标签。

【问题讨论】:

  • 顺便说一句,给占位符提供预定义的形状(如果你知道的话)是一个好习惯——这样调试形状会更容易。
  • 你的image 是什么?您应该每次提供不同的(一批)图像。
  • 这是一个新图像,代码 sn-p 被循环调用,视频源中的每一帧都被放入变量image
  • 然后模型接收到不同的图像。如果给出相同的预测,问题似乎出在模型的某个地方。就错误而言,我不知道(尤其是没有堆栈跟踪),但我也怀疑原因不在这两行。
  • 我在循环中的每次迭代都使用了softmax_tensor = sess.graph.get_tensor_by_name('softmax:0'),每次迭代都应该改变吗?

标签: python numpy tensorflow


【解决方案1】:

在计算机上运行 TensorFlow 会话的最佳方式是什么 以前获得的图像?

我认为最好的方法是创建一个tf.placeholder,在你的模型中使用它,最后在 feed dict 中传递 numpy 数组。

是预先创建一个会话和一个图表的最佳实践, 并且每当获取新帧时,在 新图像,而不是创建新图表和新会话?

最好重用一个图和一个会话。创建图形时,它会被“编译”以将您编写的代码更改为高效的 GPU 实现。您创建了许多图表——您在进行相同的“编译”时会浪费大量时间。此外,当您重用一个会话时,您可以重用变量,防止它们从 RAM 到 GPU 内存来回传递。

【讨论】:

  • 这行得通,谢谢!我编辑了包含解决方案的 OP。
  • 实际上,这会在一段时间后崩溃。不会出错,它会停止工作。此外,它每次都给我相同的标签。
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 2018-07-21
  • 2016-09-23
  • 1970-01-01
  • 2018-07-23
  • 2021-08-08
  • 2016-04-19
  • 2018-03-07
相关资源
最近更新 更多