Keras用于数据增强的最佳图像数据生成器参数

时间:2017-07-06 21:39:13

标签: image-processing keras

我正在使用Keras进行面部表情识别,我使用的数据集没有大量可用的数据,所以我将使用Keras的图像预处理用于数据增加。

我想知道ImageDataGenerator的最佳参数,以生成可以用来训练神经网络的普通面。

以下是我用于数据扩充的代码:

def data_augmentation(subdir):

    datagen = ImageDataGenerator(
        featurewise_center=False,
        samplewise_center=False,
        featurewise_std_normalization=False,
        samplewise_std_normalization=False,
        zca_whitening=False,
        rotation_range=30,
        width_shift_range=0.2,
        height_shift_range=0.2,
        horizontal_flip=True,
        vertical_flip=False)

    print ("\nData augmentation...")
    print ("\nProcess...")

    for file in glob.glob(subdir+"*/*.jpg"):
        img = load_img(file)
        print ("\nProcessing..." + str(file))
        x = img_to_array(img)
        x = x.reshape((1,) + x.shape)

        i = 0
        for batch in datagen.flow(x, batch_size=1, save_to_dir='data_aug', save_prefix='Fig', save_format='jpg'):
            i += 1
            if i > 20:
                break

这里是所有ImageDataGenerator的参数

keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
                samplewise_center=False,
                featurewise_std_normalization=False,
                samplewise_std_normalization=False,
                zca_whitening=False,
                zca_epsilon=1e-6,
                rotation_range=0.,
                width_shift_range=0.,
                height_shift_range=0.,
                shear_range=0.,
                zoom_range=0.,
                channel_shift_range=0.,
                fill_mode='nearest',
                cval=0.,
                horizontal_flip=False,
                vertical_flip=False,
                rescale=None,
                preprocessing_function=None,
                data_format=K.image_data_format())

以下是使用我的代码生成图像的示例:

enter image description here

enter image description here

enter image description here

enter image description here

正如您所看到的,图像失真并且不足以训练我的网络。

我想知道ImageDataGenerator最适合人脸的参数是什么,还是有更好的数据增强方法?

2 个答案:

答案 0 :(得分:1)

如果您只处理面孔,请查看此文件: http://www.openu.ac.il/home/hassner/projects/augmented_faces/ 它可以从单个人脸图像生成30个图像。 您也可以在python中使用虚拟化妆实现。它们易于使用且成功。

答案 1 :(得分:0)

您还可以使用随机擦除功能,以便网络在整个训练过程中可以更多地了解某些特定区域,而不仅仅是专注于面部的某些特定部分。

可以在https://arxiv.org/abs/1708.04896上找到用于随机擦除的纸张 及其实现可以在https://github.com/yu4u/cutout-random-erasing中找到。