如果图像没有组织在类文件夹中,是否有tf.keras.utils.image_dataset_from_director



我想训练一个图像分类网络。

我把所有的图像都放在一个文件夹和一个带有标签和大量元数据的.json文件中。我写了几个函数来提取与我想要训练的类相对应的图像,对它们进行混洗,并将它们随机划分为train和val列表。所以目前我有这样的东西:

list_imagepath_train = [' C:UserssomeuserPicturesrandomimagename1.jpg', ' C:UserssomeuserPicturesrandomimagename2.jpg', ' C:UserssomeuserPicturesrandomimagename5.jpg', ' C:UserssomeuserPicturesrandomimagename8.jpg', ' C:UserssomeuserPicturesrandomimagename9.jpg', ' C:UserssomeuserPicturesrandomimagename10.jpg', ' C:UserssomeuserPicturesrandomimagename12.jpg']
list_corresponding_classlabels_train = ['5', '5', '2', '3', '2', '2', '5']

list_imagepath_val = [' C:UserssomeuserPicturesrandomimagename3.jpg', ' C:UserssomeuserPicturesrandomimagename4.jpg', ' C:UserssomeuserPicturesrandomimagename6.jpg', ' C:UserssomeuserPicturesrandomimagename7.jpg']

list_corresponding_classlabels_val = ['2', '3', '5', '2']

现在,我想将这些列表转换为train和val数据集,以便在Tensorflow中使用。问题是,我不能使用tf.keras.utils.image_dataset_from_directory,因为所有的图像,无论其标签如何,都在同一个文件夹中,每次开始新的训练时,移动它们似乎有点毫无意义。tf.keras.preprocessing.image.ImageDataGenerator已弃用(https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator)现在我不确定该使用哪个函数将列表转换为所需的数据集。这对我来说都是全新的,所以任何输入或提示都是非常受欢迎的!

您可以使用ImageDataGenerator((类及其函数flow_from_dataframe((;因此,在创建具有两列的数据帧之前;x_col作为文件路径,y_col作为标签,然后在flow_from_dataframe((中定义参数,在这种情况下,将directory设置为None。

此外,您可以使用os库创建目录和子目录,然后将基于标签的图像移动到其子目录中;如果您只想使用image_data_from_directory((

甚至还有tf.data.Dataset.from_tensor_slices((path_list,label_list((,然后通过函数映射它,该函数通过tf.io.read_file((加载图像,然后解码图像,调整大小和形状,然后返回图像和标签。然后在映射数据集之后进行批处理和混洗。

如果您不想使用ImageDataGenerator

from tensorflow.keras.preprocessing.image import load_img, img_to_array

def make_dataset(x, y):
imgs = []
labels = []
img_size = # set to whatever you need
for i, j in zip(x, y):
img = load_img(i, target_size=img_size)
img = img_to_array(img)
imgs.append(img)
labels.append(j)
imgs, labels = np.array(imgs), np.array(labels)
return imgs, labels

x_train, y_train = make_dataset(list_imagepath_train, list_corresponding_classlabels_train)
x_val, y_val = make_dataset(list_imagepath_val, list_corresponding_classlabels_val)
model.fit(x_train, y_train, ...)

相关内容

  • 没有找到相关文章

最新更新