2016-11-21 9 views
1

Inception v3でボトルネックテンソルを抽出しています。私の問題:私は一度に1つの画像だけを養うことができます。複数の画像のTensorflow:Inception v3バッチ処理

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

バッチ処理さ処理がスピードアップでしょう物事にかなり、私は推測します。解決策はhereと提案されていますが、動作させることができません(テンソルフロー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は当初は画像のバッチで動作しますが、このコードはネットワーク全体にをセットアップする必要があると主張しました私はそれを入力するたびに(私はネットワークを一度しか設定しません)。関心を取るため

感謝 - 任意のヘルプを大幅に;-)

答えて

2

を高く評価している(1)あなたがここに見つけることができるより多くの最近のインセプションv3のモデルを、使用してみてください:

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

これは2月にオープンしたバグに続いてリリースされたバージョンで、評価パスのバッチディメンションをサポートする必要があります。 imagenet_evalスクリプトはこれで動作するはずです。

(2)は、ネットワークにフィードする前にJPEGをデコードし、299x299にサイズを変更する必要があります。私はpretrainedものが可変のバッチサイズをデコードに受け入れるかどうかを見ていないが、少なくともそれをネットワーク自体に受け入れるべきである。

詳細については、image recognition tutorial.

を参照してください。