Keras ImageDataGenerator width_shift_range перемещается вертикально, несмотря на правильную форму ввода (H, W, C)Python

Программы на Python
Ответить
Anonymous
 Keras ImageDataGenerator width_shift_range перемещается вертикально, несмотря на правильную форму ввода (H, W, C)

Сообщение Anonymous »

У меня возникла очень странная проблема с Keras ImageDataGenerator.
У меня есть альбомное изображение с формой (1056, 2000, 3).
  • Высота (ось 0): 1056
  • Ширина (Ось 1): 2000
Когда я использую plt.imshow(), оси отображаются правильно: ось Y доходит до 1056, а ось X до 2000. В моем Keras image_data_format установлено значение "channels_last".
Проблема: Когда я устанавливаю width_shift_range=0.4, изображение смещается по вертикали (вверх и вниз), а не по горизонтали. И наоборот, когда я устанавливаю height_shift_range=0.4, изображение смещается по горизонтали (влево и вправо).
Похоже, что Keras неправильно сопоставляет ширину с осью 0 и высоту с осью 1, хотя входной массив соответствует стандартному формату (H, W, C), и imshow отображает его правильно.
Вот мой фрагмент кода:

Код: Выделить всё

import cv2
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Image shape is (1056, 2000, 3)
img = cv2.imread('my_image.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

def show_aug_image(img, generator, n_img=4):
img_batch = np.expand_dims(img, axis=0)

generator.fit(img_batch)
gen_iter = generator.flow(img_batch)

fig, axes = plt.subplots(1, n_img, figsize=(24, 8))

for i in range(n_img):
aug_batch = next(gen_iter)
print(aug_batch.shape)
aug = np.squeeze(aug_batch)
print(aug.shape)
aug = aug.astype('int')
axes[i].imshow(aug)

print(img_batch.shape)

# This shifts the image UP/DOWN (Vertically)
gen = ImageDataGenerator(width_shift_range=0.4, fill_mode='constant', cval=0)
show_aug_image(img, gen)

# This shifts the image LEFT/RIGHT (Horizontally)
# gen = ImageDataGenerator(height_shift_range=0.4, fill_mode='constant', cval=0)
# show_aug_image(img, gen)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)

введите описание изображения здесь
Окружающая среда:
версия tensorflow: 2.20.0
версия Keras: 3.13.2
версия Python: 3.12.9
ОС: окно 11
Я уже проверил tf.keras.backend.image_data_format() и подтверждается как «channels_last». Почему ImageDataGenerator меняет поведение сдвигов ширины и высоты? Это известная ошибка для изображений с широким соотношением сторон?
Будем благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/798 ... orrect-inp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»