Как использовать функцию увеличения изображения cv2 с tenorflow tf.data.Dataset? - PullRequest
2 голосов
/ 27 марта 2020

Я использую tf.data.Dataset для создания своего набора данных и тренирую CNN с керасом. Мне нужно наложить маски на изображения, и маска зависит от формы изображения, здесь нет предопределенных координат пикселей.

При поиске ответа по inte rnet я обнаружил, что в TensorFlow есть 2 способа доступа к фигурам изображений (во время обучения):

  1. Используя активное выполнение (которое в моем случае не включено по умолчанию, я использую tf v 12.0)

  2. Использование сеанса

I не хочу использовать нетерпеливое выполнение, потому что оно замедляет обучение, и не может использовать сеанс, потому что я тренируюсь и тестирую CNN, используя Keras (я передаю данные в model.train(), используя итераторы tf.data.Dataset).

Как следствие, у меня нет возможности узнать формы изображений, и поэтому я не могу получить доступ к указанным c пикселям для увеличения данных.

Я написал функцию с использованием OpenCV (cv2), которая применяет маски. Есть ли способ интегрировать его с конвейером данных TensorFlow?

EDIT : я нашел решение. Я использовал tf.py_fun c, чтобы обернуть python функции

Ответы [ 2 ]

1 голос
/ 27 марта 2020

ПРИМЕЧАНИЕ : так как вам нужно увеличить изображение, я подумал о предоставлении некоторой информации о различных библиотеках увеличения изображений. Это не показывает, как добавить функцию OpenCV в ваш конвейер tfdata. Но, если ваши требования достаточно стандартны, вы можете использовать один из них:

  • tf.keras.preprocessing.image.ImageDataGenerator
  • imaug
  • albumentations

Увеличение данных в Python

  1. Пакет: albumentations
    библиотека: внешняя
    url: Python albumentations библиотека

  2. Пакет: imaug: звезда:
    библиотека: external
    url: Python imaug библиотека

  3. Пакет: tf.keras.preprocessing.image.ImageDataGenerator
    библиотека : external
    url: Pyhon - TensorFlow ImageDataGenerator library

Примеры

  1. Пример (ы) / использование albumentations.

  2. Пример (ы) / использование imaug.

  3. Пример (ы) / использование tf.keras.preprocessing.image.ImageDataGenerator.

0 голосов
/ 29 марта 2020

Вы можете использовать map для преобразования элементов вашего набора данных. Затем вы можете использовать tf.py_function, чтобы обернуть вашу функцию cv2 в операцию tf, которая выполняется с нетерпением. В tenorflow 1.x вы можете использовать tf.py_func, но поведение немного другое. См. tf.py_function документацию для получения дополнительной информации.

Итак, в TF-2.x это будет выглядеть примерно так:

def cv2_func(image, label):
    # your code goes here

def tf_cv2_func(image, label):
    [image, label] = tf.py_function(cv2_func, [image, label], [tf.float32, tf.float64])
    return image, label

train_ds = train_ds.shuffle(BUFFER_SIZE).map(tf_cv2_func).batch(BATCH_SIZE)
...