Image Preprocessing

[source]

ImageDataGenerator class

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, brightness_range=None, shear_range=0.0, zoom_range=0.0, channel_shift_range=0.0, fill_mode='nearest', cval=0.0, horizontal_flip=False, vertical_flip=False, rescale=None, preprocessing_function=None, data_format='channels_last', validation_split=0.0, interpolation_order=1, dtype='float32')

使用实时数据增强生成一批张量图像数据. 数据将被循环(分批).

Arguments

  • featurewise_center :布尔值. 将数据集上的输入均值设置为0(按功能).
  • samplewise_center :布尔值. 将每个样本均值设置为0.
  • featurewise_std_normalization :布尔值. 按功能将输入除以数据集的std.
  • samplewise_std_normalization :布尔值. 将每个输入除以其std.
  • zca_epsilon :用于ZCA美白的epsilon. 默认值为1e-6.
  • zca_whitening :布尔值. 应用ZCA美白.
  • rotation_range :整数. 随机旋转的度数范围.
  • width_shift_range :浮点型,一维数组或int
    • 浮点数:如果<1,则为总宽度的分数;如果> = 1,则为像素的总宽度.
    • 一维数组状:数组中的随机元素.
    • int:间隔(-width_shift_range, +width_shift_range)整数像素数
    • width_shift_range=2可能的值是整数[-1, 0, +1] ,与width_shift_range=[-1, 0, +1] [-1, 0, +1]时相同,而width_shift_range=1.0可能的值在[-1.0,+ 1.0).
  • height_shift_range :浮点型,一维数组或int
    • 浮点数:如果<1,则为总高度的分数;如果> = 1,则为像素的总高度.
    • 一维数组状:数组中的随机元素.
    • int:间隔(-height_shift_range, +height_shift_range)整数的像素数
    • height_shift_range=2 [-1, 0, +1]相同,在height_shift_range=2可能的值是整数[-1, 0, +1] height_shift_range=[-1, 0, +1] ,而在height_shift_range=1.0可能值是浮点数,在区间[-1.0,+ 1.0).
  • bright_range :元组或两个浮点数的列表. 从中选择亮度偏移值的范围.
  • shear_range :浮动. 剪切强度(逆时针剪切角,以度为单位)
  • zoom_range :浮动或[lower,upper]. 随机缩放的范围. 如果是浮点型,则[lower, upper] = [1-zoom_range, 1+zoom_range] .
  • channel_shift_range :浮动. 随机通道移位的范围.
  • fill_mode: One of {"constant", "nearest", "reflect" or "wrap"}. Default is 'nearest'. Points outside the boundaries of the input are filled according to the given mode:
    • '常量':kkkkkkkk | abcd | kkkkkkkk(cval = k)
    • 'nearest':aaaaaaaaaa | abcd | dddddddd
    • 'reflect':abcddcba | abcd | dcbaabcd
    • 'wrap':abcdabcd | abcd | abcdabcd
  • cval :浮点型或整数型 . 当fill_mode = "constant"时,用于边界之外的点的值.
  • horizo​​ntal_flip :布尔值. 水平随机翻转输入.
  • vertical_flip :布尔值. 垂直随机翻转输入.
  • 重新缩放 :重新缩放因子. 默认为无. 如果为None或0,则不应用任何缩放比例,否则,将数据乘以提供的值(应用所有其他转换之后).
  • preprocessing_function :将应用于每个输入的函数. 该功能将在调整图像大小和扩大后运行. 该函数应采用一个参数:一个图像(等级为3的Numpy张量),并应输出具有相同形状的Numpy张量.
  • data_format :图像数据格式," channels_first"或" channels_last". " channels_last"模式意味着图像应具有形状(samples, height, width, channels) ," channels_first"模式意味着图像应具有形状(samples, channels, height, width) . 它默认为在~/.keras/keras.json配置文件中找到的image_data_format值. 如果您从未设置,那么它将是" channels_last".
  • validation_split :浮动. 保留供验证的图像部分(严格在0和1之间).
  • DTYPE:D型细胞要用于产生阵列.

Examples

使用.flow(x, y)示例:

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)

datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(x_train)

# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
                    steps_per_epoch=len(x_train) / 32, epochs=epochs)

