【问题标题】: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 训练:图像增强功能将像素值移动到 [0, 1] 范围之外。这是一个问题吗?
【发布时间】:2019-04-21 20:12:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python numpy tensorflow tensorflow2.0 data-augmentation


    【解决方案1】:

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

    【讨论】:

    • 在使用tf.clip_by_value之前,您是否建议将所有内容都放在[0, 255]中?还是 [0, 1] 好吗?
    • 先将图像转换为浮动([0,1]中的值),然后在[0,1]中应用随机亮度+剪辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2021-06-16
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多