python - Tensorflow:Inception v3 批处理

标签 python tensorflow

我正在使用 Inception v3 提取瓶颈张量。我的问题:我一次只能提供一张图像:

sess.graph.get_tensor_by_name("pool_3:0").eval(session=sess, feed_dict={'DecodeJpeg:0':single_image})

我想,批量处理多个图像会大大加快速度。建议解决方案here ,但我无法让它工作(使用tensorflow v0.10.0和0.11.0rc0进行测试,从 http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz 下载初始模型)。

import tensorflow as tf
from tensorflow.python.platform import gfile
import cv2
import numpy as np

def create_graph():
    with gfile.FastGFile('classify_image_graph_def.pb', 'rb') as f:
        graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(graph_def, name='')

create_graph()

img = cv2.imread("some_img.jpg")
img = cv2.resize(img, (299,299), interpolation = cv2.INTER_CUBIC) 
# replicate image 10 times
img = np.array(10*[img]).astype('float')

with tf.Session() as sess:
    pooled_2 =  sess.graph.get_tensor_by_name("pool_3:0").eval(session=sess, feed_dict={'ResizeBilinear:0':img})

这给了我(看似合理的)错误消息:

Traceback (most recent call last):
  File "extract_bottlenecks_minimal.py", line 26, in <module>
    pooled_2 = sess.graph.get_tensor_by_name("pool_3:0").eval(session=sess, feed_dict={'ResizeBilinear:0':img})
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 559, in eval
    return _eval_using_default_session(self, feed_dict, self.graph, session)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 3761, in _eval_using_default_session
    return session.run(tensors, feed_dict)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 717, in run
    run_metadata_ptr)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 894, in _run
    % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (10, 299, 299, 3) for Tensor u'ResizeBilinear:0', which has shape '(1, 299, 299, 3)'

我还发现了this issue声称 inception 适用于图像批处理,但此代码需要在每次输入时设置整个网络(我只想设置网络一次) .

感谢您的关注 - 非常感谢任何帮助;-)

最佳答案

(1) 请尝试使用更新的 Inception v3 模型,您可以在此处找到该模型:

http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz

这是我在二月份打开的错误之后发布的版本,它应该支持评估路径上的批量维度。 imagenet_eval 脚本应该适用于此。

(2) 在输入网络之前,您可能需要解码 JPEG 并将大小调整为 299x299。我还没有研究过预训练的解码是否接受可变批量大小,但它至少应该接受网络本身。

有关详细信息,请参阅image recognition tutorial.

关于python - Tensorflow:Inception v3 批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719919/

相关文章:

python - tf.train.shuffle_batch_join 和 tf.train.shuffle_batch 之间的区别

tensorflow - Keras 中的自注意力 GAN

python - Sphinx 中的源级转换

python - 如何转换数据框中的时间戳

python - 如何使用 python 脚本启动/终止应用程序?

python - Keras自定义指标总和错误

python - 安装turicreate时出现tensorflow错误?

deep-learning - 无法理解 TensorFlow 文档中的 shape(output) = (shape(value) - ksize + 1)/strides

Python:在两个远程服务器之间复制文件

python - 给定返回 n 维数组的函数,如何创建 n+1 维数组