使用包含路径的标签对图像进行分类

时间:2019-12-18 08:51:43

标签: python tensorflow keras

我希望使用其路径包含在表中的图像来训练网络。

我已经在TensorFlow网站上进行了搜索,并找到了以下说明:

train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
                                                           directory=train_dir,
                                                           shuffle=True,
                                                           target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                           class_mode='binary')

问题是我没有用于测试和验证数据的单独文件夹。 只是一个表包含测试图像的路径,而另一个表包含验证图像的路径。

但是,根据类别,我的图像位于不同的文件夹中。 如何加载这些路径在一个表中的PNG测试图像,并与路径在另一表中的其他图像进行验证?

1 个答案:

答案 0 :(得分:0)

您可以将路径列表传递到tf.data.Dataset.list_files(),然后将它们传递给map()函数以读取这些图像并进行所有您想做的预处理。您可以找到有关tf.data.Datasethere可用的受支持方法的更多信息。

这里是一个示例,其中我在3个不同的文件夹中有鸟和狗的图像。我将这些路径传递到tf.data.Dataset.list_files(),并在map函数中进行crop_central裁剪图像并稍后显示它们。添加了打印语句以显示文件的路径。

代码-

%tensorflow_version 2.x
import tensorflow as tf
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import img_to_array, array_to_img
from matplotlib import pyplot as plt
import numpy as np

file_path = ['/content/bird.jpg','/content/sample_data/dog.jpg','/usr/bird1.jpg']

def load_file_and_process(path):
    print("Loading image from path :",bytes.decode(path.numpy()))
    image = load_img(bytes.decode(path.numpy()), target_size=(224, 224))
    image = img_to_array(image)
    image = tf.image.central_crop(image, np.random.uniform(0.50, 1.00))
    return image

train_dataset = tf.data.Dataset.list_files(file_path)

train_dataset = train_dataset.map(lambda x: tf.py_function(load_file_and_process, [x], [tf.float32]))

for f in train_dataset:
  for l in f:
    image = np.array(array_to_img(l))
    print("Crop Image is of shape : ", image.shape)
    plt.figure()
    plt.imshow(image)

输出-

Loading image from path : /content/bird.jpg
Crop Image is of shape :  (124, 124, 3)
Loading image from path : /content/sample_data/dog.jpg
Crop Image is of shape :  (220, 220, 3)
Loading image from path : /usr/bird1.jpg
Crop Image is of shape :  (158, 158, 3)

enter image description here

enter image description here

enter image description here

希望这能回答您的问题。学习愉快。