Datasets documentation
Procesar datos de imagen
Procesar datos de imagen
Esta guía muestra métodos específicos para procesar conjuntos de datos de imágenes. Aprenda a:
- Usa map() con un conjunto de datos de imágenes.
- Aplica aumentos de datos a un conjunto de datos con set_transform().
Para una guía sobre cómo procesar cualquier tipo de conjunto de datos, consulta la guía de proceso general.
Map
La función map() puede aplicar transformaciones a un conjunto de datos completo.
Por ejemplo, crea una función básica Resize:
>>> def transforms(examples):
... examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
... return examplesAhora usa la función map() para redimensionar todo el conjunto de datos y establece batched=True para acelerar el proceso aceptando lotes de ejemplos. La transformación devuelve pixel_values como un objeto PIL.Image que se puede almacenar en caché:
>>> 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>}El archivo de caché ahorra tiempo porque no es necesario ejecutar la misma transformación dos veces. La función map() es la más adecuada para operaciones que se ejecutan una sola vez por entrenamiento, como el redimensionado de una imagen, en lugar de usarla para operaciones que se ejecutan en cada época, como las aumentaciones de datos.
map() ocupa cierta cantidad de memoria, pero puedes reducir sus requisitos de memoria con los siguientes parámetros:
batch_sizedetermina el número de ejemplos que se procesan en una sola llamada a la función de transformación.writer_batch_sizedetermina el número de ejemplos procesados que se mantienen en memoria antes de ser almacenados.
Ambos valores de parámetros tienen un valor predeterminado de 1000, lo cual puede ser costoso si estás almacenando imágenes. Reduce estos valores para usar menos memoria cuando uses map().
Aplicar transformaciones
🤗 Datasets aplica aumentos de datos de cualquier biblioteca o paquete a tu conjunto de datos. Las transformaciones se pueden aplicar al vuelo en lotes de datos con set_transform(), lo que consume menos espacio en disco.
El siguiente ejemplo utiliza torchvision, pero puede utilizar libremente otras bibliotecas de aumento de datos como Albumentations, Kornia y imgaug.
Por ejemplo, si desea cambiar las propiedades de color de una imagen de forma aleatoria:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [
... ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
... ToTensor(),
... ]
... )Crea una función para aplicar la transformación ColorJitter:
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examplesAplica la transformación con la función set_transform():
>>> dataset.set_transform(transforms)