在实际的数据集制作中,由于采集数据难度的问题,可获取的数据量有限,同时训练神经网络需要大量的数据,这时候就可以采用keras内的数据增广模块。
import matplotlib.pyplotas plt
from PILimport Image
from keras.preprocessingimport image
from kerasimport backendas K
import glob
import keras
import cv2
import numpyas np
import os
def image_create():
datagen=image.ImageDataGenerator(featurewise_center=True,
samplewise_center=True,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
zca_epsilon=1e-6,
rotation_range=15.0,
width_shift_range=0.05,
height_shift_range=0.05,
shear_range=0.3,
zoom_range=0.,
channel_shift_range=10.,
fill_mode='nearest',
cval=0.,
horizontal_flip=False,
vertical_flip=False,
rescale=None,
preprocessing_function=None,
data_format=K.image_data_format()
)
gen_data= datagen.flow_from_directory('C:/Users/AI/Desktop/data/',
batch_size=1,
shuffle=False,
save_to_dir='C:/Users/AI/Desktop/ data_augmentation',
save_prefix='',
target_size=(48,48))
for i in range(45000)://你想要增广的数据数量
# gen_data.next()
gen_data.next()
name_list = glob.glob('C:/Users/AI/Desktop/num3')
比如我的数据一共有9类,类别编号1-9,第一类的图片存放在C:/Users/AI/Desktop/data/1,第二类的图片放在C:/Users/AI/Desktop/data/2中.....然后运行上述程序,可以得到一共45000张图片。
下面说一下数据增广的一些参数问题:
主要函数:ImageDataGenerator:
rotation_range: 旋转范围, 随机旋转(0-180)度;
width_shift and height_shift: 随机沿着水平或者垂直方向,以图像的长宽小部分百分比为变化范围进行平移;
rescale: 对图像按照指定的尺度因子, 进行放大或缩小, 设置值在0 - 1之间,通常为1 / 255;
shear_range: 水平或垂直投影变换,可以参考https://keras.io/preprocessing/image/
zoom_range: 按比例随机缩放图像尺寸;
horizontal_flip: 水平翻转图像;
fill_mode: 填充像素, 出现在旋转或平移之后.