Este projeto é uma rede adversária generativa convolucional profunda que pode criar imagens de alta qualidade a partir de uma semente aleatória, como retratos, animais, desenhos e muito mais.
O modelo é uma Rede Adversarial Generativa (GAN), conforme descrito no artigo Redes Adversariais Generativas da Universidade de Montreal (2014)
O gerador e o discriminador são redes neurais convolucionais profundas, como no artigo Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks do Facebook AI Research (2015), mas com algumas melhorias:
Eu adicionei camadas de taxa de aprendizagem equalizada do artigo Crescimento progressivo de GANs para melhor qualidade, estabilidade e variação da Nvidia (2017)
Eu adicionei Bilinear Upsampling / Downsampling do artigo Making Convolutional Networks Shift-Invariant Again da Adobe Research (2019)
Implementei Wavelet Transform do artigo SWAGAN: A Style-based Wavelet-driven Generative Model da Tel-Aviv University (2021)
Usei uma arquitetura baseada em estilo com entrada constante , aprendi estilos de uma rede de mapeamento e injeção de ruído do artigo A Style-Based Generator Architecture for Generative Adversarial Networks da Nvidia (2018)
Adicionei Skip Connections do artigo MSG-GAN: Multi-Scale Gradients for Generative Adversarial Networks da TomTom e Adobe (2019)
Adicionei blocos residuais do artigo Deep Residual Learning for Image Recognition da Microsoft Research (2015)
Eu adicionei o Desvio Padrão do Minibatch no final do discriminador do artigo Técnicas Melhoradas para Treinamento de GANs da OpenAI (2016)
Mantive a perda não saturante original do artigo Generative Adversarial Nets da Universidade de Montreal (2014)
Eu adicionei a regularização do comprimento do caminho no gerador do artigo Analisando e melhorando a qualidade da imagem do StyleGAN da Nvidia (2019)
Eu adicionei Gradient Penalty Regularization no discriminador do artigo Improved Training of Wasserstein GANs do Google Brain (2017)
Eu adicionei Adaptive Discriminator Augmentation (ADA) do artigo Training Generative Adversarial Networks with Limited Data da Nvidia (2020), mas a probabilidade de aumento não é treinada e deve ser definida manualmente (e alguns aumentos são desabilitados devido à falta de uma implementação do PyTorch)
Eu adicionei o cálculo da distância de início de Fréchet (FID) durante o treinamento do artigo GANs treinados por uma regra de atualização de duas escalas de tempo convergem para um equilíbrio de Nash local da Universidade Linz (2017) usando o módulo pytorch-fid
Adicionei um projetor como no artigo Analisando e melhorando a qualidade da imagem do StyleGAN da Nvidia (2019)
Rostos humanos 256*256 (FID: 5,97)
Rostos de animais 256*256 (FID: 6,56)
Rostos de anime 256*256 (FID: 3,74)
Pintura de rostos 256*256 (FID: 20.32)
Os pesos treinados em vários conjuntos de dados estão disponíveis no Google Drive , basta baixar os arquivos .pt
e colocá-los na pasta models
.
Execute o seguinte comando para instalar as dependências:
$ pip install -r requirements.txt
(Pode ser necessário usar um comando específico para PyTorch se quiser usar CUDA)
Primeiro, você precisa encontrar e baixar um conjunto de dados de imagens (menos de 5.000 podem ser muito pouco e mais de 150.000 não são necessários) . Você pode encontrar muitos conjuntos de dados no Kaggle e aqueles que usei no meu Google Drive .
Em seguida, no arquivo training/settings.py
, especifique o caminho para o conjunto de dados
Se você não tiver uma GPU cara de 24 GB como a minha, as configurações padrão podem não funcionar para você. Você pode tentar:
Execute o arquivo training.ipynb
(você pode interromper o treinamento a qualquer momento e retomá-lo mais tarde graças aos pontos de verificação)
Execute o arquivo testing.ipynb
para gerar imagens aleatórias
Execute o arquivo testing/interpolation.ipynb
para gerar as imagens de um vídeo de interpolação suave
Execute o arquivo testing/projector.ipynb
para projetar imagens reais no espaço latente
Execute o arquivo testing/style_mixing.ipynb
para gerar as imagens de um vídeo de interpolação de mixagem de estilos
Execute o arquivo testing/timelapse.ipynb
para gerar as imagens de um vídeo de timelapse de treinamento