我发现有一些图像预处理函数不包含在keras.preprocess.image.ImageDataGenerator
那么我怎样才能将自己的自定义预处理功能添加到ImageDataGenerator
,例如更改亮度,饱和度,颜色抖动,图像裁剪等。
实际上 - 您可以指定自己的预处理函数并将其设置为ImageGenerator
。例如:
def preprocessor(image):
# perform augmentations here
然后:
image_generator = ImageDataGenerator(..., preprocessing_function=preprocessor)
只需创建预处理函数并将其作为参数传递给ImageDataGenerator
函数preprocessing_function
即可。您还可以通过在一个preprocess()
函数中调用多个预处理函数来在ImageDataGenerator
中传递多个预处理函数。
如果您尝试只传递一个预处理函数:-
def preprocess():
# operations
如果您尝试传递多个预处理函数:-
def preprocess():
another preprocess_function()
# operations
然后只需在 ImageDataGenerator 中传递该预处理():-
train_gen = ImageDataGenerator(preprocessing_function=preprocess())
def get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3, v_l=0, v_h=255, pixel_level=False):
def eraser(input_img):
img_h, img_w, img_c = input_img.shape
p_1 = np.random.rand()
if p_1 > p:
return input_img
while True:
s = np.random.uniform(s_l, s_h) * img_h * img_w
r = np.random.uniform(r_1, r_2)
w = int(np.sqrt(s / r))
h = int(np.sqrt(s * r))
left = np.random.randint(0, img_w)
top = np.random.randint(0, img_h)
if left + w <= img_w and top + h <= img_h:
break
if pixel_level:
c = np.random.uniform(v_l, v_h, (h, w, img_c))
else:
c = np.random.uniform(v_l, v_h)
input_img[top:top + h, left:left + w, :] = c
return input_img
return eraser
datagen = ImageDataGenerator(preprocessing_function=get_random_eraser(v_l=0, v_h=1), zoom_range=0.0, horizontal_flip=False)
为了使 Marcin 解决方案为我工作,我必须在 ImageDataGenerator 中定义preprocessing_function:
train_datagen=图像数据生成器( ... preprocessing_function= 预处理器(图像).all(), ... )