tensorflow中Keras ---图像预处理----tf.keras.preprocessing.image.ImageDataGenerator 类

这篇具有很好参考价值的文章主要介绍了tensorflow中Keras ---图像预处理----tf.keras.preprocessing.image.ImageDataGenerator 类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.源代码:

tf.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=None,
    validation_split=0.0,
    interpolation_order=1,
    dtype=None
)

2. 参数:

  • featurewise_center:布尔值,使输入数据集去中心化(均值为0),逐特征进行。
  • samplewise_center:布尔值,使输入数据的每个样本均值为0
  • featurewise_std_normalization:布尔值,将输入除以数据集的标准差以完成标准化, 按feature执行
  • samplewise_std_normalization:布尔值,将输入的每个样本除以其自身的标准差
  • zca_whitening:布尔值,对输入数据施加ZCA白化
  • zca_epsilon: ZCA使用的eposilon,默认1e-6
  • rotation_range:整数,图片随机转动的角度范围
  • width_shift_range:浮点数,一维数组或整数,图片宽度的某个比例,数据提升时图片水平偏移的幅度
  • float:如果<1,则除以总宽度的值,如果>=1,则为宽度像素值
  • 一维数组:数组中的随机元素
  • 整型:来自间隔(-width_shift_range,width_shift_range)之间的整数个像素
  • width_shift_range=2:可能值是整数[-1,0,1],与width_shift_range=[-1,0,1]相同,而当width_shfit_range=1.0时,可能值是半开区间[-1.0,1.0]之间的浮点数(后半句没有理解)。
  • height_shift_range:浮点数,图片高度的某个比例,数据提升时图片竖直偏移的幅度。具体含义与width_shift_range相同。
  • brightness_range:两个float组成的元组或列表。选择亮度值的范围
  • shear_range:浮点数,剪切强度(逆时针方向的剪切变换角度)
  • zoom_range:浮点数或[lower, upper]。随机缩放范围,如果是浮点数,[lower, upper] = [1-zoom_range, 1+zoom_range]
  • channel_shift_range:浮点数,随机通道转换的范围。
  • fill_mode: {"constant", "nearest", "reflect" or "wrap"} 之一。默认为'nearest'。输入边界以外的点根据给定的模式填充:
  • 'constant': kkkkkkkk|abcd|kkkkkkkk (cval=k)
  • 'nearest': aaaaaaaa|abcd|dddddddd
  • 'reflect': abcddcba|abcd|dcbaabcd
  • 'wrap': abcdabcd|abcd|abcdabcd
  • cval: 浮点数或整数。用于边界之外的点的值,当fill_mode = "constant"时。
  • horizontal_flip: 布尔值,随机水平翻转。
  • vertical_flip: 布尔值,随机垂直翻转。
  • rescale: 重缩放因子。默认为 None。如果是 None 或 0,不进行缩放,否则将数据乘以所提供的值(在应用任何其他转换之后)
  • preprocessing_function:该函数应用于每个输入上,在图像被resize和增强之后运行。该函数接收一个参数,一张图像(秩为3的numpy tensor),同样输出一个相同shape的Numpy tensor。
  • data_format:图像数据格式,{"channels_first", "channels_last"} 之一。"channels_last" 模式表示图像输入尺寸应该为(samples, height, width, channels),"channels_first" 模式表示输入尺寸应该为(samples, channels, height, width)。默认为 在 Keras 配置文件~/.keras/keras.json中的image_data_format值。如果你从未设置它,那它就是"channels_last"。
  • validation_split:浮点型。保留用于验证集的图像比例(严格在0,1之间)
  • dtype:生成数组使用的数据类型。

3. 使用ImageDataGenerator 类中的方法生成训练集和测试集:

flow: 

该方法输入数据(Numpy或元组形式)和标签(可选),返回一个迭代器,格式是元组(x,y)(x)(x,y,sample_weight)。该方法还可以指定样本输出路径及前缀,格式,用于保存增强处理后的图像。 

flow_from_dataframe:

输入数据为Pandas dataframe格式。返回生成(x, y) 元组的DataFrameIterator。

flow_from_directory:

获取图像路径,生成批量增强数据。该方法只需指定数据所在的路径,而无需输入numpy形式的数据,也无需输入标签值,会自动返回对应的标签值。返回一个生成(x, y)元组的DirectoryIterator

源码参数:

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

参数:

x: 输入数据。秩为 4 的 Numpy 矩阵或元组。如果是元组,第一个元素应该包含图像,第二个元素是另一个 Numpy 数组或一列 Numpy 数组,它们不经过任何修改就传递给输出。可用于将模型杂项数据与图像一起输入。对于灰度数据,图像数组的通道轴的值应该为 1,而对于 RGB 数据,其值应该为 3。
y:标签
batch_size:整型,默认32
shuffle:布尔型,默认True,是否混洗数据
sample_weight:样本权重
seed:默认None
save_to_dir:None 或 字符串(默认为 None)。这使您可以选择指定要保存的正在生成的增强图片的目录
save_prefix: 字符串(默认 ‘’)。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
save_format: "png", "jpeg" 之一(仅当 save_to_dir 设置时可用)。默认:“png”。
subset: 数据子集 ("training" 或 "validation"),如果 在 ImageDataGenerator 中设置了 validation_split。
返回值:
一个生成元组 (x, y) 的 Iterator,其中 x 是图像数据的Numpy 数组(在单张图像输入时),或 Numpy 数组列表(在额外多个输入时),y 是对应的标签的 Numpy 数组。如果 'sample_weight' 不是 None,生成的元组形式为(x, y, sample_weight)。如果 y 是 None, 只有 Numpy 数组 x 被返回。

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,
    **kwargs
)

