Entenda como usar o RandAugment no PyTorch para aumentar a diversidade do seu conjunto de dados e melhorar o desempenho dos seus modelos de aprendizado de máquina. Este guia explica os argumentos e opções de configuração do RandAugment, além de exemplos práticos para você começar a usar hoje mesmo. Descubra como essa técnica de aumento de dados pode transformar seus projetos de deep learning.
O que é RandAugment em PyTorch?
O RandAugment é uma técnica de aumento de dados que aplica aleatoriamente uma série de transformações a imagens. Ele é projetado para melhorar a generalização dos modelos de aprendizado de máquina, expondo-os a uma variedade maior de exemplos durante o treinamento. Usando o RandAugment, você pode aumentar a robustez do seu modelo sem a necessidade de ajustar manualmente as transformações.
Para entender melhor como o RandAugment funciona no PyTorch, vamos explorar seus principais componentes e opções de configuração. Assim, você poderá implementá-lo de forma eficaz em seus projetos.
O RandAugment oferece uma abordagem flexível e automatizada para aumentar a diversidade do seu conjunto de dados. Ele permite que você controle a intensidade e a variedade das transformações aplicadas, adaptando-se às necessidades específicas do seu problema.
A chave para o sucesso do RandAugment reside na sua capacidade de equilibrar a aleatoriedade das transformações com a necessidade de manter a integridade das imagens. Ao ajustar os parâmetros corretamente, você pode evitar a criação de exemplos artificiais que prejudiquem o treinamento do seu modelo.
Como implementar o RandAugment no PyTorch
Para começar a usar o RandAugment em PyTorch, você precisa importar as bibliotecas necessárias e definir as transformações que serão aplicadas às suas imagens. O PyTorch fornece uma implementação fácil de usar do RandAugment, permitindo que você o integre rapidamente ao seu fluxo de trabalho de treinamento.
Os principais argumentos para inicializar o RandAugment são:
- num_ops: Define o número de operações (transformações) a serem aplicadas aleatoriamente a cada imagem. O valor padrão é 2.
- magnitude: Controla a intensidade das transformações. Deve ser um valor entre 0 e num_magnitude_bins – 1. O valor padrão é 9.
- num_magnitude_bins: Especifica o número de níveis de magnitude para cada transformação. Deve ser um valor maior ou igual a 1. O valor padrão é 31.
- interpolation: Define o modo de interpolação a ser usado durante as transformações geométricas. As opções incluem InterpolationMode.NEAREST e InterpolationMode.BILINEAR. O valor padrão é InterpolationMode.NEAREST.
- fill: Permite preencher áreas vazias criadas pelas transformações com um valor específico. Pode ser um número único ou uma tupla/lista com 1 ou 3 elementos. O valor padrão é None.
É importante notar que o argumento fill pode ser usado para alterar o fundo da imagem, o que pode ser útil em cenários onde o fundo é relevante para o problema. Se todos os valores de fill forem menores ou iguais a 0, o fundo será preto. Se todos os valores forem maiores ou iguais a 255, o fundo será branco.
Ao aplicar o RandAugment, certifique-se de que a imagem de entrada seja um objeto PIL Image ou um tensor 3D. Evite usar o argumento img= ao chamar o RandAugment.
A utilização da versão v2 do RandAugment é recomendada, conforme as diretrizes do PyTorch. Essa versão oferece melhor desempenho e flexibilidade em comparação com as versões anteriores.
Exemplos práticos de RandAugment
Para ilustrar o uso do RandAugment, considere o seguinte exemplo:
from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import RandAugment
from torchvision.transforms.functional import InterpolationMode
ra = RandAugment()
ra = RandAugment(num_ops=2, magnitude=9, num_magnitude_bins=31,
interpolation=InterpolationMode.NEAREST, fill=None)
ra
# RandAugment(interpolation=InterpolationMode.NEAREST,
# num_ops=2, magnitude=9, num_magnitude_bins=31)
ra.num_ops
# 2
ra.magnitude
# 9
ra.num_magnitude_bins
# 31
ra.interpolation
# <InterpolationMode.NEAREST: 'nearest'>
print(ra.fill)
# None
Neste exemplo, o RandAugment é inicializado com os valores padrão para num_ops, magnitude e num_magnitude_bins. O modo de interpolação é definido como InterpolationMode.NEAREST, e o valor de preenchimento é None.
Para aplicar o RandAugment a um conjunto de dados, você pode usar o seguinte código:
origin_data = OxfordIIITPet(
root="data",
transform=None
)
noargs_data = OxfordIIITPet( # `noargs` is no arguments.
root="data",
transform=RandAugment()
)
fgray_data = OxfordIIITPet( # `f` is fill.
root="data",
transform=RandAugment(fill=150)
# transform=RandAugment(fill=[150])
)
fpurple_data = OxfordIIITPet(
root="data",
transform=RandAugment(fill=[160, 32, 240])
)
Neste exemplo, o RandAugment é aplicado ao conjunto de dados OxfordIIITPet com diferentes valores para o argumento fill. Isso permite que você explore o impacto do preenchimento das áreas vazias nas imagens aumentadas.
Para visualizar as imagens aumentadas, você pode usar o seguinte código:
import matplotlib.pyplot as plt
def show_images1(data, main_title=None):
plt.figure(figsize=[10, 5])
plt.suptitle(t=main_title, y=0.8, fontsize=14)
for i, (im, _) in zip(range(1, 6), data):
plt.subplot(1, 5, i)
plt.imshow(X=im)
plt.xticks(ticks=[])
plt.yticks(ticks=[])
plt.tight_layout()
plt.show()
show_images1(data=origin_data, main_title="origin_data")
print()
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
show_images1(data=noargs_data, main_title="noargs_data")
print()
show_images1(data=fgray_data, main_title="fgray_data")
show_images1(data=fpurple_data, main_title="fpurple_data")
Este código exibe as imagens originais e as imagens aumentadas com diferentes valores de fill. Isso permite que você avalie visualmente o impacto do RandAugment no seu conjunto de dados.
Técnicas avançadas com RandAugment no PyTorch
Além das configurações básicas, o RandAugment oferece opções avançadas para ajustar o comportamento das transformações. Por exemplo, você pode definir diferentes valores de magnitude para cada transformação, permitindo que você controle a intensidade de cada uma individualmente.
Outra técnica avançada é o uso de um agendamento de magnitude. Isso permite que você altere a intensidade das transformações ao longo do treinamento, começando com valores mais baixos e aumentando gradualmente. Isso pode ajudar a evitar o sobreajuste e melhorar a generalização do seu modelo.
Você também pode combinar o RandAugment com outras técnicas de aumento de dados, como MixUp e CutMix. Essas técnicas criam exemplos sintéticos combinando diferentes imagens do conjunto de dados, o que pode aumentar ainda mais a diversidade dos dados de treinamento.
É importante experimentar diferentes configurações e técnicas para encontrar a combinação ideal para o seu problema. O RandAugment é uma ferramenta poderosa, mas seu sucesso depende da sua capacidade de adaptá-lo às necessidades específicas do seu projeto.
Primeira: Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.