MCPcopy Index your code
hub / github.com/dorarad/gansformer

github.com/dorarad/gansformer @v1.5.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.5.2 ↗ · + Follow
883 symbols 2,689 edges 76 files 32 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Python 3.7 PyTorch 1.8 TensorFlow 1.14 cuDNN 7.3.1 License CC BY-NC

GANformer: Generative Adversarial Transformers

Drew A. Hudson* & C. Lawrence Zitnick

Check out our new PyTorch version and the GANformer2 paper!

Update (Feb 21, 2022): We updated the weight initialization of the PyTorch version to the intended scale, leading to a substantial improvement in the model's learning speed!

This is an implementation of the GANformer model, a novel and efficient type of transformer, explored for the task of image generation. The network employs a bipartite structure that enables long-range interactions across the image, while maintaining computation of linearly efficiency, that can readily scale to high-resolution synthesis. The model iteratively propagates information from a set of latent variables to the evolving visual features and vice versa, to support the refinement of each in light of the other and encourage the emergence of compositional representations of objects and scenes. In contrast to the classic transformer architecture, it utilizes multiplicative integration that allows flexible region-based modulation, and can thus be seen as a generalization of the successful StyleGAN network.

1st Paper: https://arxiv.org/pdf/2103.01209
2nd Paper: https://arxiv.org/abs/2111.08960
Contact: dorarad@cs.stanford.edu
Implementation: network.py (TF / Pytorch)

We now support both PyTorch and TF!

:white_check_mark: Uploading initial code and readme
:white_check_mark: Image sampling and visualization script
:white_check_mark: Code clean-up and refacotiring, adding documentation
:white_check_mark: Training and data-prepreation intructions
:white_check_mark: Pretrained networks for all datasets
:white_check_mark: Extra visualizations and evaluations
:white_check_mark: Providing models trained for longer
:white_check_mark: Releasing the PyTorch version
:white_check_mark: Releasing pre-trained models for high-resolutions (up to 1024 x 1024)
⬜️ Releasing the GANformer2 model (supporting layout generation and conditional layout2image generation) (coming soon!)

If you experience any issues or have suggestions for improvements or extensions, feel free to contact me either thourgh the issues page or at dorarad@stanford.edu.

Bibtex

@article{hudson2021ganformer,
  title={Generative Adversarial Transformers},
  author={Hudson, Drew A and Zitnick, C. Lawrence},
  journal={Proceedings of the 38th International Conference on Machine Learning, {ICML} 2021},
  year={2021}
}

@article{hudson2021ganformer2,
  title={Compositional Transformers for Scene Generation},
  author={Hudson, Drew A and Zitnick, C. Lawrence},
  journal={Advances in Neural Information Processing Systems {NeurIPS} 2021},
  year={2021}
}

Sample Images

Using the pre-trained models (generated after training for 5-7x less steps than StyleGAN2 models! Training our models for longer will improve the image quality further):

Requirements

  • Python 3.6 or 3.7 are supported.
  • For the TF version: We recommend TensorFlow 1.14 which was used for development, but TensorFlow 1.15 is also supported.
  • For the Pytorch version: We support Pytorch >= 1.8.
  • The code was tested with CUDA 10.0 toolkit and cuDNN 7.5.
  • We have performed experiments on Titan V GPU. We assume 12GB of GPU memory (more memory can expedite training).
  • See requirements.txt (TF / Pytorch) for the required python packages and run pip install -r requirements.txt to install them.

Quickstart & Overview

Our repository supports both Tensorflow (at the main directory) and Pytorch (at pytorch_version). The two implementations follow a close code and files structure, and share the same interface. To switch from the TF to Pytorch, simply enter into pytorch_version), and install the requirements. Please feel free to open an issue or contact for any questions or suggestions about the new implementation!

A minimal example of using a pre-trained GANformer can be found at generate.py (TF / Pytorch). When executed, the 10-lines program downloads a pre-trained modle and uses it to generate some images:

python generate.py --gpus 0 --model gdrive:bedrooms-snapshot.pkl --output-dir images --images-num 32

You can use --truncation-psi to control the generated images quality/diversity trade-off.
We recommend trying out different values in the range of 0.6-1.0.

Pretrained models and High resolutions

We provide pretrained models for resolution 256×256 for all datasets, as well as 1024×1024 for FFHQ and 1024×2048 for Cityscapes.

To generate images for the high-resolution models, run the following commands: (We reduce their batch-size to 1 so that they can load onto a single GPU)

python generate.py --gpus 0 --model gdrive:ffhq-snapshot-1024.pkl --output-dir ffhq_images --images-num 32 --batch-size 1
python generate.py --gpus 0 --model gdrive:cityscapes-snapshot-2048.pkl --output-dir cityscapes_images --images-num 32 --batch-size 1 --ratio 0.5 # 1024 x 2048 cityscapes currently supported in the TF version only

We can train and evaluate new or pretrained model both quantitatively and qualitative with run_network.py (TF / Pytorch).
The model architecutre can be found at network.py (TF / Pytorch). The training procedure is implemented at training_loop.py (TF / Pytorch).

Data preparation

We explored the GANformer model on 4 datasets for images and scenes: CLEVR, LSUN-Bedrooms, Cityscapes and FFHQ. The model can be trained on other datasets as well. We trained the model on 256x256 resolution. Higher resolutions are supported too. The model will automatically adapt to the resolution of the images in the dataset.

The prepare_data.py (TF / Pytorch) can either prepare the datasets from our catalog or create new datasets.

Default Datasets

To prepare the datasets from the catalog, run the following command:

python prepare_data.py --ffhq --cityscapes --clevr --bedrooms --max-images 100000

