如何使用 Keras ImageDataGenerator class 规范化图像?

How can I normalize an image with the Keras ImageDataGenerator class?

我正在从一篇论文中训练一个网络,论文内容如下:

"We resize all the images to (256, 256) and normalize them by a mean and standard deviation of 0.5 across RGB channels before passing them through the respective networks."

我正在使用 ImageDataGenerator class 然后是 flow_from_directory() 从训练集图像目录。

我不知道我需要使用哪种参数组合才能使每个图像在每个 RGB 通道中的像素均值为 0.5,标准差为 0.5。

我目前的实现如下:

datagen = ImageDataGenerator(rescale=1.0/255.0, samplewise_center=True, samplewise_std_normalization=True,validation_split=0.99)
train_gen = datagen.flow_from_directory(dir_name, classes=['image_train'], batch_size=BATCH_SIZE,
                                       class_mode=None, subset="training")

它似乎正在生成平均值为 0 且像素范围为 -1.7 到 2.3 的图像。

是否可以使用 ImageDataGenerator class 实现跨 RGB 通道的均值和标准差为 0.5 的输入图像缩放到严格 0 到 1 的范围,而无需实现我自己的预定义-处理代码?

如果您真的想避免将其放入预处理(在我看来这是最简单的方法 - 添加 preprocessing_function 到 ImageDataGenerator),您可以使用乘法和加法层开始你的网络,以缩放(按 0.5,因为你的标准现在是 1)和移动(按 0.5,因为你的平均值现在是 0) - 请注意乘法和加法层都需要参数是相同大小的张量,因此请参阅doc如何创建任意张量。