Hub documentation
Jeu de données d'images
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.jpgou dans un sous-répertoire :
my_dataset_repository/
└── images
├── 1.jpg
├── 2.jpg
├── 3.jpg
└── 4.jpgPlusieurs formats sont pris en charge simultanément, notamment PNG, JPEG, TIFF et WebP.
my_dataset_repository/
└── images
├── 1.jpg
├── 2.png
├── 3.tiff
└── 4.webpSi 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.jpgVoir 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.csvVotre 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 faceVous 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.csvDans 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 faceLes 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.jpgLe 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.jpgVous 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: trueJeux 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.tarPour 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.jsonNotez 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.parquetLes 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: stringNotez 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).