深度学习14 数据扩充效果查看

基于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']

原始图像:

深度学习14 数据扩充效果查看

 2、各种参数下的扩充效果

 channel_shift_range=128 扩充效果

深度学习14 数据扩充效果查看

 rotation_range=360 扩充效果

深度学习14 数据扩充效果查看

zca_whitening=True (感官上无任何效果)

深度学习14 数据扩充效果查看

brightness_range=[0.1,3] 

深度学习14 数据扩充效果查看

width_shift_range=0.5 (水平平移)

深度学习14 数据扩充效果查看

height_shift_range=0.5 (垂直平移) 

深度学习14 数据扩充效果查看

zoom_range=[0.5,2]  (随机缩放)

深度学习14 数据扩充效果查看

 shear_range=90 (随机倾斜角度)

深度学习14 数据扩充效果查看

horizontal_flip=True

深度学习14 数据扩充效果查看

vertical_flip=True  深度学习14 数据扩充效果查看

 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)

上一篇:使用opencv中的VideoWriter函数,保存电脑内置摄像头捕获到的视频(文中包括flip函数参数翻转设置)


下一篇:实现基于OpenCv的图像增广