Возврат из функции top_k к изображению - PullRequest
0 голосов
/ 25 июня 2018

введите описание изображения здесь Я работал над своей проблемой, и все же я перегружен многими функциями. Я ищу использовать tf.top_k и вернуться к первому изображению. Может ли кто-нибудь, знакомый с tenorflow, помочь мне решить эту проблему?

Вопрос в деталях: изображение (4 на 4) в качестве тензора -> tf.top_k -> 4 значения (2 на 2) и 4 индекса (2 на 2) -> фрагмент -> изображение (4 4) в качестве тензора

Например, представьте, что у нас есть одно изображение

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

x = tf.placeholder(tf.float32, [None, img_height, img_width, 1], name='x')
patches = tf.extract_image_patches(x, [1, 2, 2, 1], [1, 2, 2, 1], [1, 1, 1, 1], "SAME")
ktop, indices = tf.nn.top_k(patches, k=4, sorted=True, name=None) 

Теперь я хочу дать ktop и индексы, чтобы снова получить изображение, подобное первому состоянию

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

Я пробовал много вещей, таких как tf.one_hot, tf.gatter и т. Д., Но я не смог получить (4, 4) изображение. У меня должен быть тензор на входе и выходе, и кажется, что я не могу использовать NumPy или для циклов. Я задавал подобный вопрос раньше, но я спрашиваю здесь снова с более ясным объяснением. Не могли бы вы, пожалуйста, кто-нибудь помочь решить этот вопрос. Это должно быть легко для других, но для меня это сложно.

Этот фрагмент дал мне первое изображение, но не как (1, 4, 4, 1), и вместо этого он дал как (2, 2, 2, 2) или другие формы.

z1 = tf.assign(z1, tf.reshape(tf.gather(ktop[0, 0, 0, :], [indices[0, 0, 0, :]]), [2, 2]))
z2 = tf.assign(z2, tf.reshape(tf.gather(ktop[0, 0, 1, :], [indices[0, 0, 1, :]]), [2, 2]))
z3 = tf.assign(z3, tf.reshape(tf.gather(ktop[0, 1, 0, :], [indices[0, 1, 0, :]]), [2, 2]))
z4 = tf.assign(z4, tf.reshape(tf.gather(ktop[0, 1, 1, :], [indices[0, 1, 1, :]]), [2, 2]))

z = tf.concat([[z1, z2], [z3, z4]], 0)

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

В конце концов я нашел ответ, который последователи TENSORFLOW не воспроизводили до сих пор. Для возврата из top_k к изображению мы должны использовать функцию deep_to_space:

output_image = tf.depth_to_space ( output_image, 2, не Name = None, data_format = 'NHWC' )

0 голосов
/ 25 июня 2018

В отсутствие четкого объяснения того, как вы хотите перейти от тензоров 2x2x4 к 4x4x1, я могу только предложить следующее:

img_out = tf.reshape(ktop, [-1, 4, 4, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...