keras数据增广并保存到本地文件夹

当需要对指定文件夹下的图片进行数据增广时,使用keras的ImageDataGenerator类的flow_from_directory()方法可快速的实现

1.首先实例化ImageDataGenerator对象以自己想要的属性

 img_datagen = keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,  
                                             samplewise_center=False, 
                                             featurewise_std_normalization=False, 
                                             samplewise_std_normalization=False, 
                                             zca_whitening=False, 
                                             zca_epsilon=1e-06, 
                                             rotation_range=0, 
                                             width_shift_range=0.0, 
                                             height_shift_range=0.0, 
                                             shear_range=0.0, 
                                             zoom_range=0.0, 
                                             horizontal_flip=False, 
                                             vertical_flip=False, 
                                             rescale=None, )

对于数据增强主要可能用到的属性如下,按自己的需求设置即可:

featurewise_center: 布尔值。将输入数据的均值设置为 0,逐特征进行。

samplewise_center: 布尔值。将每个样本的均值设置为 0。

featurewise_std_normalization: Boolean. 布尔值。将输入除以数据标准差,逐特征进行。

samplewise_std_normalization: 布尔值。将每个输入除以其标准差。

zca_epsilon: ZCA 白化的 epsilon 值,默认为 1e-6。

zca_whitening: 布尔值。是否应用 ZCA 白化。

rotation_range: 整数。随机旋转的度数范围。

width_shift_range: 浮点数、一维数组或整数

height_shift_range: 浮点数、一维数组或整数

shear_range: 浮点数。剪切强度(以弧度逆时针方向剪切角度)。

zoom_range: 浮点数 或 [lower, upper]。随机缩放范围。

channel_shift_range: 浮点数。随机通道转换的范围。

horizontal_flip: 布尔值。随机水平翻转。

vertical_flip: 布尔值。随机垂直翻转。

2. 调用flow_from_directory()函数

train_generator = train_datagen.flow_from_directory(
            directory = img_path,
            target_size=(224, 224),
            batch_size= batch_size,
            save_to_dir= "./data/test_data/",
            class_mode= class_mode)

可选参数如下

directory: 目标目录的路径。每个类应该包含一个子目录。任何在子目录树下的 PNG, JPG, BMP, PPM 或 TIF 图像,都将被包含在生成器中。

target_size: 整数元组 (height, width),默认:(256, 256)。所有的图像将被调整到的尺寸。

color_mode: “grayscale”, “rbg” 之一。默认:“rgb”。图像是否被转换成 1 或 3 个颜色通道。

classes: 可选的类的子目录列表(例如 [‘dogs’, ‘cats’])。默认:None。如果未提供,类的列表将自动从 directory 下的 子目录名称/结构 中推断出来,其中每个子目录都将被作为不同的类(类名将按字典序映射到标签的索引)。包含从类名到类索引的映射的字典可以通过 class_indices 属性获得。

class_mode: “categorical”, “binary”, “sparse”, “input” 或 None 之一。对于只进行数据增强,设置为None.

batch_size: 一批数据的大小(默认 32)。

save_to_dir: None 或 字符串(默认 None)。图片保存目录!!!

save_prefix: 字符串。 保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。

save_format: “png”, “jpeg” 之一(仅当 save_to_dir 设置时可用)。默认:“png”。

interpolation: 在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。

3.小例子

注意事项: 1:class_mode设置为None,只生成图像 2:一定要调用生成器,写了个for循环一直调用(但是好像不会停,可以写个计数让它停下啦)

import keras
from keras_preprocessing.image import ImageDataGenerator

def generate_from_derictory(img_path,batch_size,class_mode = None):
    train_datagen = ImageDataGenerator(
            rescale=1./255,
            shear_range=0.2,
            zoom_range=0.2,
            featurewise_center=True,
            samplewise_center= True,
            featurewise_std_normalization= True,
            samplewise_std_normalization= True,
            zca_whitening= True,
            zca_epsilon=1e-06,
            rotation_range=0.3,
            width_shift_range=0.3,
            height_shift_range=0.3,
            brightness_range=None,
            channel_shift_range=0.2,
            fill_mode='nearest',
            cval=0.0,
            horizontal_flip=True,
            vertical_flip= True,
            validation_split=0.0
    )

    train_generator = train_datagen.flow_from_directory(
            directory=img_path,
            target_size=(224, 224),
            batch_size= batch_size,
            save_to_dir= "./data/aug_data/",
            class_mode= class_mode)
    return train_generator

data_gen = generate_from_derictory('./data/train_data/',64,None)
for im in data_gen:
    print("do some thing")

你可能感兴趣的:(计算机视觉,机器学习)