Datasets documentation
Processar dados de imagem
Processar dados de imagem
Este guia mostra métodos específicos para processar conjuntos de dados de imagens. Aprenda como:
- Use map() com um conjunto de dados de imagens.
- Aplique aumentos de dados a um conjunto de dados com set_transform().
Para um guia sobre como processar qualquer tipo de conjunto de dados, confira o guia de processo geral.
Map
A função map() pode aplicar transformações em um conjunto de dados inteiro.
Por exemplo, crie uma função básica Resize:
>>> def transforms(examples):
... examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
... return examplesAgora use a função map() para redimensionar todo o conjunto de dados e defina batched=True para acelerar o processo, aceitando lotes de exemplos. A transformação retorna pixel_values como um objeto PIL.Image que pode ser armazenado em 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>}O arquivo de cache economiza tempo, pois você não precisa executar a mesma transformação duas vezes. A função map() é ideal para operações que você executa apenas uma vez por treinamento - como redimensionar uma imagem - em vez de usá-la para operações executadas a cada época, como aumentos de dados.
map() ocupa alguma memória, mas você pode reduzir seus requisitos de memória com os seguintes parâmetros:
batch_sizedetermina o número de exemplos processados em uma única chamada à função de transformação.writer_batch_sizedetermina o número de exemplos processados que são mantidos na memória antes de serem armazenados.
Os valores padrão de ambos os parâmetros são 1000, o que pode ser custoso se você estiver armazenando imagens. Reduza esses valores para usar menos memória ao usar map().
Aplicar transformações
🤗 O Datasets aplica aumentos de dados de qualquer biblioteca ou pacote ao seu dataset. As transformações podem ser aplicadas em tempo real em lotes de dados com set_transform(), o que consome menos espaço em disco.
O exemplo a seguir usa torchvision, mas sinta-se à vontade para usar outras bibliotecas de aumento de dados, como Albumentations, Kornia e imgaug.
Por exemplo, se você quiser alterar as propriedades de cor de uma imagem aleatoriamente:
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor
>>> jitter = Compose(
... [
... ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
... ToTensor(),
... ]
... )Crie uma função para aplicar a transformação ColorJitter:
>>> def transforms(examples):
... examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
... return examplesAplique a transformação com a função set_transform():
>>> dataset.set_transform(transforms)