See table below for details about the datasets in the catalog.

Useful options:
--data-dir the output data directory (default: datasets)
--shards-num to select the number of shards for the data (default: adapted to each dataset)
* --max-images to store only a subset of the dataset, in order to reduce the size of the stored tfrecord/image files (default: max).
This can be particularly useful to save space in case of large datasets, such as LSUN-bedrooms (originaly contains 3M images)

Custom Datasets

You can also use the script to create new custom datasets. For instance:

python prepare_data.py --task <dataset-name> --images-dir 

 --format png --ratio 0.7 --shards-num 5

The script supports several formats: png, jpg, npy, hdf5, tfds and lmdb.

Dataset Catalog

Dataset # Images Resolution Download Size TFrecords Size Gamma
FFHQ 70,000 256×256 13GB 13GB 10
CLEVR 100,015 256×256 18GB 15.5GB 40
Cityscapes 24,998 256×256 1.8GB 8GB 20
LSUN-Bedrooms 3,033,042 256×256 42.8GB Up to 480GB 100

Use --max-images to reduce the size of the tfrecord files.

Training

Models are trained by using the --train option. To fine-tune a pretrained GANformer model:

python run_network.py --train --gpus 0 --ganformer-default --expname clevr-pretrained --dataset clevr \
  --pretrained-pkl gdrive:clevr-snapshot.pkl

We provide pretrained models for bedrooms, cityscapes, clevr and ffhq.

To train a GANformer in its default configuration form scratch:

python run_network.py --train --gpus 0 --ganformer-default --expname clevr-scratch --dataset clevr --eval-images-num 10000

By defualt, models training is resumed from the latest snapshot. Use --restart to strat a new experiment, or --pretrained-pkl to select a particular snapshot to load.

For comparing to state-of-the-art, we compute metric scores using 50,000 sample imaegs. To expedite training though, we recommend setting --eval-images-num to a lower number. Note though that this can impact the precision of the metrics, so we recommend using a lower value during training, and increasing it back up in the final evaluation.

We support a large variety of command-line options to adjust the model, training, and evaluation. Run python run_network.py -h for the full list of options!

we recommend exploring different values for --gamma when training on new datasets. If you train on resolution >= 512 and observe OOM issues, consider reducing --batch-gpu to a lower value.

Logging

  • During training, sample images and attention maps will be generated and stored at results/<expname>-<run-id> (--keep-samples).
  • Metrics will also be regularly commputed and reported in a metric-<name>.txt file. --metrics can be set to fid for FID, is for Inception Score and pr for Precision/Recall.
  • Tensorboard logs are also created (--summarize) that track the metrics, loss values for the generator and discriminator, and other useful statistics over the course of training.

Baseline models

The codebase suppors multiple baselines in addition to the GANformer. For instance, to run a vanilla GAN model:

python run_network.py --train --gpus 0 --baseline GAN --expname clevr-gan --dataset clevr 
  • Vanilla GAN: --baseline GAN, a standard GAN without style modulation.
  • StyleGAN2: --baseline StyleGAN2, with one global latent that modulates the image features.
  • k-GAN: --baseline kGAN, which generates multiple image layers independetly and then merge them into one shared image (supported only in the TF version).
  • SAGAN: --baseline SAGAN, which performs self-attention between all image features in low-resolution layer (e.g. 32x32) (supported only in the TF version).

Evaluation

To evalute a model, use the --eval option:

python run_network.py --eval --gpus 0 --expname clevr-exp --dataset clevr

Add --pretrained-pkl gdrive:<dataset>-snapshot.pkl to evalute a pretrained model.

Below we provide the FID-50k scores for the GANformer (using the pretrained checkpoints above) as well as baseline models.
Note that these scores are different than the scores reported in the StyleGAN2 paper since they run experiments for up to 7x more training steps (5k-15k kimg-steps in our experiments over all models, which takes about 3-4 days with 4 GPUs, vs 50-70k kimg-steps in their experiments, which take over 90 GPU-days).

Model CLEVR LSUN-Bedroom FFHQ Cityscapes
GAN 25.02 12.16 13.18 11.57
kGAN 28.28 69.9 61.14 51.08
SAGAN 26.04 14.06 16.21 12.81
StyleGAN2 16.05 11.53 16.21 8.35
VQGAN 32.60 59.63 63.12 173.80
GANformer 9.24 6.15 7.42 5.23

Model Change-log

Compared to the original GANformer depicted in the paper, this repository make several additional improvments that contributed to the performance: * Use --mapping_ltnt2ltnt so that the latents communicate with each other

Core symbols most depended-on inside this repo

append
called by 86
pytorch_version/metrics/metric_utils.py
get
called by 65
dnnlib/submission/run_context.py
kwarg
called by 56
pytorch_version/loader.py
get_shape
called by 45
training/network.py
get_shape
called by 41
training/networks.py
update
called by 34
dnnlib/submission/run_context.py
mean
called by 31
pytorch_version/torch_utils/training_stats.py
apply_bias_act
called by 31
training/network.py

Shape

Function 534
Method 273
Class 75
Route 1

Languages

Python99%
C++1%

Modules by API surface

pytorch_version/training/networks.py82 symbols
training/networks.py47 symbols
training/network.py47 symbols
pytorch_version/dataset_tool.py47 symbols
dataset_tool.py45 symbols
training/misc.py36 symbols
dnnlib/tflib/network.py33 symbols
pytorch_version/dnnlib/util.py30 symbols
metrics/metric_base.py29 symbols
dnnlib/util.py27 symbols
pytorch_version/training/misc.py26 symbols
pytorch_version/metrics/metric_utils.py22 symbols

For agents

$ claude mcp add gansformer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact