Agora, sobre as redes geradoras adversárias ou GANs. As GANs são uma técnica mais avançada. Nesse caso, é como se precisássemos gerar dinheiro, uma delas fosse um criminoso e outra um policial.
Primeiro o criminoso começa a gerar o que ele acha que é dinheiro e é totalmente falso, mas para o policial está ok, porque ele nunca viu dinheiro antes. Mas aí o departamento começa a ensinar para o policial como o dinheiro é, de modo que ele vai aprender a distinguir o que é dinheiro verdadeiro do falso. Ainda assim, o policial é desligado e ele vai deixando o criminoso gerar mais dinheiro falso. Vai deixando tanto que o criminoso se aprimora tanto em gerar dinheiro que fica difícil para o policial saber qual dinheiro é falso e qual é real.
Nesse caso, o policial é o descriminador numa GAN e o criminoso o gerador. Ou seja, você terá uma rede discriminadora que irá receber imagens geradas por outra rede e imagens reais, você vai "rodar" o aprendizado até ficar difícil de distinguir as duas.
Montar essa estrutura exige mais gasto computacional, maior processamento, e eu sugiro usar caso não esteja suprindo as necessidades da classificação com as técnicas mais simples acima.
Seria melhor se com as alterações nas imagens já desse para resolver. Caso não dê, pode ser necessário usar uma GAN, mas também há outras alternativas mais complexas que as alterações de imagens, só que não tão complexas quanto as GANs que são os codificadores automáticos ou autoencoders.
Os autoencoders pegam uma imagem e tentam reproduzi-la da maneira mais fiel possível, nisso, ela sai um pouco diferente e você pode usá-la para aumentar seus dados. Elas fazem isso tendo uma camada de codificação, uma camada oculta, e outra de decodificação, mas diferente do que fazemos no curso, a camada oculta tem menos unidades do que as necessárias para processar as imagens, o que faz com que ela extraia algumas características e deixe outras de lado, modificando a imagem.
Algumas pessoas acham que os autoencoders deixaram a desejar, modificando pouco as imagens, então há também os autoencoders de variabilidade ou VAEs, que são como os autoencoders, mas na sua camada oculta mudam como vão processar as informações das imagens usando algum tipo de distribuição da probabilidade como a distribuição normal. Essa distribuição acontecerá dentro de cada nó e depois quando chegar na saída da rede, a saída tentará formar uma imagem similar ao que recebeu.
Você pode encontrar estruturas de autoencoders já prontas no github, ou pode montá-las, tem tutoriais pela rede.
E sobre a CNN ou rede neural de convolução, ela vai pegar pedaços da imagem, alterar seus valores e reconstituir a imagem, mas para extrair suas características e reconhecer essas características ao invés de gerar novas imagens. Como as CNN geralmente são boas em reconhecer imagens de ângulos, tamanho e luminosidade diferentes, não importando o quanto a imagem varia, então tendo invariância. Muitas vezes elas são usadas como parte de uma GAN.
Eu espero ter esclarecido, qualquer coisa, só continuar postando.