Datasets documentation
Traiter les données d'image
Traiter les données d'image
Ce guide présente des méthodes spécifiques pour le traitement de jeux de données d'images. Apprenez à :
- Utiliser map() avec un jeu de données d'images.
- Appliquez des augmentations de données à un jeu de données avec set_transform().
Pour un guide sur la façon de traiter n'importe quel type de jeu de données, consultez le guide de processus général.
Carte
La fonction map() peut appliquer des transformations à l’ensemble d’un jeu de données.
Par exemple, créez une fonction Resize de base :
>>> def transforms(examples):
... examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
... return examplesUtilisez maintenant la fonction map() pour redimensionner l'ensemble de données complet, et définissez batched=True pour accélérer le processus en acceptant des lots d'exemples. La transformation renvoie pixel_values en tant qu'objet PIL.Image mise en cache :
>>> dataset = dataset.map(transforms, remove_columns=["image"], batched=True)
>>> dataset[0]
{'label': 6,
'pixel_values': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=100x100 at 0x7F058237BB10>}Le fichier de cache fait gagner du temps car il n’est pas nécessaire d’exécuter la même transformation deux fois. La fonction map() est idéale pour les opérations que vous n’exécutez qu’une seule fois par formation – comme le redimensionnement d’une image – plutôt que pour les opérations exécutées à chaque époque, comme les augmentations de données.
map() consomme une certaine quantité de mémoire, mais vous pouvez réduire ses besoins en mémoire à l’aide des paramètres suivants :
batch_sizedétermine le nombre d'exemples traités lors d'un seul appel à la fonction de transformation.writer_batch_sizedétermine le nombre d'exemples traités conservés en mémoire avant d'être stockés.
Les deux valeurs de paramètres sont par défaut 1000, ce qui peut être coûteux si vous stockez des images. Réduisez ces valeurs pour utiliser moins de mémoire lorsque vous utilisez map().
Appliquer des transformations
🤗 Datasets applique des augmentations de données de n'importe quelle bibliothèque ou package à votre jeu de données. Les transformations peuvent être appliquées à la volée sur des lots de données avec set_transform(), ce qui réduit l'espace disque consommé.
L'exemple suivant utilise torchvision, mais vous êtes libre d'utiliser d'autres bibliothèques d'augmentation de données telles que Albumentations, Kornia et imgaug.
Par exemple, si vous souhaitez modifier aléatoirement les propriétés de couleur d'une image :
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [
... ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
... ToTensor(),
... ]
... )Créez une fonction pour appliquer la transformation ColorJitter :
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examplesAppliquez la transformation avec la fonction set_transform() :
>>> dataset.set_transform(transforms)