O Studiogan é uma biblioteca Pytorch que fornece implementações de redes adversárias generativas representativas (GANs) para geração de imagens condicionais/incondicionais. O Studiogan pretende oferecer um playground idêntico para Gans modernos, para que os pesquisadores de aprendizado de máquina possam comparar e analisar prontamente uma nova idéia.
Além disso , o Studiogan fornece uma referência em escala sem precedentes para modelos generativos. O benchmark inclui resultados de Gans (Biggan, de profundidade, Stylegan-XL), modelos auto-regressivos (MaskGit, RQ-transformer) e modelos de difusão (LSGM ++, CLD-SGM, ADM-Gu).
| Método | Local | Arquitetura | Gc | DC | Perda | Ema |
|---|---|---|---|---|---|---|
| DCGAN | arxiv'15 | DCGAN/Resnetgan 1 | N / D | N / D | Baunilha | Falso |
| Infogan | NIPS'16 | DCGAN/Resnetgan 1 | N / D | N / D | Baunilha | Falso |
| Lsgan | ICCV'17 | DCGAN/Resnetgan 1 | N / D | N / D | Minamento SQAURE | Falso |
| Ggan | arxiv'17 | DCGAN/Resnetgan 1 | N / D | N / D | Dobradiça | Falso |
| WGAN-WC | Iclr'17 | Resnetgan | N / D | N / D | Wasserstein | Falso |
| WGAN-GP | Nips'17 | Resnetgan | N / D | N / D | Wasserstein | Falso |
| WGAN-DRA | arxiv'17 | Resnetgan | N / D | N / D | Wasserstein | Falso |
| Acgan-Mod 2 | - | Resnetgan | CBN | AC | Dobradiça | Falso |
| Pdgan | ICLR'18 | Resnetgan | CBN | Pd | Dobradiça | Falso |
| Sngan | ICLR'18 | Resnetgan | CBN | Pd | Dobradiça | Falso |
| Sagan | ICML'19 | Resnetgan | CBN | Pd | Dobradiça | Falso |
| Tacgan | Neurips'19 | Biggan | CBN | TAC | Dobradiça | Verdadeiro |
| Lgan | ICML'19 | Resnetgan | N / D | N / D | Baunilha | Falso |
| Biggan incondicional | ICLR'19 | Biggan | N / D | N / D | Dobradiça | Verdadeiro |
| Biggan | ICLR'19 | Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| Biggan-Deep-Comparegan | ICLR'19 | Comparegan, do Biggan, do Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| Biggan-Deep-Studiogan | - | Studiogan do Biggan Deep | CBN | Pd | Dobradiça | Verdadeiro |
| Stylegan2 | CVPR '20 | Stylegan2 | Cadain | Spd | Logística | Verdadeiro |
| Crgan | ICLR'20 | Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| ICRGAN | Aaai'21 | Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| Logan | arxiv'19 | Resnetgan | CBN | Pd | Dobradiça | Verdadeiro |
| Contraguan | Neurips'20 | Biggan | CBN | 2C | Dobradiça | Verdadeiro |
| Mhgan | WACV'21 | Biggan | CBN | MH | MH | Verdadeiro |
| Biggan + difflaugment | Neurips'20 | Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| Stylegan2 + ADA | Neurips'20 | Stylegan2 | Cadain | Spd | Logística | Verdadeiro |
| Biggan + lecam | CVPR'2021 | Biggan | CBN | Pd | Dobradiça | Verdadeiro |
| Reacgan | Neurips'21 | Biggan | CBN | D2D-CE | Dobradiça | Verdadeiro |
| Stylegan2 + APA | Neurips'21 | Stylegan2 | Cadain | Spd | Logística | Verdadeiro |
| Stylegan3-t | Neurips'21 | Stylegan3 | CAAIN | Spd | Logística | Verdadeiro |
| Stylegan3-r | Neurips'21 | Stylegan3 | CAAIN | Spd | Logística | Verdadeiro |
| Adcgan | ICML'22 | Biggan | CBN | ADC | Dobradiça | Verdadeiro |
GC/DC indica como injetamos informações do rótulo no gerador ou discriminador.
EMA: Atualização média móvel exponencial para o gerador. CBN: normalização do lote condicional. Cadaína: versão condicional da normalização da instância adaptativa. AC: Classificador Auxiliar. PD: discriminador de projeção. TAC: classificador auxiliar duplo. SPD: PD modificado para Stylegan. 2C: perda contrastiva condicional. MH: Perda de múltipla dobradiça. ADC: classificador discriminatório auxiliar. D2D-CE: entropia cruzada de dados para dados.
| Método | Local | Arquitetura |
|---|---|---|
| Pontuação inicial (IS) | Neurips'16 | EMCCONTROV3 |
| Frechet Inception Distância (FID) | Neurips'17 | EMCCONTROV3 |
| Precisão e recall aprimoradas | Neurips'19 | EMCCONTROV3 |
| Pontuação de precisão do classificador (CAS) | Neurips'19 | EMCCONTROV3 |
| Densidade e cobertura | ICML'20 | EMCCONTROV3 |
| Fid intra-classe | - | EMCCONTROV3 |
| Swav fid | Iclr'21 | Swav |
| Métricas limpas (IS, FID, PRDC) | CVPR'22 | EMCCONTROV3 |
| Métricas favoráveis à arquitetura (IS, FID, PRDC) | arxiv'22 | Não limitado à InceptionV3 |
| Método | Local | Arquitetura de destino |
|---|---|---|
| Congelado | CVPRW'20 | Exceto para Stylegan2 |
| Treinamento Top-K | Neurips'2020 | - |
| DDLS | Neurips'2020 | - |
| SEFA | CVPR'2021 | Biggan |
Verificamos a reprodutibilidade dos Gans implementados em Studiogan, comparando o IS e FID com os artigos originais. Identificamos nossa plataforma reproduz com sucesso a maioria dos Gans Representativos, exceto PD-Gan, Acgan, Logan, Sagan e Biggan. FQ significa conjunto de dados do Flickr-Faces-HQ (FFHQ). As resoluções dos conjuntos de dados ImageNet, AFHQV2 e FQ são 128, 512 e 1024, respectivamente.
Primeiro, instale o Pytorch que encontre seu ambiente (pelo menos 1,7):
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116Em seguida, use o seguinte comando para instalar o restante das bibliotecas:
pip install tqdm ninja h5py kornia matplotlib pandas sklearn scipy seaborn wandb PyYaml click requests pyspng imageio-ffmpeg timmCom o Docker, você pode usar (atualizado em 14/dezembro de 2022):
docker pull alex4727/experiment:pytorch113_cuda116Este é o nosso comando para fazer um contêiner chamado "Studiogan".
docker run -it --gpus all --shm-size 128g --name StudioGAN -v /path_to_your_folders:/root/code --workdir /root/code alex4727/experiment:pytorch113_cuda116 /bin/zshSe a versão do driver da NVIDIA não atender aos requisitos, você poderá adicionar abaixo ao comando acima.
--env NVIDIA_DISABLE_REQUIRE=true CIFAR10/CIFAR100: O Studiogan baixará automaticamente o conjunto de dados depois de executar main.py
Tiny Imagenet, ImageNet ou um conjunto de dados personalizado:
data
└── ImageNet, Tiny_ImageNet, Baby ImageNet, Papa ImageNet, or Grandpa ImageNet
├── train
│ ├── cls0
│ │ ├── train0.png
│ │ ├── train1.png
│ │ └── ...
│ ├── cls1
│ └── ...
└── valid
├── cls0
│ ├── valid0.png
│ ├── valid1.png
│ └── ...
├── cls1
└── ...
Antes de começar, os usuários devem fazer login wandb usando sua chave de API pessoal.
wandb login PERSONAL_API_KEY A partir da versão 0.3.0, agora você pode definir quais métricas de avaliação usar através da opção -metrics . Não especifica os padrões da opção para calcular apenas o FID. O IE -metrics is fid calcula o IS e o FID e -metrics none pula a avaliação.
-t ) e avaliar IS, FID, PRC, REC, DNS, CVG ( -metrics is fid prdc ) do modelo definido em CONFIG_PATH usando a GPU 0 . CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH--pre_resizer lanczos ). Em seguida, treine ( -t ) e avalie a amiga-is, amigável, amigável-prc, amistoso-rec, amistar-dns, amigável-cvg ( -metrics is fid prdc --post_resizer clean ) do modelo definido em CONFIG_PATH usando a GPU 0 . CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc --pre_resizer lanczos --post_resizer clean -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH-t ) e avalie o FID do modelo definido em CONFIG_PATH através DataParallel usando GPUs (0, 1, 2, 3) . A avaliação do FID não requer argumento ( -metrics )! CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH-t ) e avaliação de pular ( -metrics none ) do modelo definido em CONFIG_PATH por meio de DistributedDataParallel usando GPUs (0, 1, 2, 3) , Synchronized batch norm e Mixed precision . export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics none -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -DDP -sync_bn -mpc Experimente python3 src/main.py para ver as opções disponíveis.
Carregue todos os dados na memória principal ( -hdf5 -l )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -hdf5 -l -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH DistributedDataParallel (consulte aqui) ( -DDP )
# ## NODE_0, 4_GPUs, All ports are open to NODE_1
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 0 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH # ## NODE_1, 4_GPUs, All ports are open to NODE_0
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 1 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH Treinamento de precisão mista ( -mpc )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -mpc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATHAlterar estatísticas de normalização em lote
# Synchronized batchNorm (-sync_bn)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -sync_bn -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH
# Standing statistics (-std_stat, -std_max, -std_step)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -std_stat -std_max STD_MAX -std_step STD_STEP -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH
# Batch statistics (-batch_stat)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -batch_stat -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHTruque de truncamento
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py --truncation_factor TRUNCATION_FACTOR -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH Ddls ( -lgv -lgv_rate -lgv_std -lgv_decay -lgv_decay_steps -lgv_steps )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -lgv -lgv_rate LGV_RATE -lgv_std LGV_STD -lgv_decay LGV_DECAY -lgv_decay_steps LGV_DECAY_STEPS -lgv_steps LGV_STEPS -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH Discriminador de congelamento ( -freezeD )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t --freezeD FREEZED -ckpt SOURCE_CKPT -cfg TARGET_CONFIG_PATH -data DATA_PATH -save SAVE_PATH O StudioGan suporta Image visualization, K-nearest neighbor analysis, Linear interpolation, Frequency analysis, TSNE analysis, and Semantic factorization . Todos os resultados serão salvos em SAVE_DIR/figures/RUN_NAME/*.png .
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -v -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIR
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -knn -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -itp -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIRCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -fa -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -tsne -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -sefa -sefa_axis SEFA_AXIS -sefa_max SEFA_MAX -cfg CONFIG_PATH -ckpt CKPT -save SAVE_PATHO Studiogan suporta o treinamento de 30 Gans representativos de DCGAN para Stylegan3-R.
Usamos scripts diferentes, dependendo do conjunto de dados e do modelo, e é o seguinte:
CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -hdf5 -l -sync_bn -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " O StudioGan suporta a pontuação inicial, a distância de Frechet Inception, a precisão e a recuperação aprimorada, densidade e cobertura, FID intra-classe, pontuação de precisão do classificador. Os usuários podem obter as pontuações Intra-Class FID, Classifier Accuracy Score usando opções -iFID, -GAN_train, and -GAN_test , respectivamente.
Os usuários podem alterar o backbone da avaliação do INCCECCOMV3 para o transformador Resnet50, Swav, Dino ou Swin usando --eval_backbone ResNet50_torch, SwAV_torch, DINO_torch, or Swin-T_torch .
Além disso, os usuários podem calcular métricas com o resizador de limpeza ou arquitetura usando- --post_resizer clean or friendly .
A pontuação de início (IS) é uma métrica para medir quanto GaN gera imagens de alta fidelidade e diversas. O cálculo requer a rede de Inception-V3 pré-treinada. Observe que não dividimos um conjunto de dados em dez dobras para calcular é dez vezes.
O FID é uma métrica amplamente usada para avaliar o desempenho de um modelo GaN. O cálculo do FID requer a rede de Inception-V3 pré-treinada, e as abordagens modernas usam FID baseado em tensorflow. O Studiogan utiliza os modelos FID baseados em Pytorch para testar os modelos GaN no mesmo ambiente de Pytorch. Mostramos que a implementação do FID baseada em Pytorch fornece quase os mesmos resultados com a implementação do TensorFlow (consulte o Apêndice F do Paper Contragan).
Precisão e recall aprimoradas são desenvolvidas para compensar as deficiências da precisão e recall. Como é, o FID, calculando a precisão aprimorada e o recall requer o modelo de Inception-V3 pré-treinado. O Studiogan usa a implementação do Pytorch fornecida pelos desenvolvedores de densidade e pontuações de cobertura.
As métricas de densidade e cobertura podem estimar a fidelidade e a diversidade de imagens geradas usando o modelo de Inception-V3 pré-treinado. Sabe -se que as métricas são robustas para os valores discrepantes e podem detectar distribuições idênticas e reais e falsas. O Studiogan usa a implementação oficial de Pytorch dos autores, e o Studiogan segue a sugestão do autor para a seleção de hiperparâmetro.
Relatamos o melhor é que FID, precisão e recall aprimoradas e densidade e cobertura de Gans.
Para baixar todos os pontos de verificação relatados no Studiogan, clique aqui (abraçando o hub de rosto).
Você pode avaliar o ponto de verificação adicionando a opção -ckpt CKPT_PATH com o caminho de configuração correspondente -cfg CORRESPONDING_CONFIG_PATH .
As resoluções de Cifar10, Baby Imagenet, Papa imagenet, vovô imagenet, imagenet, Afhqv2 e FQ são 32, 64, 64, 64, 128, 512 e 1024, respectivamente.
Utilizamos o mesmo número de imagens geradas que as imagens de treinamento para a distância de Frechet Inception (FID), precisão, recall, densidade e cálculo da cobertura. Para os experimentos que usam o Imagenet e o ImageNet Baby/Papa/Grandpa, usamos excepcionalmente 50k imagens falsas contra um conjunto completo de treinamento como imagens reais.
Todos os recursos e momentos de conjuntos de dados de referência podem ser baixados por meio de recursos e momentos .
As resoluções do ImageNet-128 e ImageNet 256 são 128 e 256, respectivamente.
Todas as imagens usadas para o benchmark podem ser baixadas por meio de uma unidade (serão carregadas em breve).
-metrics is fid prdc ) das pastas de imagem (já pré -processadas) salvas em dset1 e dset2 usando GPUs (0,...,N) . CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1 DSET1 --dset2 DSET2-metrics is fid prdc ) da pasta de imagem salva no dset2 usando recursos pré -computados ( --dset1_feats DSET1_FEATS ), momentos de dset1 ( --dset1_moments DSET1_MOMENTS (0,...,N) . CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1_feats DSET1_FEATS --dset1_moments DSET1_MOMENTS --dset2 DSET2-metrics is fid prdc --post_resizer friendly ) das pastas de imagem salvadas em dset1 e dset2 através de DistributedDataParallel usando GPUs (0,...,N) . export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --post_resizer friendly --dset1 DSET1 --dset2 DSET2 -DDP[MIT Licença] Batchnorm sincronizado: https://github.com/vacancy/synchronized-batchnorm-pytorch
[MIT Licença] Módulo de auto-atenção: https://github.com/voletiv/self-attion-gan-pytorch
[MIT Licença] Difflaugment: https://github.com/mith-han-lab/data-e comefficiente-gans
[Mit_license] pytorch melhorou a precisão e a recuperação: https://github.com/clovaai/generative-evaluation-prdc
[Mit_license] densidade e cobertura pytorch: https://github.com/clovaai/generative-evaluation-prdc
[MIT Licença] Pytorch Clean-FID: https://github.com/gaparmar/clean-fid
[Nvidia Código Fonte Licença] Stylegan2: https://github.com/nvlabs/stylegan2
[Nvidia Código Fonte Licença] Aumentação do discriminador adaptativo: https://github.com/nvlabs/stylegan2
[Licença Apache] Pytorch Fid: https://github.com/mseitzer/pytorch-fid
O Pytorch-Studiogan é uma biblioteca de código aberto sob a licença do MIT (MIT). No entanto, as partes da biblioteca são avajáveis em termos de licença distintos: Stylegan2, Stylegan2-ADA e Stylegan3 são licenciados sob licença de código-fonte da NVIDIA, e o Pytorch-FID é licenciado sob licença do Apache.
O Studiogan é estabelecido para os seguintes projetos de pesquisa. Cite nosso trabalho se você usar o Studiogan.
@article { kang2023StudioGANpami ,
title = { {StudioGAN: A Taxonomy and Benchmark of GANs for Image Synthesis} } ,
author = { MinGuk Kang and Joonghyuk Shin and Jaesik Park } ,
journal = { IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI) } ,
year = { 2023 }
} @inproceedings { kang2021ReACGAN ,
title = { {Rebooting ACGAN: Auxiliary Classifier GANs with Stable Training} } ,
author = { Minguk Kang, Woohyeon Shim, Minsu Cho, and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2021 }
} @inproceedings { kang2020ContraGAN ,
title = { {ContraGAN: Contrastive Learning for Conditional Image Generation} } ,
author = { Minguk Kang and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2020 }
}[1] Experimentos no pequeno imagenet são realizados usando a arquitetura Resnet em vez da CNN.
[2] Nossa reimplementação de Acgan (ICML'17) com pequenas modificações, que trazem um forte aprimoramento de desempenho para o experimento usando CIFAR10.