跳到主要内容

图像数据集

本指南将向你展示如何配置包含图像文件的数据集仓库。你可以在此图像数据集示例集合中找到配套的仓库示例。

具有支持的结构和文件格式的数据集会在 Hub 上的页面自动拥有数据集查看器。

有关图像的附加信息(例如用于目标检测的标题或边界框)会自动加载,只要你将此信息包含在元数据文件(metadata.csv/metadata.jsonl/metadata.parquet)中。

或者,图像可以位于 Parquet 文件中,或位于遵循 WebDataset 格式的 TAR 归档文件中。

仅图像

如果你的数据集仅包含一个图像列,你可以简单地将图像文件存储在根目录:

my_dataset_repository/
├── 1.jpg
├── 2.jpg
├── 3.jpg
└── 4.jpg

或存储在子目录中:

my_dataset_repository/
└── images
├── 1.jpg
├── 2.jpg
├── 3.jpg
└── 4.jpg

同时支持多种格式,包括 PNG、JPEG、TIFF 和 WebP。

my_dataset_repository/
└── images
├── 1.jpg
├── 2.png
├── 3.tiff
└── 4.webp

如果你有多个切分,可以将图像放在相应命名的目录中:

my_dataset_repository/
├── train
│ ├── 1.jpg
│ └── 2.jpg
└── test
├── 3.jpg
└── 4.jpg

有关更多信息和其他按切分组织数据的方法,请参阅文件名和切分

附加列

如果你想要包含有关数据集的附加信息(例如文本标题或边界框),请将其作为 metadata.csv 文件添加到仓库中。这使你可以快速创建用于不同计算机视觉任务的数据集,如文本标题生成目标检测

my_dataset_repository/
└── train
├── 1.jpg
├── 2.jpg
├── 3.jpg
├── 4.jpg
└── metadata.csv

你的 metadata.csv 文件必须有一个 file_name 列,用于将图像文件与其元数据链接:

file_name,text
1.jpg,a drawing of a green pokemon with red eyes
2.jpg,a green and yellow toy with a red nose
3.jpg,a red and white ball with an angry look on its face
4.jpg,a cartoon ball with a smile on its face

你也可以使用 JSONL 文件 metadata.jsonl

{"file_name": "1.jpg","text": "a drawing of a green pokemon with red eyes"}
{"file_name": "2.jpg","text": "a green and yellow toy with a red nose"}
{"file_name": "3.jpg","text": "a red and white ball with an angry look on its face"}
{"file_name": "4.jpg","text": "a cartoon ball with a smile on its face"}

对于更大的数据集,或者如果你对高级数据检索功能感兴趣,可以使用 Parquet 文件 metadata.parquet

相对路径

元数据文件必须位于与其链接的图像相同的目录中,或位于任何父目录中,如以下示例:

my_dataset_repository/
└── train
├── images
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ └── 4.jpg
└── metadata.csv

在这种情况下,file_name 列必须是图像的完整相对路径,而不仅仅是文件名:

file_name,text
images/1.jpg,a drawing of a green pokemon with red eyes
images/2.jpg,a green and yellow toy with a red nose
images/3.jpg,a red and white ball with an angry look on its face
images/4.jpg,a cartoon ball with a smile on it's face

元数据文件不能放在包含图像的目录的子目录中。

更一般地说,任何名为 file_name*_file_name 的列都应包含图像的完整相对路径。

图像分类

对于图像分类数据集,你也可以使用简单的设置:使用目录来命名图像类别。将图像文件存储在如下目录结构中:

my_dataset_repository/
├── green
│ ├── 1.jpg
│ └── 2.jpg
└── red
├── 3.jpg
└── 4.jpg

使用此结构创建的数据集包含两列:imagelabel(值为 greenred)。

你也可以提供多个切分。为此,数据集目录应具有以下结构(有关更多信息,请参阅文件名和切分):

my_dataset_repository/
├── test
│ ├── green
│ │ └── 2.jpg
│ └── red
│ └── 4.jpg
└── train
├── green
│ └── 1.jpg
└── red
└── 3.jpg

你可以在 YAML 配置中禁用 label 列的自动添加。如果你的目录名称没有特殊含义,请在 README 标头中设置 drop_labels: true

configs:
- config_name: default # 数据集子集的名称(如果适用)。
drop_labels: true

大规模数据集

WebDataset 格式

WebDataset 格式非常适合大规模图像数据集(例如,参见 timm/imagenet-12k-wds)。 它由包含图像及其元数据的 TAR 归档文件组成,并针对流式传输进行了优化。如果你有大量图像并希望获得用于大规模训练的流式数据加载器,这很有用。

my_dataset_repository/
├── train-0000.tar
├── train-0001.tar
├── ...
└── train-1023.tar

要创建 WebDataset TAR 归档文件,请创建一个包含要归档的图像和元数据文件的目录,然后使用例如 tar 命令创建 TAR 归档文件。 每个归档文件的通常大小通常约为 1GB。 确保每个图像和元数据对共享相同的文件前缀,例如:

train-0000/
├── 000.jpg
├── 000.json
├── 001.jpg
├── 001.json
├── ...
├── 999.jpg
└── 999.json

请注意,为了方便用户并启用数据集查看器,Hub 上托管的每个数据集都会自动转换为 Parquet 格式,最多 5GB。 在 Parquet 格式文档中了解更多信息。

Parquet 格式

你可以将所有内容嵌入 Parquet 文件中,而不是将图像和元数据作为单独的文件上传。 如果你有大量图像,想要嵌入多个图像列,或者想要在同一文件中存储有关图像的附加信息,这很有用。 Parquet 对于存储原始字节等数据也很有用,这些数据不受 JSON/CSV 支持。

my_dataset_repository/
└── train.parquet

可以使用 pandasdatasets 库创建包含图像数据的 Parquet 文件。要在 pandas 中创建包含图像数据的 Parquet 文件,可以使用 pandas-image-methodsdf.to_parquet()。在 datasets 中,你可以将列类型设置为 Image() 并使用 ds.to_parquet(...) 方法或 ds.push_to_hub(...)。你可以在这里找到在 datasets 中加载图像数据集的指南。

或者,你可以手动设置使用其他工具创建的 Parquet 的图像类型。首先,确保你的图像列是 struct 类型,其中 "bytes" 字段用于图像数据,"path" 字符串字段用于图像文件名或路径。然后,你应该在 README 标头的 YAML 中直接指定列的特征类型,例如:

dataset_info:
features:
- name: image
dtype: image
- name: caption
dtype: string

请注意,Parquet 推荐用于小图像(每个图像 <1MB)和小行组(每个行组 100 行,这是 datasets 用于图像的方式)。对于较大的图像,建议使用 WebDataset 格式,或共享原始图像文件(可选地带有元数据文件,并遵循仓库建议和限制以了解存储和文件数量)。