加载图像数据集
Load Image Dataset
我正在尝试从包含超过 1000 万张图像和 10K 类 的特定目录加载数据,但问题是我没有针对所有 类 的不同目录,所有图像仅在一个目录中。我有一个包含 ID 和标签的 CSV 文件标签。我正在尝试使用 VGG16
模型。
CSV:
id,lable
abf20a,CAR
dsf8sd,BIKE
这里abf20a是图片名称"abf20a.jpg"
所以请在这里帮助我如何一起加载图像和标签并使用 VGG16
训练模型
谢谢
维沙尔
- 使用
os.walk(directory)
按字母顺序获取文件名列表
- 读取 csv 文件并生成
labels_list
列表,其中 class 标签与文件名的顺序相同。
使用
- 使用
tf.keras.preprocessing.image_dataset_from_directory()
和参数 label=labels_list
这将为您提供一个 tf.data.Dataset
,您可以将其提供给训练函数。
我认为您可以使用 ID 标签迭代 csv 文件来读取图像。
例如:
import csv
csv_path = 'your_csv_path'
images_base_path = 'your_images_path'
images=[]
labels=[]
with open(csv_path, newline='',encoding="utf8") as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
# And than you can do like this:
# images_complete_path = images_base_path + row[0]
# images.append(imread(images_complete_path))
# labels.append(row[1])
然后你获得图像和标签。
这只是一个想法,你可以很容易地实现它。
希望对你有帮助。
您可以使用 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')
Dataframe 如下所示:
filename label
0 Capture.PNG 0
如果您的文件名中只有 id。您可以使用 pandas apply 方法添加 jpg 扩展名。
df['id'] = df['id'].apply(lambda x: '{}.jpg'.format(x))
对于ImageDataGenerator
提供的一整套数据增强选项,您可以查看this。
关于 flow_from_dataframe
的完整选项集,您可以查看 this。
有了这个,您不必担心标签不匹配,因为这是一种内置的 TensorFlow 方法。此外,文件会在必要时加载,这避免了主内存混乱。
对于培训,您可以简单地使用:
model.fit(
train_ds,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_ds,
validation_steps=800)
我正在尝试从包含超过 1000 万张图像和 10K 类 的特定目录加载数据,但问题是我没有针对所有 类 的不同目录,所有图像仅在一个目录中。我有一个包含 ID 和标签的 CSV 文件标签。我正在尝试使用 VGG16
模型。
CSV:
id,lable
abf20a,CAR
dsf8sd,BIKE
这里abf20a是图片名称"abf20a.jpg"
所以请在这里帮助我如何一起加载图像和标签并使用 VGG16
谢谢
维沙尔
- 使用
os.walk(directory)
按字母顺序获取文件名列表
- 读取 csv 文件并生成
labels_list
列表,其中 class 标签与文件名的顺序相同。 使用 - 使用
tf.keras.preprocessing.image_dataset_from_directory()
和参数label=labels_list
这将为您提供一个 tf.data.Dataset
,您可以将其提供给训练函数。
我认为您可以使用 ID 标签迭代 csv 文件来读取图像。 例如:
import csv
csv_path = 'your_csv_path'
images_base_path = 'your_images_path'
images=[]
labels=[]
with open(csv_path, newline='',encoding="utf8") as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
# And than you can do like this:
# images_complete_path = images_base_path + row[0]
# images.append(imread(images_complete_path))
# labels.append(row[1])
然后你获得图像和标签。 这只是一个想法,你可以很容易地实现它。 希望对你有帮助。
您可以使用 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')
Dataframe 如下所示:
filename label
0 Capture.PNG 0
如果您的文件名中只有 id。您可以使用 pandas apply 方法添加 jpg 扩展名。
df['id'] = df['id'].apply(lambda x: '{}.jpg'.format(x))
对于ImageDataGenerator
提供的一整套数据增强选项,您可以查看this。
关于 flow_from_dataframe
的完整选项集,您可以查看 this。
有了这个,您不必担心标签不匹配,因为这是一种内置的 TensorFlow 方法。此外,文件会在必要时加载,这避免了主内存混乱。
对于培训,您可以简单地使用:
model.fit(
train_ds,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_ds,
validation_steps=800)