Hub documentation

Jeu de données d'images

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Jeu de données d'images

Ce guide vous montre comment configurer votre dépôt de jeu de données avec des fichiers d’images. Vous trouverez des exemples de dépôts accompagnants dans cette collection d’exemples de jeux de données d’images.

Un jeu de données doté d'une structure prise en charge et de formats de fichiers appropriés dispose automatiquement d'un visualiseur de jeu de données sur sa page du Hub.

Des informations supplémentaires sur vos images - telles que des légendes ou des boîtes englobantes pour la détection d'objets - sont chargées automatiquement dès lors que vous incluez ces informations dans un fichier de métadonnées (metadata.csv/metadata.jsonl/metadata.parquet).

Alternativement, les images peuvent être contenues dans des fichiers Parquet ou dans des archives TAR suivant le format WebDataset.

Images uniquement

Si votre jeu de données ne comporte qu'une seule colonne d'images, vous pouvez simplement stocker vos fichiers d'images à la racine :

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

ou dans un sous-répertoire :

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

Plusieurs formats sont pris en charge simultanément, notamment PNG, JPEG, TIFF et WebP.

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

Si vous avez plusieurs splits, vous pouvez placer vos images dans des répertoires nommés en conséquence :

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

Voir Noms de fichiers et splits pour plus d’informations et d’autres façons d’organiser les données par splits.

Colonnes supplémentaires

Si vous souhaitez inclure des informations supplémentaires sur votre jeu de données, comme des légendes de texte ou des boîtes englobantes, ajoutez-les sous forme de fichier metadata.csv dans votre dépôt. Cela vous permet de créer rapidement des jeux de données pour différentes tâches de vision par ordinateur, comme la légende de texte ou la détection d’objets.

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

Votre fichier metadata.csv doit contenir une colonne file_name qui associe les fichiers d’images à leurs métadonnées :

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

Vous pouvez également utiliser un fichier 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"}

Et pour des jeux de données plus volumineux ou si vous êtes intéressé par des fonctionnalités avancées de récupération de données, vous pouvez utiliser un fichier Parquet metadata.parquet.

Chemins relatifs

Le fichier de métadonnées doit se trouver soit dans le même répertoire que les images auxquelles il est lié, soit dans un répertoire parent, comme dans cet exemple :

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

Dans ce cas, la colonne file_name doit contenir un chemin relatif complet vers les images, et non simplement le nom du fichier :

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

Les fichiers de métadonnées ne peuvent pas être placés dans des sous-répertoires d'un répertoire contenant les images.

Plus généralement, toute colonne nommée file_name ou *_file_name doit contenir le chemin relatif complet vers les images.

Classification d'images

Pour les jeux de données de classification d'images, vous pouvez également utiliser une configuration simple : utilisez des répertoires pour nommer les classes d'images. Stockez vos fichiers d'images dans une structure de répertoires comme :

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

Le jeu de données créé avec cette structure contient deux colonnes : image et label (avec les valeurs green et red).

Vous pouvez également fournir plusieurs splits. Pour ce faire, votre répertoire de jeu de données doit avoir la structure suivante (voir Noms de fichiers et splits pour plus d’informations) :

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

Vous pouvez désactiver cette ajout automatique de la colonne label dans la configuration YAML. Si les noms de vos répertoires n’ont pas de signification particulière, définissez drop_labels: true dans l’en-tête du README :

configs:
  - config_name: default  # Name of the dataset subset, if applicable.
    drop_labels: true

Jeux de données à grande échelle

Format WebDataset

Le format WebDataset est bien adapté aux grands jeux de données d'images (voir par exemple timm/imagenet-12k-wds). Il se compose d'archives TAR contenant des images et leurs métadonnées, et est optimisé pour le streaming. Il est utile si vous disposez d'un grand nombre d'images et souhaitez utiliser des chargeurs de données en streaming pour l'entraînement à grande échelle.

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

Pour créer une archive TAR WebDataset, créez un répertoire contenant les images et les fichiers de métadonnées à archiver, puis créez l'archive TAR à l'aide, par exemple, de la commande tar. La taille habituelle par archive est généralement d'environ 1 Go. Assurez-vous que chaque paire image/métadonnées partage le même préfixe de fichier, par exemple :

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

Notez que, pour la commodité des utilisateurs et afin de permettre le Dataset Viewer, chaque jeu de données hébergé sur le Hub est automatiquement converti au format Parquet jusqu'à 5 Go. En savoir plus à ce sujet dans la documentation du Parquet format.

Format Parquet

Au lieu de téléverser les images et les métadonnées en tant que fichiers individuels, vous pouvez intégrer l’ensemble dans un fichier Parquet. Cela est utile si vous disposez d’un grand nombre d’images, si vous souhaitez intégrer plusieurs colonnes d’images, ou si vous voulez stocker des informations supplémentaires sur les images dans le même fichier. Parquet est également pratique pour stocker des données telles que des octets bruts, ce qui n’est pas pris en charge par JSON/CSV.

my_dataset_repository/
└── train.parquet

Les fichiers Parquet contenant des données d’images peuvent être créés à l’aide de pandas ou de la bibliothèque datasets. Pour créer des fichiers Parquet avec des données d’images dans pandas, vous pouvez utiliser pandas-image-methods et df.to_parquet(). Dans datasets, vous pouvez définir le type de colonne sur Image() et utiliser la méthode ds.to_parquet(...) ou ds.push_to_hub(...). Vous trouverez un guide sur le chargement de jeux de données d’images dans datasets ici.

Vous pouvez également définir manuellement le type d’image des fichiers Parquet créés à l’aide d’autres outils. Assurez-vous d’abord que vos colonnes d’images sont de type struct, avec un champ binaire "bytes" pour les données de l’image et un champ chaîne "path" pour le nom ou le chemin du fichier image. Vous devez ensuite spécifier les types de fonctionnalités des colonnes directement dans le YAML de l’en-tête du README, par exemple :

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

Notez que Parquet est recommandé pour les petites images (<1 Mo par image) et les petits groupes de lignes (100 lignes par groupe de lignes, ce que datasets utilise pour les images). Pour les images plus volumineuses, il est recommandé d’utiliser le format WebDataset, ou de partager les fichiers d’images d’origine (éventuellement avec des fichiers de métadonnées, et en suivant les recommandations et limites des dépôts pour le stockage et le nombre de fichiers).

Update on GitHub