Python中ImageDataGenerator()的图像数据生成器使用方法
ImageDataGenerator()是Keras中的一个图像数据生成器类,它用于实时数据扩充,扩充样本库。可以不从本地导入数据,而是通过对实时生成batch的方式,对数据进行各种随机的变换操作,从而生成更多的训练样本。本文将详细介绍ImageDataGenerator()的使用方法,并提供一个使用例子。
ImageDataGenerator()可以生成器一系列随机变换操作,包括旋转、缩放、平移、翻转等,从而对图像进行数据增强。其用法如下:
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rescale=1./255, # 归一化
rotation_range=10, # 随机旋转角度范围
width_shift_range=0.1, # 随机宽度偏移范围
height_shift_range=0.1, # 随机高度偏移范围
shear_range=0.1, # 随机剪切变换范围
zoom_range=0.1, # 随机缩放范围
horizontal_flip=True, # 水平翻转
vertical_flip=True, # 垂直翻转
fill_mode='nearest' # 填充模式
)
其中,各个参数的作用如下:
- rescale: 将彩色图像进行归一化,将RGB值由0-255转换为0-1。
- rotation_range: 随机旋转角度的范围。
- width_shift_range: 随机宽度偏移的范围,值为图片宽度的比例。
- height_shift_range: 随机高度偏移的范围,值为图片高度的比例。
- shear_range: 随机剪切变换的范围。
- zoom_range: 随机缩放的范围。
- horizontal_flip: 随机水平翻转。
- vertical_flip: 随机垂直翻转。
- fill_mode: 填充模式,可选“constant”、“nearest”、“reflect”或“wrap”。
接下来,我们使用一个示例来说明ImageDataGenerator()的使用方法:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from keras.preprocessing.image import ImageDataGenerator
# 加载图片
img_path = 'example.jpg'
img = Image.open(img_path)
plt.imshow(img)
plt.show()
# 转换为数组
x = np.asarray(img, dtype='float32')
x = np.expand_dims(x, axis=0) # 增加一个维度
# 创建一个生成器
datagen = ImageDataGenerator(
rescale=1./255, # 归一化
rotation_range=20, # 随机旋转角度范围
width_shift_range=0.2, # 随机宽度偏移范围
height_shift_range=0.2, # 随机高度偏移范围
shear_range=0.2, # 随机剪切变换范围
zoom_range=0.2, # 随机缩放范围
horizontal_flip=True, # 水平翻转
vertical_flip=True, # 垂直翻转
fill_mode='nearest' # 填充模式
)
# 生成增强后的图像
i = 0
for batch in datagen.flow(x, batch_size=1, save_to_dir='aug_images', save_prefix='aug', save_format='jpg'):
i += 1
if i > 20: # 生成20张增强后的图像
break
在上面的例子中,我们首先加载一张图片,并将其转换为数组。然后创建一个ImageDataGenerator对象,并设置各种参数。最后,使用flow方法将原始图像进行扩充生成20张增强后的图像,并保存到指定目录。
通过ImageDataGenerator()生成的增强图像将有一定的随机性,每次生成的图像都会略有不同。这样可以扩充样本库,提供更多的样本用于训练,提高模型的泛化能力。
总之,ImageDataGenerator()是Keras中一个非常实用的图像数据生成器类,可以用于数据增强和样本扩充。使用ImageDataGenerator()可以方便地对图像进行各种随机的变换操作,并得到增强后的图像。
