Hub documentation

Набор данных изображений

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Набор данных изображений

В этом руководстве показано, как настроить репозиторий набора данных с файлами изображений. Примеры соответствующих репозиториев можно найти в этой коллекции примеров наборов данных с изображениями.

Набор данных с поддерживаемой структурой и форматами файлов автоматически получает Dataset Viewer на своей странице в Hub.

Дополнительная информация о ваших изображениях — например, подписи или ограничивающие рамки для обнаружения объектов — загружается автоматически, если вы включите эти данные в файл метаданных (metadata.csv/metadata.jsonl/metadata.parquet).

В качестве альтернативы изображения могут храниться в файлах Parquet или в TAR-архивах, следующих формату WebDataset.

Только изображения

Если ваш набор данных состоит только из одного столбца с изображениями, вы можете просто сохранить файлы изображений в корне:

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

Набор данных, созданный с этой структурой, содержит две колонки: image и label (со значениями green и red).

Вы также можете указать несколько разбиений. Для этого каталог вашего набора данных должен иметь следующую структуру (см. Имена файлов и разбиения для получения дополнительной информации):

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

Вы можете отключить автоматическое добавление столбца label в YAML-конфигурации. Если имена ваших каталогов не имеют специального значения, установите drop_labels: true в заголовке README:

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

Чтобы создать TAR-архив WebDataset, создайте каталог, содержащий изображения и файлы метаданных, которые нужно архивировать, и создайте TAR-архив, например, с помощью команды tar. Обычный размер одного архива составляет примерно 1 ГБ. Убедитесь, что каждая пара «изображение-метаданные» имеет одинаковый префикс имени файла, например:

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

Обратите внимание, что для удобства пользователей и для обеспечения работы Dataset Viewer каждый датасет, размещённый в Hub, автоматически конвертируется в формат Parquet при размере до 5 ГБ. Подробнее об этом читайте в документации Parquet format.

Формат Parquet

Вместо загрузки изображений и метаданных в виде отдельных файлов вы можете встроить всё в файл Parquet. Это полезно, если у вас большое количество изображений, если вы хотите встроить несколько столбцов с изображениями или если вы хотите хранить дополнительную информацию об изображениях в том же файле. Parquet также полезен для хранения данных, таких как необработанные байты, которые не поддерживаются в JSON/CSV.

my_dataset_repository/
└── train.parquet

Файлы Parquet с данными изображений можно создать с помощью pandas или библиотеки datasets. Чтобы создать файлы Parquet с данными изображений в pandas, можно использовать pandas-image-methods и df.to_parquet(). В datasets можно задать тип столбца как Image() и использовать метод ds.to_parquet(...) или ds.push_to_hub(...). Руководство по загрузке наборов данных с изображениями в datasets можно найти здесь.

В качестве альтернативы можно вручную задать тип изображения для Parquet-файла, созданного с помощью других инструментов. Во-первых, убедитесь, что ваши столбцы с изображениями имеют тип struct, с двоичным полем "bytes" для данных изображения и строковым полем "path" для имени или пути к файлу изображения. Затем вам нужно указать типы признаков столбцов непосредственно в YAML в заголовке README, например:

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

Обратите внимание, что формат Parquet рекомендуется для небольших изображений (<1 МБ на изображение) и небольших групп строк (100 строк на группу, что используется в datasets для изображений). Для более крупных изображений рекомендуется использовать формат WebDataset или разделять исходные файлы изображений (при необходимости с файлами метаданных, соблюдая рекомендации и ограничения репозиториев по хранению и количеству файлов).

Update on GitHub