参数:

dataframe: Pandas dataframe,一列为图像的文件名,另一列为图像的类别, 或者是可以作为原始目标数据多个列。
directory: 字符串,目标目录的路径,其中包含在 dataframe 中映射的所有图像。
x_col : 字符串,dataframe中包含目标图像文件夹的目录的列。
y_col: 字符串或字符串列表,dataframe中将作为目标数据的列。
has_ext: 布尔值,如果 dataframe[x_col] 中的文件名具有扩展名则为True,否则为 False。
target_size: 整数元组(height, width),默认为 (256, 256)。所有找到的图都会调整到这个维度。
color_mode: "grayscale", "rbg" 之一。默认:"rgb"。 图像是否转换为 1 个或 3 个颜色通道。
classes: 可选的类别列表 (例如, ['dogs', 'cats'])。默认:None。 如未提供,类比列表将自动从 y_col 中推理出来,y_col将会被映射为类别索引)。 包含从类名到类索引的映射的字典可以通过属性class_indices获得。
class_mode: "categorical", "binary", "sparse", "input", "other" or None之一。 默认:"categorical"。决定返回标签数组的类型:
"categorical" 将是2D one-hot编码标签,
"binary" 将是 1D 二进制标签,
"sparse" 将是 1D 整数标签,
"input" 将是与输入图像相同的图像(主要用于与自动编码器一起使用),
"other" 将是y_col数据的numpy数组,None,不返回任何标签(生成器只会产生批量的图像数据,这对使用 model.predict_generator(), model.evaluate_generator() 等很有用)。
batch_size: 批量数据的尺寸(默认:32)。
shuffle: 是否混洗数据(默认:True)
seed: 可选的混洗和转换的随即种子。
save_to_dir: None 或 str (默认: None). 这允许你可选地指定要保存正在生成的增强图片的目录(用于可视化您正在执行的操作)。
save_prefix: 字符串。保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
save_format: "png","jpeg"之一(仅当save_to_dir设置时可用)。默认:"png"。
follow_links: 是否跟随类子目录中的符号链接(默认:False)。
subset: 数据子集 ("training"或"validation"),如果在ImageDataGenerator 中设置了validation_split。
interpolation: 在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。 支持的方法有"nearest", "bilinear", and "bicubic"。 如果安装了 1.1.3 以上版本的 PIL 的话,同样支持"lanczos"。 如果安装了 3.4.0 以上版本的 PIL 的话,同样支持 "box"和"hamming"。 默认情况下,使用"nearest"。
返回值:
一个生成(x, y) 元组的DataFrameIterator, 其中x是一个包含一批尺寸为 (batch_size, *target_size, channels)的图像样本的numpy数组,y 是对应的标签的 numpy 数组。

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',
    keep_aspect_ratio=False
)

参数:

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_model:"categorical"(多分类问题), "binary"(二分类), "sparse"(y_true是单个值), "input"或None之一。默认:"categorical"。决定返回的标签数组的类型:
"categorical"将 2D one-hot编码标签,
"binary"将是1D二进制标签,"sparse"将是 1D 整数标签,
"input"将是与输入图像相同的图像(主要用于自动编码器)。
如果为 None,不返回标签(生成器将只产生批量的图像数据,对于 model.predict_generator(), model.evaluate_generator() 等很有用)。请注意,如果 class_mode 为 None,那么数据仍然需要驻留在 directory 的子目录中才能正常工作。
batch_size: 一批数据的大小(默认 32)。
shuffle:是否混洗数据(默认 True)
seed:可选随机种子,用于混洗和转换。
save_to_dir:None或字符串(默认None)。这使你可以最佳地指定正在生成的增强图片要保存的目录(用于可视化你在做什么)。
save_format:字符串。 保存图片的文件名前缀(仅当 save_to_dir 设置时可用)。
follow_links:是否跟踪类子目录中的符号链接(默认为 False)。
subset:数据子集("training"或"validation"),如果 在 ImageDataGenerator 中设置了 validation_split。
interpolation:在目标大小与加载图像的大小不同时,用于重新采样图像的插值方法。 支持的方法有 "nearest", "bilinear", and "bicubic"。 如果安装了 1.1.3 以上版本的 PIL 的话,同样支持 "lanczos"。 如果安装了 3.4.0 以上版本的 PIL 的话,同样支持 "box" 和 "hamming"。 默认情况下,使用 "nearest"。
返回值:
一个生成(x, y)元组的 DirectoryIterator,其中 x 是一个包含一批尺寸为 (batch_size, *target_size, channels)的图像的 Numpy 数组,y 是对应标签的 Numpy 数组。文章来源地址https://www.toymoban.com/news/detail-430021.html

