Datasets 文档

创建图像数据集

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建图像数据集

创建和共享图像数据集有两种方法。本指南将向您展示如何

  • 使用 Dataset.push_to_hub() 从 Python 中的本地文件创建图像数据集。这是一种简单的方法,只需几个 Python 步骤。

  • 使用 ImageFolder 和一些元数据创建图像数据集。这是一种无需编码的解决方案,可快速创建包含数千张图像的数据集。

您可以通过要求用户先共享他们的联系信息来控制对数据集的访问。有关如何在 Hub 上启用此功能的更多信息,请参阅受保护的数据集指南。

ImageFolder

ImageFolder 是一个数据集构建器,旨在快速加载包含数千张图像的数据集,而无需您编写任何代码。

💡 查看 Split pattern hierarchy,了解 ImageFolder 如何根据您的数据集存储库结构创建数据集拆分。

ImageFolder 会根据目录名称自动推断您的数据集的类别标签。将您的数据集存储在类似以下的目录结构中

folder/train/dog/golden_retriever.png
folder/train/dog/german_shepherd.png
folder/train/dog/chihuahua.png

folder/train/cat/maine_coon.png
folder/train/cat/bengal.png
folder/train/cat/birman.png

如果数据集遵循 ImageFolder 结构,那么您可以使用 load_dataset() 直接加载它

>>> from datasets import load_dataset

>>> dataset = load_dataset("path/to/folder")

这等同于在 load_dataset() 中手动传递 imagefolder 并在 data_dir 中传递目录

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder")

您还可以使用 imagefolder 加载涉及多个拆分的数据集。为此,您的数据集目录应具有以下结构

folder/train/dog/golden_retriever.png
folder/train/cat/maine_coon.png
folder/test/dog/german_shepherd.png
folder/test/cat/bengal.png

如果所有图像文件都包含在单个目录中,或者它们不在同一目录结构级别上,则不会自动添加 label 列。如果需要,请明确设置 drop_labels=False

如果您想包含有关数据集的额外信息,例如文本标题或边界框,请将其添加为文件夹中的 metadata.csv 文件。这使您可以快速创建用于不同计算机视觉任务(如文本字幕或目标检测)的数据集。您也可以使用 JSONL 文件 metadata.jsonl 或 Parquet 文件 metadata.parquet

folder/train/metadata.csv
folder/train/0001.png
folder/train/0002.png
folder/train/0003.png

您还可以将图像打包成 zip 文件,在这种情况下,每个 zip 文件都应同时包含图像和元数据

folder/train.zip
folder/test.zip
folder/validation.zip

您的 metadata.csv 文件必须有一个 file_name*_file_name 字段,该字段将图像文件与其元数据链接起来

file_name,additional_feature
0001.png,This is a first value of a text feature you added to your images
0002.png,This is a second value of a text feature you added to your images
0003.png,This is a third value of a text feature you added to your images

或使用 metadata.jsonl

{"file_name": "0001.png", "additional_feature": "This is a first value of a text feature you added to your images"}
{"file_name": "0002.png", "additional_feature": "This is a second value of a text feature you added to your images"}
{"file_name": "0003.png", "additional_feature": "This is a third value of a text feature you added to your images"}

这里的 file_name 必须是元数据旁边图像文件的名称。更一般地说,它必须是从包含元数据的目录到图像文件的相对路径。

您的数据集中每行可以指向多个图像,例如,如果您的输入和输出都是图像

{"input_file_name": "0001.png", "output_file_name": "0001_output.png"}
{"input_file_name": "0002.png", "output_file_name": "0002_output.png"}
{"input_file_name": "0003.png", "output_file_name": "0003_output.png"}

您还可以定义图像列表。在这种情况下,您需要将字段命名为 file_names*_file_names。下面是一个例子

{"frames_file_names": ["0001_t0.png", "0001_t1.png"], label: "moving_up"}
{"frames_file_names": ["0002_t0.png", "0002_t1.png"], label: "moving_down"}
{"frames_file_names": ["0003_t0.png", "0003_t1.png"], label: "moving_right"}

图像字幕

图像字幕数据集包含描述图像的文本。一个示例 metadata.csv 可能如下所示

file_name,text
0001.png,This is a golden retriever playing with a ball
0002.png,A german shepherd
0003.png,One chihuahua

使用 ImageFolder 加载数据集,它将创建一个 text 列用于图像字幕

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"This is a golden retriever playing with a ball"

物体检测

目标检测数据集包含边界框和类别,用于识别图像中的对象。一个示例 metadata.jsonl 可能如下所示

{"file_name": "0001.png", "objects": {"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}}
{"file_name": "0002.png", "objects": {"bbox": [[810.0, 100.0, 57.0, 28.0]], "categories": [1]}}
{"file_name": "0003.png", "objects": {"bbox": [[160.0, 31.0, 248.0, 616.0], [741.0, 68.0, 202.0, 401.0]], "categories": [2, 2]}}

使用 ImageFolder 加载数据集,它将创建一个 objects 列,其中包含边界框和类别

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["objects"]
{"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}

将数据集上传到 Hub

创建数据集后,您可以使用 push_to_hub() 方法将其共享到 Hub。请确保您已安装 huggingface_hub 库,并且已登录到您的 Hugging Face 帐户(有关更多详细信息,请参阅 使用 Python 上传教程)。

使用 push_to_hub() 上传您的数据集

>>> from datasets import load_dataset

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/folder", split="train")
>>> dataset.push_to_hub("stevhliu/my-image-captioning-dataset")

WebDataset

WebDataset 格式基于 TAR 存档,适用于大型图像数据集。事实上,您可以将图像分组到 TAR 存档中(例如,每个 TAR 存档包含 1GB 的图像),并有数千个 TAR 存档。

folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...

在归档文件中,每个示例由共享相同前缀的文件组成

e39871fd9fd74f55.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.jpg
f18b91585c4d3f3e.json
ede6e66b2fb59aab.jpg
ede6e66b2fb59aab.json
ed600d57fcee4f94.jpg
ed600d57fcee4f94.json
...

您可以使用 JSON 或文本文件等格式来存放图像标签/字幕/边界框。

加载您的 WebDataset,它将为每个文件后缀(此处为“jpg”和“json”)创建一个列

>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", split="train")
>>> dataset[0]["json"]
{"bbox": [[302.0, 109.0, 73.0, 52.0]], "categories": [0]}

还可以像这样为一个示例包含多个图像

e39871fd9fd74f55.input.jpg
e39871fd9fd74f55.output.jpg
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.jpg
f18b91585c4d3f3e.output.jpg
f18b91585c4d3f3e.json
...

有关 WebDataset 格式和 Python 库的更多详情,请查阅 WebDataset 文档

在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.