私はTensorflowで動的に決定された画像のトリミング方法を理解しようとしています。以下は私が達成しようとしているものの例ですが、それを機能させるようには見えません。基本的には、グラフ内の画像とその画像のクロップ値をフィードし、それらのクロップされた部分の他の計算を続けます。私の現在の試み:Tensorflowの動的画像クロッピング
import tensorflow as tf
from matplotlib import pyplot as plt
import numpy as np
sess = tf.InteractiveSession()
img1 = np.random.random([400, 600, 3])
img2 = np.random.random([400, 600, 3])
img3 = np.random.random([400, 600, 3])
images = [img1, img2, img3]
img1_crop = [100, 100, 100, 100]
img2_crop = [200, 150, 100, 100]
img3_crop = [150, 200, 100, 100]
crop_values = [img1_crop, img2_crop, img3_crop]
def crop_image(img, crop):
tf.image.crop_to_bounding_box(img,
crop[0],
crop[1],
crop[2],
crop[3])
image_placeholder = tf.placeholder("float", [None, 400, 600, 3])
crop_placeholder = tf.placeholder(dtype=tf.int32)
sess.run(tf.global_variables_initializer())
cropped_image = tf.map_fn(lambda img, crop: crop_image(img, crop), elems=[image_placeholder, crop_placeholder])
result = sess.run(cropped_image, feed_dict={image_placeholder: images, crop_placeholder:crop_values})
plt.imshow(result)
plt.show()
/Users/p111/anaconda/bin/python /Users/p111/PycharmProjects/analysis_code/testing.py Traceback (most recent call last): File "/Users/p111/PycharmProjects/analysis_code/testing.py", line 31, in cropped_image = tf.map_fn(lambda img, crop: crop_image(img, crop), elems=[image_placeholder, crop_placeholder]) File "/Users/p111/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/functional_ops.py", line 390, in map_fn swap_memory=swap_memory) File "/Users/p111/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2636, in while_loop result = context.BuildLoop(cond, body, loop_vars, shape_invariants) File "/Users/p111/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2469, in BuildLoop pred, body, original_loop_vars, loop_vars, shape_invariants) File "/Users/p111/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2419, in _BuildLoop body_result = body(*packed_vars_for_body) File "/Users/p111/anaconda/lib/python3.5/site-packages/tensorflow/python/ops/functional_ops.py", line 380, in compute packed_fn_values = fn(packed_values) TypeError:() missing 1 required positional argument: 'crop'
編集:elemsは単一テンソルを受け入れることが表示されます。つまり、どうにかして2つのテンソルを1つにまとめる必要があり、次に値を取得するために関数で展開します。私はそのようなテンソル操作をどのように実行するのかはわかりません。私はすでに垣間見る方法を見つけたが、それはうまくいくが、私はこの特定の方法で同じことができるかどうか疑問に思っている。ほとんどの場合、このメソッドで使用できるように、テンソルのペアを結合して分割する方法が不思議です。
あなたの現在の試行でうまくいきませんか?トレースバックがある場合は、完全に投稿してください!申し訳ありませんが、 – mrry
追加されたスタックトレース。私は、問題が明らかになるような単純な問題であるように思われたので、私は仮定しました。私は、これについて最善の方法で何とかしていくつもりはないと確信しています。 – Beaker