[英]Random orthogonal, 90 degrees rotation with ImageDataGenerator
我使用以下代码用发票图像训练我的 CNN model。
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True
)
test_datagen = ImageDataGenerator(rescale = 1. / 255)
train_generator = train_datagen.flow_from_directory(train_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size =(img_width, img_height),
batch_size = batch_size)
model.fit_generator(train_generator,
steps_per_epoch = nb_train_samples // batch_size,
epochs = epochs, validation_data = validation_generator,
validation_steps = nb_validation_samples // batch_size)
问题是我在训练数据集中只使用了直立图像。 我所有的图像都如下图所示:
训练后,当我想发送如下图像时,我的 model 无法预测其正确的 class。
如下所示,我将 Horizontal_flip = True 发送到ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale = 1. / 255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True
)
如何更改我的代码,以便它可以预测甚至翻转的图像。 或者我应该在我的训练数据集中使用手动翻转的图像?
我会用ImageDataGenerator
随机旋转图像。 只需指定以下参数:
旋转范围:诠释。 随机旋转的度数范围。
或者,您可以将预处理 function 传递给ImageDataGenerator
,从而为您提供更大的灵活性。
def orthogonal_rot(image):
return np.rot90(image, np.random.choice([-1, 0, 1]))
train_generator = ImageDataGenerator(
preprocessing_function=orthogonal_rot)
此 function 将旋转 -90、0 或 90 度。
如果您只需要直角旋转,可以通过使用 keras apply_affine_transform
function 的预处理 function 进行设置。 然后,您可以通过preprocessing_function
参数将预处理 function 传递给ImageDataGenerator
。 使用这种方法,您还可以使用相同的fill_mode
进行右旋转和数据生成。
文档 apply_affin_transform
文档 ImageDataGenerator
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing.image import apply_affine_transform
FILL_MODE = 'nearest'
def right_angle_rotate(input_image):
angle = random.choice([0, 90, 180, 270])
if angle != 0:
input_image = apply_affine_transform(
input_image, theta=angle, fill_mode=FILL_MODE)
return input_image
data_gen = ImageDataGenerator(
fill_mode=FILL_MODE,
preprocessing_function=right_angle_rotate)
但是,如果您的输入图像是矩形图像,则numpy.rot90
function 将导致异常,因为在 90° 和 270° 旋转后输入尺寸将不匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.