2017-02-21 3 views
-1

次の関数では、vggモデルに基づいてダウンロードした画像に対して予測を実行することを目的としています。私はOpenCVのを介して読み出さ既存のイメージを超える予測しようとしている与えられた画像を予測するためのinput_placeholderの定義について

with tf.Graph().as_default(): 

url = ("https://upload.wikimedia.org/wikipedia/commons/d/d9/First_Student_IC_school_bus_202076.jpg") 

image_string = urllib2.urlopen(url).read() 
image = tf.image.decode_jpeg(image_string, channels=3) 

image_float = tf.to_float(image, name='ToFloat') 

# Subtract the mean pixel value from each pixel 
processed_image = _mean_image_subtraction(image_float, 
              [_R_MEAN, _G_MEAN, _B_MEAN]) 

input_image = tf.expand_dims(processed_image, 0) 

with slim.arg_scope(vgg.vgg_arg_scope()): 


    logits, _ = vgg.vgg_16(input_image, 
          num_classes=1000, 
          is_training=False, 
          spatial_squeeze=False) 
pred = tf.argmax(logits, dimension=3) 

init_fn = slim.assign_from_checkpoint_fn(
    os.path.join(checkpoints_dir, 'vgg_16.ckpt'), 
    slim.get_model_variables('vgg_16')) 

with tf.Session() as sess: 
    init_fn(sess) 
    segmentation, np_image, np_logits = sess.run([pred, image, logits]) 

は、私が作った唯一の変更は、CV2を介して画像を読み込むinput_placeholderを追加し、それに応じてsess.run変更することです。ただし、次のエラーメッセージが表示されます。

segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image}) 
ValueError: need more than 2 values to unpack 

私が行った変更が間違っていることを教えてください。

with tf.Graph().as_default(): 

image = cv2.imread('/data/cat.jpg',cv2.IMREAD_UNCHANGED) 
input_placeholder = tf.placeholder(tf.float32,shape = [image.shape[0],image.shape[1],image.shape[2]]) 
image_float = np.float32(image) 

# Subtract the mean pixel value from each pixel 
processed_image = _mean_image_subtraction(image_float,[_R_MEAN, _G_MEAN, _B_MEAN]) 

input_image = tf.expand_dims(processed_image, 0) 

with slim.arg_scope(vgg.vgg_arg_scope()): 

    logits, _ = vgg.vgg_16(input_image, 
          num_classes=1000, 
          is_training=False, 
          spatial_squeeze=False) 


pred = tf.argmax(logits, dimension=3) 

init_fn = slim.assign_from_checkpoint_fn(
    os.path.join(checkpoints_dir, 'vgg_16.ckpt'), 
    slim.get_model_variables('vgg_16')) 

with tf.Session() as sess: 
    init_fn(sess) 
    segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image}) 
+0

[ndarray(cv2またはskimage経由の画像入力)をテンソルに変換することについての可能な複製](http://stackoverflow.com/questions/42353188/regarding-transforming-an-ndarrayimage-inp ut-via-cv2-or-skimage-to-a-tensor) – rmeertens

答えて

1

に2回のフェッチを渡している

np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image}) 

する必要があります公式文書:https://www.tensorflow.org/api_docs/python/tf/Session#run

fetchesパラメータに渡された各グラフ要素に対して、sess.run()の値が1つ返されます。あなたのケースでは、次のリストをフェッチとして渡します。[pred,logits]だから、sess.run([pred,logits], ...)は、pred演算子とlogits演算子を実行した結果、2つの値を返します。この行にしかしドキュメント

The value returned by run() has the same shape as the fetches argument, where the leaves are replaced by the corresponding values returned by TensorFlow.

を引用

あなたは、したがって、あなたが得る3種類のPythonの変数(segmentationnp_imagenp_logits)にこれらの2つの値を代入しようとしている

segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})

ValueError

あなたが提供元の例を見ると、最後の行は次のとおりです。

segmentation, np_image, np_logits = sess.run([pred, image, logits])

そうのようなあなたのコードからnp_image宣言を削除してみてください元の例を模倣するために:

segmentation, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})

+0

ありがとうございました。問題は解決された。 – user288609

0

は、Pythonのエラーです:

segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image}) 

は、あなたが最初に見てみましょう参考のために、実行機能

+0

あなたの答えもありがとう。問題は解決された。 – user288609

関連する問題