Keras提供了一个用于实时增强的ImageDataGenerator类,但它不包括对比度调整和噪声添加。
我们如何在训练期间应用随机的噪声水平和随机的对比度调整?可以将这些函数添加到datagen的'preprocessing_function‘参数中吗?
谢谢。
发布于 2017-04-13 09:37:28
来自Keras文档:
preprocessing_function:将隐含在每个输入上的函数。该函数将在对其进行任何其他修改之前运行。该函数应该有一个参数:一个图像(秩为3的Numpy张量),并且应该输出一个具有相同形状的Numpy张量。
因此,我创建了一个简单的函数,然后使用imgaug module中的图像增强函数。请注意,imgaug要求图像的等级为4。
发布于 2020-04-25 20:01:30
你确实可以用preprocessing_function来增加噪音。
示例脚本:
import random
import numpy as np
def add_noise(img):
'''Add random noise to an image'''
VARIABILITY = 50
deviation = VARIABILITY*random.random()
noise = np.random.normal(0, deviation, img.shape)
img += noise
np.clip(img, 0., 255.)
return img
# Prepare data-augmenting data generator
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
zoom_range=0.2,
preprocessing_function=add_noise,
)
# Load a single image as our example
from keras.preprocessing import image
img_path = 'cat_by_irene_mei_flickr.png'
img = image.load_img(img_path, target_size=(299,299))
# Generate distorted images
images = [img]
img_arr = image.img_to_array(img)
img_arr = img_arr.reshape((1,) + img_arr.shape)
for batch in datagen.flow(img_arr, batch_size=1):
images.append( image.array_to_img(batch[0]) )
if len(images) >= 4:
break
# Display
import matplotlib.pyplot as plt
f, xyarr = plt.subplots(2,2)
xyarr[0,0].imshow(images[0])
xyarr[0,1].imshow(images[1])
xyarr[1,0].imshow(images[2])
xyarr[1,1].imshow(images[3])
plt.show()脚本生成的示例图像:

发布于 2019-08-05 23:06:35
我发现在this blog中你可以做一些简单的事情,比如:
from keras.layers import GaussianNoise
model.add(Dense(32))
model.add(GaussianNoise(0.1))
model.add(Activation('relu'))
model.add(Dense(32))
...不幸的是,我找不到一种类似的方法来调整/增强对比度。但是,根据这个post,你可以通过以下方式增加亮度
from keras.preprocessing.image import ImageDataGenerator
ImageDataGenerator(brightness_range=[range_min,range_max])https://stackoverflow.com/questions/43382045
复制相似问题