【机器学习】TensorFlow2.0的ImageDataGenerator

在图像深度学习任务中,对于小数据集,可以通过Image Data Augmentation图像增强技术来扩充数据。比如Keras的ImageDataGenerator。

ImageDataGenerator的使用:

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,
    dtype=None
)

ImageDataGenerator参数说明:

参数类型描述
featurewise_centerBoolean使输入数据集去中心化(均值为0), 按feature执行,数据中心化可以消除量纲对数据结构的影响。
samplewise_centerBoolean使输入数据的每个样本均值为0,这个参数在处理mnist这些灰度图上的意义更大。
featurewise_std_normalizationBoolean将输入除以数据集的标准差以完成标准化, 按feature执行,标准化可以消除量纲对数据结构的影响。
samplewise_std_normalizationBoolean将输入的每个样本除以其自身的标准差
zca_epsilonZCA白化的epsilon值,默认是1e-6。ZCA白化保证数据的各维度的方差相同,目的在于去掉各维度之间的相关性
zca_whiteningBoolean是否进行ZCA白化
rotation_range指定旋转角度范围。其参数只需指定一个整数即可,但并不是固定以这个角度进行旋转,而是在 [0, 指定角度] 范围内进行随机角度旋转
width_shift_range水平位置平移。参数可以是[0, 1]的浮点数,也可以大于1,其最大平移距离为图片长的尺寸乘以参数,同样平移距离并不固定为最大平移距离,平移距离在 [0, 最大平移距离] 区间内
height_shift_range垂直位置平移。参数可以是[0, 1]的浮点数,也可以大于1,其最大平移距离为图片长的尺寸乘以参数,同样平移距离并不固定为最大平移距离,平移距离在 [0, 最大平移距离] 区间内
brightness_range
shear_range错切变换。效果是让所有点的x坐标(或者y坐标)保持不变,而对应的y坐标(或者x坐标)则按比例发生平移,且平移的大小和该点到x轴(或y轴)的垂直距离成正比。
zoom_rangezoom_range参数可以让图片在长或宽的方向进行放大,可以理解为某方向的resize,因此这个参数可以是一个数或者是一个list。当给出一个数时,图片同时在长宽两个方向进行同等程度的放缩操作;当给出一个list时,如:[width_zoom_range, height_zoom_range],即分别对长宽进行不同程度的放缩。当参数大于0小于1时,执行的是放大操作,当参数大于1时,执行的是缩小操作。
channel_shift_rangechannel_shift_range可以理解成改变图片的颜色,通过对颜色通道的数值偏移,改变图片的整体的颜色,这意味着是“整张图”呈现某一种颜色,像是加了一块有色玻璃在图片前面一样,因此它并不能单独改变图片某一元素的颜色,如黑色小狗不能变成白色小狗。
fill_mode填充模式。当对图片进行平移、放缩、错切等操作时,图片中会出现一些缺失的地方,那这些缺失的地方该用什么方式补全呢?就由fill_mode中的参数确定,包括:“constant”、“nearest”(默认)、“reflect”和“wrap”
cval当fill_mode设置为“constant”时,还有一个可选参数,cval,代表使用某个固定数值的颜色来进行填充。
horizontal_flipBoolean随机对图片执行水平翻转操作,意味着不一定对所有图片都会执行水平翻转,每次生成均是随机选取图片进行翻转
vertical_flipBoolean随机对图片执行垂直翻转操作,意味着不一定对所有图片都会执行垂直翻转,每次生成均是随机选取图片进行翻转
rescalerescale的作用是对图片的每个像素值均乘上这个放缩因子,这个操作在所有其它变换操作之前执行,在一些模型当中,直接输入原图的像素值可能会落入激活函数的“死亡区”,因此设置放缩因子为1/255,把像素值放缩到0和1之间有利于模型的收敛,避免神经元“死亡”。
preprocessing_function
data_format
validation_split
dtype

参数测试代码

import matplotlib.pyplot as plt
from PIL import Image
from keras.preprocessing import image
import glob

# 设置生成器参数
datagen = image.ImageDataGenerator(fill_mode='wrap',zoom_range=[4, 4])
gen_data=datagen.flow_from_directory(PATH,
    batch_size=1,
    shuffle=False,
    save_to_dir=SAVE_PATH,
    save_prefix='gen',
    target_size=(224, 224)
)

# 生成9张图
for i in range(9):
    gen_data.next() 

# 找到本地生成图,把9张图打印到同一张figure上
name_list = glob.glob(gen_path+'16/*')
fig = plt.figure()
for i in range(9):
    img = Image.open(name_list[i])
    sub_img = fig.add_subplot(331 + i)
    sub_img.imshow(img)
plt.show()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值