# CV-GANs
**Repository Path**: xyfjason/cv-gans
## Basic Information
- **Project Name**: CV-GANs
- **Description**: Reproduce GANs with PyTorch.
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-03-14
- **Last Updated**: 2023-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GANs-Implementations
Implement GANs with PyTorch.
## Progress
**Unconditional image generation (CIFAR-10)**:
- [x] DCGAN (vanilla GAN)
- [x] DCGAN + R1 regularization
- [x] WGAN
- [x] WGAN-GP
- [x] SNGAN
- [x] LSGAN
**Conditional image generation (CIFAR-10)**:
- [x] CGAN
- [x] ACGAN
**Unsupervised decomposition (MNIST)**:
- [x] InfoGAN
**Mode Collapse Study (Ring8, MNIST)**:
- [x] GAN (vanilla GAN)
- [x] GAN + R1 regularization
- [x] WGAN
- [x] WGAN-GP
- [x] SNGAN
- [x] LSGAN
- [x] VEEGAN
## Unconditional Image Generation
**Notes**:
| Model | G. Arch. | D. Arch. | Loss | Configs | Additional args |
| :------------: | :-------: | :------------: | :--------------------------------: | :-----------------------------------------------: | :-----------------------------------------: |
| DCGAN | SimpleCNN | SimpleCNN | Vanilla | [config file](./configs/gan_cifar10.yaml) | |
| DCGAN + R1 reg | SimpleCNN | SimpleCNN | Vanilla
R1 regularization | [config file](./configs/gan_cifar10.yaml) | `--train.loss_fn.params.lambda_r1_reg 10.0` |
| WGAN | SimpleCNN | SimpleCNN | Wasserstein
(weight clipping) | [config file](./configs/wgan_cifar10.yaml) | |
| WGAN-GP | SimpleCNN | SimpleCNN | Wasserstein
(gradient penalty) | [config file](./configs/wgan_gp_cifar10.yaml) | |
| SNGAN | SimpleCNN | SimpleCNN (SN) | Vanilla | [config file](./configs/sngan_cifar10.yaml) | |
| SNGAN | SimpleCNN | SimpleCNN (SN) | Hinge | [config file](./configs/sngan_hinge_cifar10.yaml) | |
| LSGAN | SimpleCNN | SimpleCNN | Least Sqaure | [config file](./configs/lsgan_cifar10.yaml) | |
- SN stands for "Spectral Normalization".
- For simplicity, the network architecture in all experiments is SimpleCNN, namely a stack of `nn.Conv2d` or `nn.ConvTranspose2d` layers. The results can be improved by adding more parameters and using advanced architectures (e.g., residual connections), but I decide to use the simplest setup here.
- All models except LSGAN are trained for 40k generator update steps. However, the optimizers and learning rates are not optimized for each model, so some models may not reach their optimal performance.
**Quantitative results**:
| Model | FID ↓ | Inception Score ↑ |
| :------------------: | :-----: | :---------------: |
| DCGAN | 24.7311 | 7.0339 ± 0.0861 |
| DCGAN + R1 reg | 24.1535 | 7.0188 ± 0.1089 |
| WGAN | 49.9169 | 5.6852 ± 0.0649 |
| WGAN-GP | 28.7963 | 6.7241 ± 0.0784 |
| SNGAN (vanilla loss) | 24.9151 | 6.8838 ± 0.0667 |
| SNGAN (hinge loss) | 28.5197 | 6.7429 ± 0.0818 |
| LSGAN | 28.4850 | 6.7465 ± 0.0911 |
- The FID is calculated between 50k generated samples and the CIFAR-10 training split (50k images).
- The Inception Score is calculated on 50k generated samples.
**Visualization**:
| DCGAN | DCGAN + R1 reg | WGAN | WGAN-GP |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| SNGAN (vanilla loss) | SNGAN (hinge loss) | LSGAN | |
![]() |
![]() |
![]() |
Class 0: 53.4163
Class 1: 44.3311
Class 2: 53.1971
Class 3: 52.2223
Class 4: 36.9577
Class 5: 65.0020
Class 6: 37.9598
Class 7: 48.3610
Class 8: 41.8075
Class 9: 44.0796
Class 0: 51.5959
Class 1: 46.6855
Class 2: 49.9857
Class 3: 53.6737
Class 4: 35.1658
Class 5: 65.7719
Class 6: 38.0958
Class 7: 44.7279
Class 8: 43.3078
Class 9: 45.1265
Class 0: 47.3203
Class 1: 38.6481
Class 2: 62.5885
Class 3: 66.2386
Class 4: 64.5535
Class 5: 60.7876
Class 6: 58.9524
Class 7: 36.8940
Class 8: 28.5964
Class 9: 35.3120
| CGAN | CGAN (cBN) | ACGAN |
|---|---|---|
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 1000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 2000 steps | 3000 steps | 4000 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 9000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 9000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 9000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 9000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 9000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 200 steps | 400 steps | 600 steps | 800 steps | 5000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 1000 steps | 3000 steps | 5000 steps | 7000 steps | 10000 steps |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |