欢迎访问宙启技术站
智能推送

Python中ImageDataGenerator()的图像数据生成器使用方法

发布时间:2023-12-26 10:48:19

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()可以方便地对图像进行各种随机的变换操作,并得到增强后的图像。