Операции с изображениями TensorFlow для партий
В TensorFlow имеется ряд операций с изображениями, используемых для искажения входных изображений во время обучения, например. tf.image.random_flip_left_right(image, seed=None)
и tf.image.random_brightness(image, max_delta, seed=None)
и несколько других.
Эти функции предназначены для одиночных изображений (т.е. трехмерных тензоров с формой [высота, ширина, цветной канал]). Как я могу заставить их работать с партией изображений (т.е. 4-D тензоры с формой [партия, высота, ширина, цветной канал])?
Будет полезен рабочий пример!
Ответы
Ответ 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 на четырехмерных тензорах с формой [партия, высота, ширина, канал].