基于keras的数据扩充方法参数较为繁多,在本博客中将一一测试ImageDataGenerator的各个参数的扩充效果。
1、扩充参数列表说明
可设置的参数列表中,关于数据扩充的方法一共有11个,其中fill_model不参与测试
datagen = image.ImageDataGenerator(
fill_mode='nearest', #默认值,操作导致图像缺失时填充方式。constant,nearest,eflect,wrap
channel_shift_range=0.0,#浮点数[0.0,255.0],图像上色
rotation_range=90 , # 指定旋转角度范围
zca_whitening=False,#是否应用 ZCA 白化。
brightness_range=[0.3,1.5],#随机调整亮度
width_shift_range=0.2, #水平平移百分比,不宜太大一般0.1,0.2
height_shift_range=0.2, #垂直平移百分比,不宜太大一般0.1,0.2
zoom_range=[0.9,1], #随机缩放范围
horizontal_flip=True, # 随机对图片执行水平翻转操作
vertical_flip=True, # 对图片执行上下翻转操作
shear_range=30,#错切变换角度。
rescale=1./255, # 缩放
data_format='channels_last')
逐个测试的参数列表如一下数组所示
aug_method=['channel_shift_range=128',
'rotation_range=360',
'zca_whitening=True',
'brightness_range=[0.1,3]',
'width_shift_range=0.5',
'height_shift_range=0.5',
'zoom_range=[0.5,2]',
'shear_range=30',
'horizontal_flip=True',
'vertical_flip=True']
原始图像:
2、各种参数下的扩充效果
channel_shift_range=128 扩充效果
rotation_range=360 扩充效果
zca_whitening=True (感官上无任何效果)
brightness_range=[0.1,3]
width_shift_range=0.5 (水平平移)
height_shift_range=0.5 (垂直平移)
zoom_range=[0.5,2] (随机缩放)
shear_range=90 (随机倾斜角度)
horizontal_flip=True
vertical_flip=True
3、用于测试自己数据扩充效果的全部代码
from PIL import Image
import numpy as np
from keras.preprocessing import image
import os
# 生成图片地址和对应标签
file_dir1 = r"data"
shape=(350,500)
seed = 1
# 设置生成器参数
datagen = image.ImageDataGenerator(
fill_mode='nearest', #默认值,操作导致图像缺失时填充方式。constant,nearest,eflect,wrap
channel_shift_range=0.0,#浮点数[0.0,255.0],图像上色
rotation_range=90 , # 指定旋转角度范围
zca_whitening=False,#是否应用 ZCA 白化。
brightness_range=[0.3,1.5],#随机调整亮度
width_shift_range=0.2, #水平平移百分比,不宜太大一般0.1,0.2
height_shift_range=0.2, #垂直平移百分比,不宜太大一般0.1,0.2
zoom_range=[0.9,1], #随机缩放范围
horizontal_flip=True, # 随机对图片执行水平翻转操作
vertical_flip=True, # 对图片执行上下翻转操作
shear_range=30,#错切变换角度。
rescale=1./255, # 缩放
data_format='channels_last')
aug_method=['channel_shift_range=128',
'rotation_range=360',
'zca_whitening=True',
'brightness_range=[0.1,3]',
'width_shift_range=0.5',
'height_shift_range=0.5',
'zoom_range=[0.5,2]',
'shear_range=30',
'horizontal_flip=True',
'vertical_flip=True']
import math
batch_size=1
for am in aug_method:
tag=am.split('=')[0]
save_path1="data-%s"%tag
if not os.path.exists(save_path1):
os.makedirs(save_path1)
datagen=eval("image.ImageDataGenerator(%s)"%am)
gen1=datagen.flow_from_directory(file_dir1,
target_size=shape,
batch_size=batch_size,
save_to_dir=save_path1,
save_prefix='kc',
seed=seed,
save_format='jpg')
step=math.ceil(len(gen1.classes)/gen1.batch_size)
#把数据扩充50倍
for i in range(10*step):
gen1.next()
print("%s:数据扩充完成"%am)