我正在使用 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/