【问题标题】:Can I extract labels of an image dataset from image names using Keras for CNN?我可以使用 Keras for CNN 从图像名称中提取图像数据集的标签吗?
【发布时间】:2021-08-03 16:20:11
【问题描述】:

我想设计一个 CNN 模型来对包含 200,000 种不同字体和字母的图像数据集进行分类。图像位于 8 个不同的文件夹中,文件夹名称为 1 类到 8 类。我想对这个文件夹中的图像进行分类,以了解图像显示的字母。如果没有任何显示字母的文件,我怎么能做到这一点?

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  directory, label = None, 
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(32, 32),
  batch_size=batch_size
  )

我使用此代码将我的数据集用于训练和验证。 我的目录是这样的

main_directory/
...class_a/
......a_image_1.jpg
.
.
......a_image_1000.jpg
......b_image_1.jpg
.
......b_image_1000.jpg
.
.
.
......y_image_1.jpg
.
.
......y_image_1000.jpg
......z_image_1.jpg
.
.
......z_image_1000.jpg
...class_b/
......a_image_1000.jpg
.
.
......a_image_2000.jpg
......b_image_1000.jpg
.
......b_image_2000.jpg
.
.
.
......y_image_1000.jpg
.
.
......y_image_2000.jpg
......z_image_1000.jpg
.
.
......z_image_2000.jpg

这不会让我看到带有train_ds的标签

【问题讨论】:

  • 这里 keras 使用基于目录隔离的标签,希望你已经看到示例 FYI machinelearningmastery.com/…
  • 如果您使用 train_ds.classes,您将能够看到我猜的标签,您检查了吗?
  • @Nagakiran 的主要问题是文件夹的名称不是标签。每个图像的标签是图像名称。所以 train_ds.classes 找不到那些标签
  • 请用os的手动程序,shutil来分离基于名称标签的图像,keras不会一次加载整个训练数据,所以只有文件夹结构,它不能有基于命名的分解。跨度>
  • @Nagakiran 谢谢你的帮助

标签: python tensorflow keras deep-learning conv-neural-network


【解决方案1】:

Keras 通常不会一次加载所有数据以节省内存,它不能有naming disintegration.

由于文件未排序,您可以尝试使用下面的 sn-p 和 shutilos 来相应地隔离文件并加载基于 data generators 的文件夹以将数据提供给模型

import os
from shutil import move

folder = 'data folder path'
for clas in os.listdir(folder):
    for file in os.listdir(os.path.join(folder, clas)):
        class_label = file.split('_')[0]
        class_folder = os.path.join(folder, 'class_{}'.format(class_label))
        os.makedirs(class_folder, exist_ok=True)
        move(os.path.join(folder,clas, file), os.path.join(folder, class_folder, file))




# load and iterate training dataset
train_it = datagen.flow_from_directory('data/train/', class_mode='binary', batch_size=64)
# load and iterate validation dataset
val_it = datagen.flow_from_directory('data/validation/', class_mode='binary', batch_size=64)
# load and iterate test dataset
test_it = datagen.flow_from_directory('data/test/', class_mode='binary', batch_size=64)

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2023-03-16
    • 2012-04-24
    • 2020-10-21
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多