首页 > 解决方案 > tensorflow image_dataset_from_directory 与 PIL 负载的区别

问题描述

张量流版本:2.5.0-dev20210301

枕头版:8.1.2

我使用 API image_dataset_from_directory 训练模型来加载图像并尝试使用 PIL 推断图像,

首先,我在我的目录中只放了一张图片。

但我发现 image_dataset_from_directory 的返回与 PIL 读取不匹配

我试过resize的方法都是双线性的,但是tensorflow的返回是float数据,PIL是INT数据,值完全不同。

有我的代码和结果

def load_image_from_tensorflow(self, path):
    validation_dataset = image_dataset_from_directory(path,
                                              shuffle=False,
                                              batch_size=32,
                                              image_size=(224,224))
    for image, _ in validation_dataset.take(1):
        img = image
    return img

def load_image_from_pil(self, path):
    img = Image.open(path)
    img = img.resize((224, 224),Image.BILINEAR)
    img = np.expand_dims(img, axis=0)
    return img

张量流输出:

<tf.Tensor: shape=(1, 224, 224, 3), dtype=float32, numpy=
array([[[[186.      , 211.      , 216.      ],
         [185.9576  , 210.9576  , 215.9576  ],
         [185.59598 , 210.59598 , 215.59598 ],
         ...,
         [205.61609 , 225.02011 , 227.80804 ],
         [204.16965 , 223.21207 , 227.08482 ],
         [204.      , 223.      , 227.      ]],

PIL 输出:

array([[[[181, 206, 213],
         [181, 206, 213],
         [181, 206, 213],
         ...,
         [204, 222, 225],
         [202, 221, 225],
         [202, 221, 225]],

标签: python-3.xtensorflowpython-imaging-library

解决方案


如果您将文件命名为 01.jpg、02.jpg .... 09.jpg、10.jpg,它们将按此顺序返回。因此,当我运行您的代码时,我确切地知道将返回哪个文件,并且当您打印出图像时它们确实匹配(对于非十进制值),但值是 tensorflow 数据的浮点数和 PIL 数据的整数。我不知道为什么张量流值是 188.123 形式的浮点数,而 PIL 值只有 188。


推荐阅读