【问题标题】:Train keras ResNet50V2 with 16-bit images?用 16 位图像训练 keras ResNet50V2?
【发布时间】:2021-03-12 11:15:09
【问题描述】:

我有 3 通道 tif 图像(16 位)。 现在,我想将它们用作来自 keras 的预训练 ResNet50V2 上的训练图像。我明白,在使用 ImageDataGenerators 时,我应该调用 tf.keras.applications.resnet_v2.preprocess_input 作为预处理函数。我查看了函数的文档 (preprocess_input),它至少告诉我它需要 8 位数据。 有没有办法将 16 位图像提供给 ImageDataGenerator?

或者在将图像输入 ImageDataGenerator 之前,我是否必须将它们转换为 8 位?

我很高兴有任何建议!

【问题讨论】:

  • 我根据网站指南编辑了您的问题,因此它只关注一个问题。

标签: python tensorflow keras tf.keras resnet


【解决方案1】:

我在您链接的 documentation 中没有看到对 8 位数据的引用。

是的,它可以接受 16 位:

import tensorflow as tf
import numpy as np

x = np.random.randint(0, 256, (1, 224, 224, 3), dtype=np.uint16)

tf.keras.applications.resnet_v2.preprocess_input(x)
array([[[[ 0.43529415, -0.24705881, -0.23137254],
         [-0.81960785,  0.3411765 , -0.5921569 ],
         [-0.7882353 ,  0.58431375,  0.0196079 ],
         ...,
         [-0.60784316, -0.4980392 ,  1.        ],
         [-0.654902  ,  0.99215686, -0.38039213],
         [ 0.03529418, -0.7411765 , -0.8901961 ]]]], dtype=float32)

【讨论】:

  • 文档说参数“x”:浮点 numpy.array 或 tf.Tensor,具有 3 个颜色通道的 3D 或 4D,值在 [0, 255] 范围内。如果数据类型兼容,则预处理数据将覆盖输入数据。为了避免这种行为,可以使用 numpy.copy(x)。
  • 我想,我应该提到我的图像具有完整的 16 位范围 (0,65535) 的值
  • 将它们除以 65535?
  • 但是他们仍然没有使用 [0,255] 的范围。而且我根本不知道,这个预处理函数应该做什么——从-1重新缩放到1?如果是这样,我将不得不将图像重新缩放到 [0,255] 之前。但在什么时候有可能呢?
  • 除以 65535 再乘以 255
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2018-01-31
  • 2017-11-28
  • 2017-06-08
  • 2019-12-18
相关资源
最近更新 更多