Подтвердить что ты не робот

Операции с изображениями TensorFlow для партий

В TensorFlow имеется ряд операций с изображениями, используемых для искажения входных изображений во время обучения, например. tf.image.random_flip_left_right(image, seed=None) и tf.image.random_brightness(image, max_delta, seed=None) и несколько других.

Эти функции предназначены для одиночных изображений (т.е. трехмерных тензоров с формой [высота, ширина, цветной канал]). Как я могу заставить их работать с партией изображений (т.е. 4-D тензоры с формой [партия, высота, ширина, цветной канал])?

Будет полезен рабочий пример!

4b9b3361

Ответ 1

Одной из возможностей является использование недавно добавленного tf.map_fn() для применения оператора одиночного изображения к каждому элементу партии.

result = tf.map_fn(lambda img: tf.image.random_flip_left_right(img), images)

Это эффективно создает тот же график, что и keveman предлагает, но он может быть более эффективным для больших размеров пакета, используя поддержку TensorFlow для циклов.

Ответ 2

Вы можете вызвать операцию изображения в цикле и объединить результат. Например:

transformed_images = []
for i in range(batch_size):
  transformed_images.append(
    tf.expand_dims(tf.image.random_flip_left_right(image[i, :, :, :]), 0))
retsult = tf.concat(0, transformed_images)

Ответ 3

TL;DR: вы можете создавать очереди, определять данные для чтения и обработки для одиночного элемента очереди, а не делать партию - все это с помощью методов TF.

Я не уверен, как это работает, но если вы используете очереди и создаете партии и читаете изображения с помощью методов тензорного потока, вы можете работать с пакетом как с одним изображением.

Я еще не тестировал его на больших наборах данных и не знаю, насколько он хорош (скорость, потребление памяти и т.д.). Может быть, теперь лучше создать партию самостоятельно.

Я видел это в примере cifar10. Вы можете увидеть это здесь https://github.com/tensorflow/tensorflow/tree/r0.10/tensorflow/models/image/cifar10

Ответ 4

Вы можете использовать tf.reverse для имитации tf.image.random_flip_left_right и tf.image.random_flip_up_down на четырехмерных тензорах с формой [партия, высота, ширина, канал].