加载图像数据集

vis*_*iya 0 python image-manipulation tensorflow jupyter-notebook google-colaboratory

我正在尝试从包含超过 10M 个图像和 10K 个类的特定目录加载数据,但问题是我没有为所有类提供不同的目录,所有图像都只在一个目录中。我有一个包含 id 和标签的 CSV 文件标签。我正在尝试使用该VGG16模型。

CSV:
id,lable
abf20a,CAR
dsf8sd,BIKE
Run Code Online (Sandbox Code Playgroud)

这里 abf20a 是图像名称"abf20a.jpg"

所以请帮助我如何将图像和标签一起加载并使用VGG16

谢谢

维沙尔

Ani*_*ote 5

您可以使用 ImageDataGenerator 的 flow_from_dataframe 方法来加载使用 CSV 文件的图像。
代码:

import tensorflow as tf
import pandas as pd

df = pd.read_csv('data/img/new.csv')

# Data augmentation pipeline
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator()

# Reading files from path in data frame
train_ds = train_datagen.flow_from_dataframe(df,directory = 'data/img/new', x_col = 'filename', y_col = 'label')
Run Code Online (Sandbox Code Playgroud)

数据框如下所示:

    filename    label
0   Capture.PNG 0
Run Code Online (Sandbox Code Playgroud)

如果你的文件名中只有 id 。您可以使用 pandas apply 方法添加 jpg 扩展名。

df['id'] = df['id'].apply(lambda x: '{}.jpg'.format(x))
Run Code Online (Sandbox Code Playgroud)

对于 提供的完整的数据增强选项集ImageDataGenerator,您可以查看

对于完整的选项集flow_from_dataframe,你可以看看这个

有了这个,您不必担心标签不匹配,因为这是内置的 TensorFlow 方法。此外,文件会在必要时加载,从而避免主内存混乱。

对于培训,您可以简单地使用:

model.fit(
        train_ds,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_ds,
        validation_steps=800)
Run Code Online (Sandbox Code Playgroud)