渐进式增长 GAN (PGAN)


import torch
use_gpu = True if torch.cuda.is_available() else False
# trained on high-quality celebrity faces "celebA" dataset
# this model outputs 512 x 512 pixel images
model = torch.hub.load('facebookresearch/pytorch_GAN_zoo:hub',
                       'PGAN', model_name='celebAHQ-512',
                       pretrained=True, useGPU=use_gpu)
# this model outputs 256 x 256 pixel images
# model = torch.hub.load('facebookresearch/pytorch_GAN_zoo:hub',
#                        'PGAN', model_name='celebAHQ-256',
#                        pretrained=True, useGPU=use_gpu)
模型的输入是一个形状为 (N, 512) 的噪声向量,其中 N 是要生成的图像数量。可以使用 .buildNoiseData 函数来构建它。模型有一个 .test 函数,它接收噪声向量并生成图像。
num_images = 4
noise, _ = model.buildNoiseData(num_images)
with torch.no_grad():
    generated_images = model.test(noise)
# let's plot these images using torchvision and matplotlib
import matplotlib.pyplot as plt
import torchvision
grid = torchvision.utils.make_grid(generated_images.clamp(min=-1, max=1), scale_each=True, normalize=True)
plt.imshow(grid.permute(1, 2, 0).cpu().numpy())
# plt.show()
您应该会看到一个与左侧图像相似的图像。
如果您想从头开始训练自己的渐进式 GAN 和其他 GAN,请查看 PyTorch GAN Zoo。
模型描述
在计算机视觉中,生成模型是经过训练以从给定输入创建图像的网络。在我们的案例中,我们考虑一种特定类型的生成网络:GAN(生成对抗网络),它学习将随机向量映射到逼真的图像生成。
渐进式生成对抗网络是 Karras 等人于 2017 年开发的一种方法 [1],它允许生成高分辨率图像。为此,生成网络是逐层训练的。首先,模型被训练以构建非常低分辨率的图像,一旦收敛,就会添加新的层,输出分辨率会翻倍。这个过程持续进行,直到达到所需的分辨率。
要求
- 目前仅支持 Python 3
参考文献
[1] Tero Karras 等人,“渐进式生成对抗网络,用于改进质量、稳定性和多样性” https://arxiv.org/abs/1710.10196