Tensorflow 2.0 CNN 训练:图像增强函数将像素值移出 [0, 1] 范围。这是个问题吗?

Tensorflow 2.0 CNN training: Image augmentation function shifts pixel values outside of the [0, 1] range. Is this a problem?

我正在研究我的特定数据增强功能,以在 TensorFlow 2.0 中训练 CNN。我使用的图像数据存储在 numpy 多维 RGB 数组中;它的所有像素值都是 [0, 1] 范围内的浮点数。

在使用函数 tensorflow.image.random_brightness (documentation) 时,我发现它的像素值移动到了 [0, 1] 范围之外(甚至高于或低于)。当我尝试使用 matplotlib.pyplot.imshow() 可视化它们时,我收到以下消息:

Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).

我还发现,当我尝试重新规范化该范围内的数据时,图像会恢复到原来的样子(使整个过程无用)。

超出 [0, 1] 范围的像素值是否会成为 CNN 训练的问题?如果这代表有问题,我该怎么做才能使像素值在正确的范围内,而不放弃调整亮度?

是的,这是一个问题,因为你在 0-1 中代表的是 0-255 中的东西,因此当你向 CNN 提供大于 1 的值时,你正在向 CNN 提供它永远看不到的东西在真实场景中。

应用随机亮度没问题,但你应该使用 tf.clip_by_value 函数处理溢出问题:

image = tf.clip_by_value(image, clip_value_min=0., clip_value_max=1.)