Studiogan es una biblioteca de Pytorch que proporciona implementaciones de redes adversas generativas (GAN) representativas para la generación de imágenes condicionales/incondicionales. Studiogan tiene como objetivo ofrecer un patio de recreo idéntico para Gans modernos para que los investigadores de aprendizaje automático puedan comparar y analizar fácilmente una nueva idea.
Además , Studiogan proporciona un punto de referencia a escala sin precedentes para modelos generativos. El punto de referencia incluye resultados de GANS (Biggan-DepeP, Stylegan-XL), modelos autoregresivos (MaskGit, RQ-Transformer) y modelos de difusión (LSGM ++, CLD-SGM, ADM-GU).
| Método | Evento | Arquitectura | GC | corriente continua | Pérdida | EMA |
|---|---|---|---|---|---|---|
| Dcgan | arxiv'15 | Dcgan/resnetgan 1 | N / A | N / A | Vainilla | FALSO |
| Infoguano | NIPS'16 | Dcgan/resnetgan 1 | N / A | N / A | Vainilla | FALSO |
| LSGAN | ICCV'17 | Dcgan/resnetgan 1 | N / A | N / A | Menos sqaure | FALSO |
| Ggan | arxiv'17 | Dcgan/resnetgan 1 | N / A | N / A | Bisagra | FALSO |
| WGAN-WC | ICLR'17 | Resnetgan | N / A | N / A | Wasserstein | FALSO |
| WGAN-GP | NIPS'17 | Resnetgan | N / A | N / A | Wasserstein | FALSO |
| Wgan-dra | arxiv'17 | Resnetgan | N / A | N / A | Wasserstein | FALSO |
| Acgan-Mod 2 | - | Resnetgan | CBN | C.A. | Bisagra | FALSO |
| Pdgan | ICLR'18 | Resnetgan | CBN | Pd | Bisagra | FALSO |
| Sngan | ICLR'18 | Resnetgan | CBN | Pd | Bisagra | FALSO |
| Sagan | ICML'19 | Resnetgan | CBN | Pd | Bisagra | FALSO |
| Tacgan | Neurips'19 | Biggan | CBN | TAC | Bisagra | Verdadero |
| Lgan | ICML'19 | Resnetgan | N / A | N / A | Vainilla | FALSO |
| Biggan incondicional | ICLR'19 | Biggan | N / A | N / A | Bisagra | Verdadero |
| Biggan | ICLR'19 | Biggan | CBN | Pd | Bisagra | Verdadero |
| Biggan-Dep-Comparegan | ICLR'19 | Biggan-DepePegeg | CBN | Pd | Bisagra | Verdadero |
| Biggan-Deep-Studiogan | - | Studiogan de Biggan-Dep | CBN | Pd | Bisagra | Verdadero |
| Stylegan2 | CVPR '20 | Stylegan2 | cadaín | Spd | Logístico | Verdadero |
| Crgan | ICLR'20 | Biggan | CBN | Pd | Bisagra | Verdadero |
| ICRGAN | Aaai'21 | Biggan | CBN | Pd | Bisagra | Verdadero |
| Logan | arxiv'19 | Resnetgan | CBN | Pd | Bisagra | Verdadero |
| Contrapán | Neurips'20 | Biggan | CBN | 2C | Bisagra | Verdadero |
| Mhgan | WACV'21 | Biggan | CBN | MH | MH | Verdadero |
| Biggan + diffaugment | Neurips'20 | Biggan | CBN | Pd | Bisagra | Verdadero |
| Stylegan2 + Ada | Neurips'20 | Stylegan2 | cadaín | Spd | Logístico | Verdadero |
| Biggan + Lecam | CVPR'2021 | Biggan | CBN | Pd | Bisagra | Verdadero |
| Reacán | Neurips'21 | Biggan | CBN | D2D-CE | Bisagra | Verdadero |
| Stylegan2 + apa | Neurips'21 | Stylegan2 | cadaín | Spd | Logístico | Verdadero |
| Stylegan3-t | Neurips'21 | Stylegan3 | caaína | Spd | Logístico | Verdadero |
| Stylegan3-r | Neurips'21 | Stylegan3 | caaína | Spd | Logístico | Verdadero |
| Adcgan | ICML'22 | Biggan | CBN | ADC | Bisagra | Verdadero |
GC/DC indica la forma en que inyectamos información de etiquetas al generador o discriminador.
EMA: actualización de promedio móvil exponencial al generador. CBN: normalización de lotes condicionales. Cadain: versión condicional de la normalización de instancias adaptativas. AC: clasificador auxiliar. PD: discriminador de proyección. TAC: clasificador auxiliar gemelo. SPD: PD modificado para Stylegan. 2C: pérdida de contrastante condicional. MH: pérdida de múltiples bisagras. ADC: clasificador discriminativo auxiliar. D2D-CE: entropía cruzada de datos a datos.
| Método | Evento | Arquitectura |
|---|---|---|
| Puntuación de inicio (es) | Neurips'16 | Inceptionv3 |
| Distancia de inicio frechet (FID) | Neurips'17 | Inceptionv3 |
| Precisión y retiro mejorado | Neurips'19 | Inceptionv3 |
| Puntuación de precisión del clasificador (CAS) | Neurips'19 | Inceptionv3 |
| Densidad y cobertura | ICML'20 | Inceptionv3 |
| FID intra-Clase | - | Inceptionv3 |
| Swav Fid | ICLR'21 | Swav |
| Métricas limpias (IS, FID, PRDC) | CVPR'22 | Inceptionv3 |
| Métricas amigables para la arquitectura (IS, FID, PRDC) | arxiv'22 | No limitado a InceptionV3 |
| Método | Evento | Arquitectura objetivo |
|---|---|---|
| Congelado | CVPRW'20 | Excepto por stylegan2 |
| Top-K Entrenamiento | Neurips'2020 | - |
| DDLS | Neurips'2020 | - |
| SEFA | CVPR'2021 | Biggan |
Verificamos la reproducibilidad de los GAN implementados en Studiogan comparando IS y FID con los documentos originales. Identificamos nuestra plataforma reproduce con éxito la mayoría de las Gans representativas, excepto PD-Gan, Acgan, Logan, Sagan y Biggan-Dep. FQ significa conjunto de datos Flickr-Faces-HQ (FFHQ). Las resoluciones de los conjuntos de datos de Imagenet, AFHQV2 y FQ son 128, 512 y 1024, respectivamente.
Primero, instale Pytorch que cumpla con su entorno (al menos 1.7):
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116Luego, use el siguiente comando para instalar el resto de las bibliotecas:
pip install tqdm ninja h5py kornia matplotlib pandas sklearn scipy seaborn wandb PyYaml click requests pyspng imageio-ffmpeg timmCon Docker, puede usar (actualizado 14/dic/2022):
docker pull alex4727/experiment:pytorch113_cuda116Este es nuestro comando para hacer un contenedor llamado "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/zshSi su versión de controlador NVIDIA no cumple con los requisitos, puede intentar agregar a continuación al comando anterior.
--env NVIDIA_DISABLE_REQUIRE=true CIFAR10/CIFAR100: StudioGan descargará automáticamente el conjunto de datos una vez que ejecute main.py
Tiny ImageNet, ImageNet o un conjunto de datos 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 comenzar, los usuarios deben iniciar sesión Wandb utilizando su clave API personal.
wandb login PERSONAL_API_KEY De la versión 0.3.0, ahora puede definir qué métricas de evaluación usar a través de la opción -metrics . No especificar la opción predeterminada solo para calcular FID solamente. IE -metrics is fid calcula solo y FID y -metrics none omite la evaluación.
-t ) y Evaluate Is, FID, PRC, REC, DNS, CVG ( -metrics is fid prdc ) del modelo definido en CONFIG_PATH usando 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 ). Luego, entrene ( -t ) y evalúe amigable-IS, amigable-fid, amigable-prc, registro amigable, dns amigable, amigable-cvg ( -metrics is fid prdc --post_resizer clean ) del modelo definido en CONFIG_PATH usando 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 ) y evalúe el FID del modelo definido en CONFIG_PATH a través de DataParallel usando GPU (0, 1, 2, 3) . ¡La evaluación de FID no requiere argumento ( -metrics )! CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH-t ) y Skip Evaluation ( -metrics none ) del modelo definido en CONFIG_PATH a través de DistributedDataParallel utilizando GPU (0, 1, 2, 3) , Synchronized batch norm y 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 Pruebe python3 src/main.py para ver las opciones disponibles.
Cargue todos los datos en la memoria 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 aquí) ( -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 Entrenamiento de precisión mixto ( -mpc )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -mpc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATHCambiar estadísticas de normalización por lotes
# 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_PATHTruncar
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 Congelador de discriminator ( -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 Studiogan admite Image visualization, K-nearest neighbor analysis, Linear interpolation, Frequency analysis, TSNE analysis, and Semantic factorization . Todos los resultados se guardarán en 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_PATHStudiogan apoya la capacitación de 30 Gans representativos de DCGan a Stylegan3-R.
Utilizamos diferentes scripts dependiendo del conjunto de datos y el modelo, y es el siguiente:
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 " Studiogan admite la puntuación de inicio, la distancia de inicio de frechet, la precisión y el recuerdo mejorado, la densidad y la cobertura, el FID intra-clase, la puntuación de precisión del clasificador. Los usuarios pueden obtener las puntuaciones de Intra-Class FID, Classifier Accuracy Score utilizando opciones -iFID, -GAN_train, and -GAN_test , respectivamente.
Los usuarios pueden cambiar la columna vertebral de evaluación desde InceptionV3 a ResNet50, SWAV, Dino o Swin Transformer utilizando la opción --eval_backbone ResNet50_torch, SwAV_torch, DINO_torch, or Swin-T_torch .
Además, los usuarios pueden calcular las métricas con un resonador amigable para la limpieza o arquitectura utilizando la opción --post_resizer clean or friendly .
La puntuación de inicio (IS) es una métrica para medir cuánto GaN genera imágenes de alta fidelidad y diversas. El cálculo es la red Inception-V3 de Inception-V3 previamente entrenada. Tenga en cuenta que no dividimos un conjunto de datos en diez pliegues para calcular es diez veces.
FID es una métrica ampliamente utilizada para evaluar el rendimiento de un modelo GaN. El cálculo de FID requiere la red de Inception-V3 pre-entrenada, y los enfoques modernos utilizan FID basado en TensorFlow. Studiogan utiliza el FID basado en Pytorch para probar los modelos GaN en el mismo entorno de Pytorch. Mostramos que la implementación de FID basada en Pytorch proporciona casi los mismos resultados con la implementación de TensorFlow (ver Apéndice F del documento de Contraga).
La precisión y el retiro mejorados se desarrollan para compensar las deficiencias de la precisión y el recuerdo. Al igual que, FID, calculando la precisión mejorada y el recuerdo requiere el modelo de Inception-V3 previamente capacitado. Studiogan utiliza la implementación de Pytorch proporcionada por desarrolladores de puntajes de densidad y cobertura.
Las métricas de densidad y cobertura pueden estimar la fidelidad y la diversidad de las imágenes generadas utilizando el modelo de inicio-V3 previamente capacitado. Se sabe que las métricas son robustas para los valores atípicos, y pueden detectar distribuciones reales y falsas idénticas. Studiogan utiliza la implementación oficial de Pytorch de los autores, y Studiogan sigue la sugerencia del autor para la selección de hiperparameter.
Reportamos lo mejor es, FID, precisión y retiro mejorado, y densidad y cobertura de Gans.
Para descargar todos los puntos de control reportados en Studiogan, haga clic aquí (Hub Face Hub).
Puede evaluar el punto de control agregando la opción -ckpt CKPT_PATH con la ruta de configuración correspondiente -cfg CORRESPONDING_CONFIG_PATH .
Las resoluciones de CIFAR10, Baby Imagenet, Papa Imagenet, Grandpa Imagenet, Imagenet, AfHQV2 y FQ son 32, 64, 64, 64, 128, 512 y 1024, respectivamente.
Utilizamos el mismo número de imágenes generadas que las imágenes de entrenamiento para la distancia de inicio de Frechet (FID), precisión, retiro, densidad y cálculo de cobertura. Para los experimentos que usan Baby/Papa/Grandpa Imagenet e Imagenet, utilizamos excepcionalmente imágenes falsas de 50k contra un conjunto de entrenamiento completo como imágenes reales.
Todas las características y momentos de conjuntos de datos de referencia se pueden descargar a través de características y momentos .
Las resoluciones de Imagenet-128 e Imagenet 256 son 128 y 256, respectivamente.
Todas las imágenes utilizadas para Benchmark se pueden descargar a través de una unidad (pronto se cargarán).
-metrics is fid prdc ) de carpetas de imagen (ya preprocesadas) guardadas en DSET1 y DSET2 usando GPU (0,...,N) . CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1 DSET1 --dset2 DSET2-metrics is fid prdc ) de la carpeta de imagen guardada en DSET2 utilizando características precomputadas ( --dset1_feats DSET1_FEATS ), momentos de DSET1 ( --dset1_moments DSET1_MOMENTS ) y GPUS (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 ) de las carpetas de imágenes guardadas en DSET1 y DSET2 a través de DistributedDataParallel usando GPU (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[Licencia MIT] BatchNorm sincronizado: https://github.com/vacancy/synchronized-batchnorm-pytorch
[Licencia del MIT] Módulo de autoatición: https://github.com/voletiv/self-attention-gan-pytorch
[Licencia MIT] Diffaugment: https://github.com/mit-han-lab/data-eficiente-gans
[Mit_License] Pytorch mejoró la precisión y el recuerdo: https://github.com/clovaai/generative-evaluation-prdc
[Mit_license] densidad y cobertura de pytorch: https://github.com/clovaai/generative-evaluation-prdc
[Licencia del MIT] Pytorch Clean-fid: https://github.com/garmarmar/clean-fid
[Licencia de código fuente de NVIDIA] Stylegan2: https://github.com/nvlabs/stylegan2
[Licencia de código fuente NVIDIA] Aumento de discriminadores adaptativos: https://github.com/nvlabs/stylegan2
[Licencia Apache] Pytorch Fid: https://github.com/mseitzer/pytorch-fid
Pytorch-Studiogan es una biblioteca de código abierto bajo la licencia MIT (MIT). Sin embargo, las partes de la biblioteca son avanzables en términos de licencia distintos: stylegan2, stylegan2-Aad y stylegan3 tienen licencia bajo la licencia del código fuente de NVIDIA, y Pytorch-Fid tiene licencia bajo la licencia Apache.
Studiogan se establece para los siguientes proyectos de investigación. Por favor cita nuestro trabajo si usa 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] Los experimentos en Tiny ImageNet se realizan utilizando la arquitectura ResNet en lugar de CNN.
[2] Nuestra reimplementación de ACGAN (ICML'17) con ligeras modificaciones, que provocan una fuerte mejora del rendimiento para el experimento usando CIFAR10.