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 version : 2.20.0
keras version : 3.13.2
python version : 3.12.9
OS : window 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»