tf.keras.preprocessing.image.ImageDataGenerator random_transform не выполняет масштабирование - PullRequest
0 голосов
/ 02 апреля 2020

Я использую colab, и версия tf '2.2.0-rc2'. Использование tf.keras.preprocessing.image.ImageDataGenerator для выполнения одного случайного преобразования с использованием. random_transform для одного изображения не масштабирует его (с 1/255.) Фрагмент кода:

import tensorflow as tf
import PIL

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
img = PIL.Image.open("my_image.jpg")
img = img.resize((224, 224), PIL.Image.BICUBIC)
img_t = img_gen.random_transform(np.array(img))

img_t по-прежнему тензор с диапазоном [0, 255] вместо [0.0, 1.0].

Это по замыслу или это ошибка? Я не помню поведение до tenorflow 2.0 (я, вероятно, никогда не использую его таким образом).

Примечание: я не вижу проблем, если использую .flow или .flow_from_directory и их генераторы.

1 Ответ

1 голос
/ 02 апреля 2020

Мне кажется, что это имеет смысл. Методы flow или flow_from_* и random_transform() преобразуют данные по-разному.

  • Методы flow() будут принимать конфигурацию / преобразования, предоставленные ImageDataGenerator, и выплевывать данные в соответствии с этими параметрами

  • random_transform() предлагает конфигурацию случайного преобразования (основанную на параметрах, которые вы установили в __init__ вашего ImageDataGenerator, и примените это к данным. Это означает, что ваш rescale параметр может быть переопределен по умолчанию.

Более подробная информация о random_transform()

Я сам раньше не использовал random_tranform(). Но, похоже, это как это работает.

Допустим, мы определили следующее ImageDataGenerator

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1./255, vertical_flip=True, brightness_range=(-0.1,0.1)
)

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

print(img_gen.get_random_transform((1,224,224,3)))

который даст разные случайные значения для vertical_flip и brightness. Как вы видите, rescale, по-видимому, не случайный параметр, который они рассматривают. Это объясняет, почему вы не получили ожидаемый результат.

...