Значения пикселей изменяются при загрузке изображения с помощью предварительной обработки TensorFlow Keras

#tensorflow #keras #deep-learning #tensorflow-datasets #preprocessor

#tensorflow #keras #глубокое обучение #tensorflow-наборы данных #препроцессор

Вопрос:

Я использую функцию tf.keras.preprocessing.image_dataset_from_directory(), и когда я проверяю содержимое загруженного изображения, я вижу, что оно содержит случайные значения пикселей, несовместимые с исходным изображением.

Вот как я называю функцию:

 ds = tf.keras.preprocessing.image_dataset_from_directory(
    images_path,
    label_mode=None,
    shuffle=False,
    seed=None,
    image_size=(input_height, input_width),
    batch_size=batch_size
)
  

Затем я выбираю первый элемент набора данных следующим образом:

 it = iter(ds)
img = next(it).numpy()
  

Результирующее изображение содержит значения типа 164.3462, что не имеет смысла, поскольку исходный файл изображения содержит только целые числа в качестве значений пикселей. Если есть преобразование в float32, я бы ожидал, что все пиксели будут иметь .0 в качестве десятичной части их значения.

Я что-то упускаю? Я просто хотел бы загрузить свои изображения с исходными значениями или с исходными значениями, за которыми следует .0 в случае, если требуется float32.

Что не так?

Ответ №1:

Чтобы использовать исходные значения, используйте «ближайший» в качестве интерполяции для изменения размера изображения.

 ds = tf.keras.preprocessing.image_dataset_from_directory(
    images_path,
    label_mode=None,
    shuffle=False,
    seed=None,
    interpolation='nearest',
    image_size=(input_height, input_width),
    batch_size=batch_size
)
  

Ответ №2:

Это потому image_dataset_from_directory bilinear , что при попытке изменить размер изображения используется интерполяция (input_height, input_width) по умолчанию. Проверьте эту ссылку для других вариантов методов интерполяции.

Комментарии:

1. Спасибо! Я поддержу это, как только у меня будет достаточно репутации для этого.