首页 > 解决方案 > Tensorflow 2.0 CNN 训练:图像增强功能将像素值移动到 [0, 1] 范围之外。这是一个问题吗?

问题描述

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

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

使用 RGB 数据将输入数据裁剪到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])。

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

[0, 1] 范围之外的像素值是 CNN 训练的问题吗?如果这代表一个问题,我该怎么做才能使像素值在正确的范围内,而不放弃调整亮度?

标签: pythonnumpytensorflowtensorflow2.0data-augmentation

解决方案


是的,这是一个问题,因为您在 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.)

推荐阅读