4. 实例一个数据集

使用flow生成数据迭代器:

(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = utils.to_categorical(y_train, num_classes)
y_test = 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,
    validation_split=0.2)

datagen.fit(x_train)

#使用flow 来生成迭代数据器
model.fit(datagen.flow(x_train, y_train, batch_size=32,
         subset='training'),
         validation_data=datagen.flow(x_train, y_train,
         batch_size=8, subset='validation'),
         steps_per_epoch=len(x_train) / 32, epochs=epochs)

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:
            break

使用flow_from_directory()生成数据迭代器:

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)
#数据预处理
test_datagen = ImageDataGenerator(rescale=1./255)

#使用flow_from_directory生成数据迭代器:
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(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

到了这里,关于tensorflow中Keras ---图像预处理----tf.keras.preprocessing.image.ImageDataGenerator 类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • tf.keras.layers.Embedding() 详解

    Embedding layery 参数如下:  输入:二维张量: (batch_size, input_length) 。 输出: 3D 张量: (batch_size, input_length, output_dim) 。 参数详解: input_dim:整数(= 0), 词汇表中最大值+1 output_dim:的整数( 0),嵌入向量的维度 embeddings_initializer: 嵌入矩阵的初始化方法,为预定义初始化方法名

    2023年04月22日
    浏览(24)
  • 成功解决module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘

    module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘ module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘ 这个错误表明你试图访问keras.preprocessing.image模块的load_img函数,但该函数在该模块中不存在。 下滑查看解决方法 在Keras中,load_img函数实际上位于keras.utils模块中,而不

    2024年02月07日
    浏览(34)
  • 一键解决module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘

    module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘ module ‘keras.preprocessing.image‘ has no attribute ‘load_img‘ 这个错误表明你试图访问keras.preprocessing.image模块的load_img函数,但该函数在该模块中不存在。 下滑查看解决方法 在Keras中,load_img函数实际上位于keras.utils模块中,而不

    2024年02月08日
    浏览(30)
  • 图像预处理算法————灰度化处理

    图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。 灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255 方法:一般有分量法、最大值法、平均值法、加权平均法四种方

    2024年01月17日
    浏览(39)
  • 图像预处理方法

    两个基本的形态学操作是腐 和膨胀。他们 的变体构成了开运算 ,闭运算, 梯度等。 根据卷积核的大小前景的所有像素会腐 掉 变为 0 ,所以前景物体会变小整幅图像的白色区域会减少。 对于去除白噪声很有用 也可以用来断开两个 在一块的物体等。 函数原型: ⚫src: 输入原

    2023年04月11日
    浏览(30)
  • 图像预处理技术与算法

    图像预处理是计算机视觉和图像处理中非常关键的第一步,其目的是为了提高后续算法对原始图像的识别、分析和理解能力。以下是一些主要的图像预处理技术: 1.图像增强: 对比度调整:通过直方图均衡化(Histogram Equalization)等方法改善图像整体或局部的对比度。 伽玛校

    2024年02月20日
    浏览(38)
  • 【第十七届智能车】智能车图像处理(1)-图像预处理

    本博客使用的硬件是逐飞总钻风130°无畸变摄像头,采用的图像分辨率为188*120,主控为CH32V307VCT6,使用DVI接口进行连接。 我们在本次比赛中采用的是头尾车总钻风摄像头+中间车线性CCD的方案。这两个感光部件各有优劣,使用方式和图像处理也大相径庭。这里讨论的是总钻风

    2024年02月08日
    浏览(39)
  • 使用 SKimage 的图像预处理

    介绍 图像是视觉对象的二维表示,例如照片、绘画或素描。在数字成像中,图像存储为像素值数组,其中每个像素代表图像亮度和颜色的样本。每个像素的颜色可以由一个或多个通道表示,如传统彩色图像中的红色、绿色和蓝色 (RGB) 通道。在本文中,你将学习各种图像预处

    2024年02月03日
    浏览(39)
  • 关于图像分割的预处理 transform

    目录 1. 介绍 2. 关于分割中的 resize 问题 3. 分割的 transform 3.1 随机缩放 RandomResize 3.2 随机水平翻转 RandomHorizontalFlip 3.3 随机竖直翻转 RandomVerticalFlip 3.4 随机裁剪 RandomCrop 3.5 ToTensor 3.6 normalization 3.7 Compose 3.8 中心裁剪 3.9 Resize 缩放 4. 预处理结果可视化 图像分割的预处理不像

    2024年02月04日
    浏览(38)
  • 图像预处理 Tricks【1】:Contours

    轮廓可以简单地理解为连接所有连续点(沿物体边界)的曲线,这些点通常具有相同的颜色或强度。 轮廓在图像分析中具有重要意义,是物体形状分析和对象检测和识别的有用工具,是理解图像语义信息的重要依据。 本文主要介绍了在 opencv 中,一些重要的用于处理物体轮廓

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包