# here's a more "manual" example
for e in range(epochs):
    print('Epoch', e)
    batches = 0
    for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):
        model.fit(x_batch, y_batch)
        batches += 1
        if batches >= len(x_train) / 32:
            # we need to break the loop by hand because
            # the generator loops indefinitely
            break

使用.flow_from_directory(directory)示例:

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(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        'data/validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

一起转换图像和遮罩的示例.

# we create two instances with the same arguments
data_gen_args = dict(featurewise_center=True,
                     featurewise_std_normalization=True,
                     rotation_range=90,
                     width_shift_range=0.1,
                     height_shift_range=0.1,
                     zoom_range=0.2)
image_datagen = ImageDataGenerator(**data_gen_args)
mask_datagen = ImageDataGenerator(**data_gen_args)

# Provide the same seed and keyword arguments to the fit and flow methods
seed = 1
image_datagen.fit(images, augment=True, seed=seed)
mask_datagen.fit(masks, augment=True, seed=seed)

image_generator = image_datagen.flow_from_directory(
    'data/images',
    class_mode=None,
    seed=seed)

mask_generator = mask_datagen.flow_from_directory(
    'data/masks',
    class_mode=None,
    seed=seed)

# combine generators into one which yields image and masks
train_generator = zip(image_generator, mask_generator)

model.fit_generator(
    train_generator,
    steps_per_epoch=2000,
    epochs=50)

使用.flow_from_dataframe(dataframe, directory,示例:


train_df = pandas.read_csv("./train.csv")
valid_df = pandas.read_csv("./valid.csv")

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_dataframe(
        dataframe=train_df,
        directory='data/train',
        x_col="filename",
        y_col="class",
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = test_datagen.flow_from_dataframe(
        dataframe=valid_df,
        directory='data/validation',
        x_col="filename",
        y_col="class",
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

ImageDataGenerator methods

apply_transform

apply_transform(x, transform_parameters)

根据给定的参数将变换应用于图像.

Arguments

  • x :3D张量,单个图像.
  • transform_parameters :带有字符串的字典-描述转换的参数对. 当前,使用字典中的以下参数:
    • 'theta' :浮动. 旋转角度(度).
    • 'tx' :浮动. 在x方向上移动.
    • 'ty' :浮动. 沿y方向移动.
    • 'shear' :浮动. 剪切角,以度为单位.
    • 'zx' :浮动. 沿x方向缩放.
    • 'zy' :浮动. 沿y方向放大.
    • 'flip_horizontal' :布尔值. 水平翻转.
    • 'flip_vertical' :布尔值. 垂直翻转.
    • 'channel_shift_intencity' :浮动. 通道移位强度.
    • 'brightness' :浮动. 亮度移动强度.

Returns

输入的变形版本(相同形状).


fit

fit(x, augment=False, rounds=1, seed=None)

使数据生成器适合一些样本数据.

这将基于样本数据数组来计算与依赖于数据的转换有关的内部数据统计信息.

仅当featurewise_centerfeaturewise_std_normalizationzca_whitening设置为True时才需要.

Arguments

  • x :样本数据. 应该具有等级4.对于灰度数据,通道轴应该具有值1;对于RGB数据,它应该具有值3;对于RGBA数据,它应该具有值4.
  • Enhance :布尔值(默认值:False). 是否适合随机扩增的样本.
  • rounds :整数(默认值:1). 如果使用数据扩充( augment=True ),则这是要使用的数据上有多少个扩充.
  • seed :Int(默认值:无). 随机种子.

flow

flow(x, y=None, batch_size=32, shuffle=True, sample_weight=None, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None)

获取数据和标签数组,生成一批扩充数据.

Arguments

  • x :输入数据. Numpy数组,等级4或元组. 如果是元组,则第一个元素应包含图像,第二个元素应包含另一个numpy数组或numpy数组列表,这些数组无需任何修改即可传递到输出. 可用于将模型的其他数据与图像一起提供. 对于灰度数据,图像阵列的通道轴应具有值1,对于RGB数据,其值应为3,对于RGBA数据,其值应为4.
  • y :标签.
  • batch_size :整数(默认值:32).
  • shuffle :布尔值(默认值:True).
  • sample_weight :样本权重.
  • seed :Int(默认值:无).
  • save_to_dir :无或str(默认值:无). 这使您可以有选择地指定一个目录,将生成的增强图片保存到该目录中(用于可视化您的工作).
  • save_prefix :Str(默认: '' ). 用于已保存图片文件名的前缀(仅在设置了save_to_dir情况下才相关).
  • save_format :" png"," jpeg"之一(仅在设置了save_to_dir时才相关). 默认值:" png".
  • subset: Subset of data ("training" or "validation") if validation_split is set in ImageDataGenerator.

Returns

产生(x, y)元组的Iterator (x, y)其中x是图像数据的numpy数组(在单个图像输入的情况下)或numpy数组的列表(在具有附加输入的情况下), y是numpy的numpy数组相应的标签. 如果'sample_weight'不为None,则产生的元组的格式为(x, y, sample_weight) . 如果y为None,则仅返回numpy数组x .


flow_from_dataframe

flow_from_dataframe(dataframe, directory=None, x_col='filename', y_col='class', weight_col=None, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None, interpolation='nearest', validate_filenames=True)

获取数据框和目录的路径,并生成一批增强/标准化数据.

可以找到一个简单的教程 here.

Arguments

  • dataframe :熊猫数据帧,其中包含相对于字符串列中图像的目录的相对directory路径(如果directory为None,则为绝对路径). 它应包括其他列,具体取决于class_mode

    • 如果class_mode"categorical" (默认值),则必须在y_col列中包含每个图像的类别. 如果是单个类,则列中的值可以是字符串/列表/元组;如果是多个类,则列中的值可以是列表/元组.
    • 如果class_mode"binary""sparse"则必须包括给定的y_col列,并将类值作为字符串.
    • 如果class_mode"raw""multi_output" ,则应包含

    y_col指定的列.

    • 如果class_mode"input"或" None不需要额外的列.
    • directory :字符串,要从中读取图像的目录的路径. 如果为None ,则x_col列中的数据应为绝对路径.
    • x_col :字符串, dataframe中包含文件名的列(如果directoryNone则为绝对路径).
    • y_col :字符串或列表, dataframe框中具有目标数据的列.
    • weight_col :字符串, dataframe中包含样本权重的列. 默认值: None .
    • target_size :整数元组(height, width) ,默认值: (256, 256) . 找到的所有图像的尺寸将被调整大小.
    • color_mode :"灰度"," rgb"," rgba"之一. 默认值:" rgb". 图像将被转换为具有1个或3个颜色通道.
    • classes :可选的类列表(例如['dogs', 'cats'] ). 默认值:无. 如果未提供,则会从y_col推断类列表, y_col将映射到标签索引(为字母数字). 包含从类名到类索引的映射的字典可以通过属性class_indices获得.
    • class_mode :"二进制","分类","输入"," multi_output","原始",稀疏"或"无"之一.默认值:"分类".产生目标的模式:
    • "binary" :二进制标签的一维numpy数组,
    • "categorical" :一键编码标签的2D numpy数组. 支持多标签输出.
    • "input" :与输入图像相同的图像(主要用于自动编码器),
    • "multi_output" :列出不同列的值,
    • "raw"y_col列中的numpy值数组,
    • "sparse" :整数标签的一维numpy数组,
    • None ,不返回任何目标(生成器将仅生成一批图像数据,这对于在model.predict_generator()使用很有用).
    • batch_size :数据批次的大小(默认值:32).
    • 随机播放 :是否随机播放数据(默认值:True)
    • 种子 :用于混洗和转换的可选随机种子.
    • save_to_dir :无或str(默认值:无). 这使您可以有选择地指定一个目录,将生成的增强图片保存到该目录中(用于可视化您的工作).
    • save_prefix :str. 用于已保存图片文件名的前缀(仅在设置了save_to_dir情况下才相关).
    • save_format :" png"," jpeg"之一(仅在设置了save_to_dir时才相关). 默认值:" png".
    • follow_links :是否遵循类子目录内的符号链接(默认值:False).
    • 子集 :数据的子集( "training""validation" )如果validation_split在设置ImageDataGenerator .
    • 插值 :如果目标尺寸与加载的图像不同,则使用插值方法对图像重新采样. 支持的方法是"nearest""bilinear""bicubic" . 如果安装了PIL 1.1.3或更高版本,则还支持"lanczos" . 如果安装了PIL 3.4.0或更高版本,则还支持"box""hamming" . 默认情况下,使用"nearest" .
    • validate_filenames :布尔值,是否验证x_col图像文件名. 如果为True ,则将忽略无效图像. 禁用此选项可以加快该功能的执行速度. 默认值: True .

Returns

一个产生(x, y)元组的DataFrameIterator (x, y)其中x是一个numpy数组,其中包含一批形状为(batch_size, *target_size, channels)的图像,而y是相应标签的numpy数组.


flow_from_directory

flow_from_directory(directory, target_size=(256, 256), color_mode='rgb', classes=None, class_mode='categorical', batch_size=32, shuffle=True, seed=None, save_to_dir=None, save_prefix='', save_format='png', follow_links=False, subset=None, interpolation='nearest')

采取目录路径并生成批量扩充数据.

Arguments

  • directory :字符串,目标目录的路径. 每个类应包含一个子目录. 每个子目录目录树中的任何PNG,JPG,BMP,PPM或TIF图像都将包含在生成器中. 有关更多详细信息,请参见此脚本 .
  • target_size :整数元组(height, width) ,默认值: (256, 256) . 找到的所有图像的尺寸将被调整大小.
  • color_mode :"灰度"," rgb"," rgba"之一. 默认值:" rgb". 图像将被转换为具有1、3或4个通道.
  • classes :类子目录的可选列表(例如['dogs', 'cats'] ). 默认值:无. 如果没有提供,类列表将被自动从子目录名称/结构下推断directory ,其中每个子目录将被视为不同的类(的类的顺序,其中将映射到标签指数,将字母数字). 包含从类名到类索引的映射的字典可以通过属性class_indices获得.
  • class_mode :"分类","二进制","稀疏","输入"或"无"之一. 默认值:"类别". 确定返回的标签数组的类型:
    • "类别"将是2D一键编码标签,
    • " binary"将是一维二进制标签," sparse"将是一维整数标签,
    • "输入"将是与输入图像相同的图像(主要用于自动编码器).
    • 如果为None,则不返回任何标签(生成器将仅生成一批图像数据,这对于与model.predict_generator()一起使用很有用). 请注意,在class_mode为None的情况下,数据仍需要驻留在directory的子目录中才能正常工作.
  • batch_size :数据批次的大小(默认值:32).
  • shuffle :是否将数据随机播放(默认值:True)如果设置为False,则按字母数字顺序对数据进行排序.
  • 种子 :用于随机排列和转换的可选随机种子.
  • save_to_dir :无或str(默认值:无). 这使您可以有选择地指定一个目录,将生成的增强图片保存到该目录中(用于可视化您的工作).
  • save_prefix :Str. 用于已保存图片文件名的前缀(仅在设置了save_to_dir情况下才相关).
  • save_format :" png"," jpeg"之一(仅在设置了save_to_dir时才相关). 默认值:" png".
  • follow_links :是否遵循类子目录内的符号链接(默认值:False).
  • 子集 :数据的子集( "training""validation" )如果validation_split在设置ImageDataGenerator .
  • 插值 :如果目标尺寸与加载的图像不同,则使用插值方法对图像重新采样. 支持的方法是"nearest""bilinear""bicubic" . 如果安装了PIL 1.1.3或更高版本,则还支持"lanczos" . 如果安装了PIL 3.4.0或更高版本,则还支持"box""hamming" . 默认情况下,使用"nearest" .

Returns

DirectoryIterator产生元组(x, y) ,其中x是一个numpy数组,其中包含一批形状为(batch_size, *target_size, channels)的图像,而y是相应标签的numpy数组.


get_random_transform

get_random_transform(img_shape, seed=None)

生成用于转换的随机参数.

Arguments

  • 种子 :随机种子.
  • img_shape :整数元组. 转换后的图像的形状.

Returns

包含描述转换的随机选择参数的字典.


random_transform

random_transform(x, seed=None)

将随机变换应用于图像.

Arguments

  • x :3D张量,单个图像.
  • 种子 :随机种子.

Returns

输入的随机转换版本(相同形状).


standardize

standardize(x)

Applies the normalization configuration in-place to a batch of inputs.

由于该功能主要在内部用于对图像进行标准化处理并将其馈送到您的网络,因此x就地更改了. 如果要创建x的副本,则会产生巨大的性能成本. 如果要应用此方法而不更改就地输入,则可以在以下情况下调用创建副本的方法:

standarize(np.copy(x))

Arguments

  • x :要标准化的输入批次.

Returns

输入已标准化.