图像数据集
本指南将向您展示如何使用图像文件配置数据集存储库。您可以在此图像数据集示例集合中找到存储库的配套示例。
具有支持的结构和文件格式的数据集会在其 Hub 页面上自动显示数据集查看器。
只要您将图像的附加信息(例如标题或用于对象检测的边界框)包含在元数据文件 (metadata.csv
/metadata.jsonl
) 中,就会自动加载这些信息。
或者,图像可以采用 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 it's 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 it's face"}
相对路径
元数据文件必须与它链接的图像位于同一目录中,或者位于任何父目录中,例如在此示例中
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
元数据文件不能放在包含图像的目录的子目录中。
图像分类
对于图像分类数据集,您还可以使用简单的设置:使用目录来命名图像类。将您的图像文件存储在如下所示的目录结构中
my_dataset_repository/
├── green
│ ├── 1.jpg
│ └── 2.jpg
└── red
├── 3.jpg
└── 4.jpg
使用此结构创建的数据集包含两列:image
和 label
(值分别为 green
和 red
)。
您还可以提供多个拆分。为此,您的数据集目录应具有以下结构(请参阅文件名和拆分以获取更多信息)
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 # Name of the dataset subset, if applicable.
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
图像列的类型为 struct,具有用于图像数据的二进制字段 "bytes"
和用于图像文件名或路径的字符串字段 "path"
。您应该直接在 README 标头的 YAML 中指定列的特征类型,例如
dataset_info:
features:
- name: image
dtype: image
- name: caption
dtype: string
或者,可以通过使用 datasets
库将列类型设置为 Image()
并使用 .to_parquet(...)
方法或 .push_to_hub(...)
来创建具有图像数据的 Parquet 文件。您可以在 此处 找到有关在 datasets
中加载图像数据集的指南。