我正在使用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())
以下是使用我的代码生成图像的示例:
正如您所看到的,图像失真并且不足以训练我的网络。
我想知道ImageDataGenerator最适合人脸的参数是什么,还是有更好的数据增强方法?
答案 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中找到。