【发布时间】:2021-02-14 23:49:30
【问题描述】:
我有一个训练有素的 tensorflow 模型,在制作训练数据库时,我使用了
from tensorflow.keras.preprocessing.image import ImageDataGenerator
ImageDataGenerator.flow_from_directory(organized_dir,
target_size=(image_dim, image_dim),
color_mode="grayscale",
batch_size=20,
shuffle=True,
follow_links=True)
(我只是显示我选择提供的参数,image_dim 等变量在别处定义)
当我在函数返回的 DirectoryIterator 对象上使用next() 查看其中一个批次时,图像的像素值似乎从其原始 rgb 值 [0,255] 缩放到灰度 [0,1]。我希望它是灰度的,我的理解是 ML 模型在 0 到 1 之间的数字上表现最好。太棒了!
但是,现在我想在不同的图像上使用模型。在cv2 中打开它们并转换为灰度不会像 tensorflow 那样缩放像素值,它只是将颜色值保持在 [0,255] 而不是 [0,1]:
>>> z = cv2.imread("img.png")
>>> cv2.cvtColor(z, cv2.COLOR_BGR2GRAY)
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
所以,我要问的是如何使用 tensorflow 的数据集使用的相同转换来使图像使用从 [0,255] 到 [0,1] 的像素值。我在这里发现我可以标准化图像:Normalizing images in OpenCV。但我想使用 tensorflow 使用的确切算法/参数,这样我就可以最大限度地提高我在现实世界中的准确性。谢谢??????
【问题讨论】:
标签: python tensorflow opencv keras tf.keras