美文网首页
Data Augmentation方法

Data Augmentation方法

作者: Yankee_13 | 来源:发表于2018-12-19 16:44 被阅读0次

    1.Data Augmentation理论基础

    不同的任务背景下, 我们可以通过图像的几何变换, 使用以下一种或多种组合数据增强变换来增加输入数据的量. 我们以单张图片为例:

    原图
    • 旋转 | 反射变换(Rotation/reflection): 随机旋转图像一定角度; 改变图像内容的朝向;

    • 翻转变换(flip): 沿着水平或者垂直方向翻转图像;

    • 缩放变换(zoom): 按照一定的比例放大或者缩小图像(缩小后的图像,空白像素用原像素补全);
      放大后的结果

    • 平移变换(shift): 在图像平面上对图像以一定方式进行平移;
      可以采用随机或人为定义的方式指定平移范围和平移步长, 沿水平或竖直方向进行平移. 改变图像内容的位置;
      上下平移的结果

    • 尺度变换(scale): 对图像按照指定的尺度因子, 进行放大或缩小; 或者参照SIFT特征提取思想, 利用指定的尺度因子对图像滤波构造尺度空间. 改变图像内容的大小或模糊程度;

    • 对比度变换(contrast): 在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变. 对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;

    • 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声;

    • 颜色变换(color): 在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量,3个特征值, p1, p2, p3, λ1, λ2, λ3. 对每幅图像的每个像素进行加上如下的变化:{I_x}y = {[I^R{xy}, I^G_{xy}, I^B_{xy}]}^T

    2.Data Augmentation 代码实现

    需要依赖于Keras库来实现

    from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
    
    datagen = ImageDataGenerator(
            rotation_range=0.2,
            width_shift_range=0.2,
            height_shift_range=0.2,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True,
            fill_mode='nearest')
            #ImageDataGenerator用来生成图像
    
    img = load_img('~/Desktop/lena.jpg')  # this is a PIL image, please replace to your own file path
    x = img_to_array(img)  # this is a Numpy array with shape (c,h,w)
    x = x.reshape((1,) + x.shape)  # this is a Numpy array with shape (1, c, h, w)
    
    # the .flow() command below generates batches of randomly transformed images
    # and saves the results to the `preview/` directory
    
    i = 0
    for batch in datagen.flow(x, 
                              batch_size=1,
                              save_to_dir='~/Desktop/preview',  
                              save_prefix='lena', 
                              save_format='jpg'):
        i += 1
        if i > 20:
            break  # otherwise the generator would loop indefinitely
    

    注解:

    keras.preprocessing.image.flow(x, 
                                   y=None,
                                   batch_size=32, 
                                   shuffle=True, 
                                   sample_weight=None, 
                                   seed=None, 
                                   save_to_dir=None, 
                                   save_prefix='', 
                                   save_format='png', 
                                   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。

    参考:

    https://keras.io/zh/preprocessing/image/

    相关文章

      网友评论

          本文标题:Data Augmentation方法

          本文链接:https://www.haomeiwen.com/subject/ykijkqtx.html