漸進式增長 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