AI人脸图像生成(DCGAN)

一. 理论基础
1.DCGAN原理
深度卷积对抗网络是生成对抗网络的一种模型改进,其将卷积运算的思想引入到生成式模型当中来做无监督的训练,利用卷积网络强大的特征提取能力来提高生成网络的学习效果。DCGAN模型有以下特点:

判别器模型使用了卷积步长取代了空间池化,生成器模型中使用了反卷积操作扩大数据维度。
除了生成器模型的输出层和判别器模型的输入层,在整个对抗网络的其他层上都使用了Batch Normalization, 原因是Batch Normalization 可以稳定学习,有助于优化初始化参数值不良而导致的训练问题。
整个网络去除了全连接层,直接使用卷积层连接生成器和判别器的输入层以及输出层。
在生成器的输出层使用Tanh激活函数以控制输出范围,而在其他层中均使用了ReLU激活函数;在判别器上使用了Leaky ReLU激活函数。

图中所示了一种常见的DCGAN结构。主要包含了一个生成网络G 和一个判别网络 D,生成网络G 负责生成图像,它接受一个随机的噪声z,通过该噪声生成图像,将生成的图像记为G(z),判别网络D 负责判断一张图是否为真实,它的输入是x,代表一张图像,输出D(x)表示x为真实图像的概率。

实际上判别网络D是对数据的来源进行一个判别:究竟这个数据是来自真是的数据分布Pd(x)判别为“1”,还是来自于一个生成网络G所产生的一个数据分布Pg(z)(判别为“0”)。所以在整个训练过程中,生成网络G的目标是生成可以以假乱真的图像G(z),当判别网络D无法区分,即D(G(z))=0.5时,便得到了一个生成网络G用来生产图像扩充数据集。

AI人脸图像生成(DCGAN)插图

二.前期准备

1.导入第三方库

import torch,random,os
import torch.nn as nn
import torch.nn.parallel
import torch.optim as optim
import torch.utils.data
import torchvision.datasets as dset
import torchvision.transforms as transforms
import torchvision.utils as vutils
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
from torch.autograd import Variable

manualSeed = 999
print(“random seed:”,manualSeed)
random.seed(manualSeed)
torch.manual_seed(manualSeed)
torch.use_deterministic_algorithms(True)

2.设置超参数

dataroot = “/content/drive/MyDrive/GAN_Dataset”
batch_size = 128 #训练过程中的批次大小
image_size = 64 #图像的尺寸(宽度和高度)
nz = 100 # z潜在的向量大小(生成器输入的尺寸)
ngf = 64 # 生成器中的特征图大小
ndf = 64 #判别器中的特征图大小
num_epochs = 50 #训练的总论数
lr = 0.0002 #学习率
beta1=0.5 #adam 优化器的beta1超参数

3.导入数据

dataset = dset.ImageFolder(root=dataroot,transform = transforms.Compose([transforms.Resize(image_size),transforms.CenterCrop(image_size),transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))]))
dataloader = torch.utils.data.DataLoader(dataset,batch_size=batch_size,shuffle=True,num_workers=5)
device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
print(device)
real_batch = next(iter(dataloader))
plt.figure(figsize=(8,8))
plt.axis(“off”)
plt.title(“Training Images”)
plt.imshow(np.transpose(vutils.make_grid(real_batch[0].to(device)[:24],padding=2,normalize=True).cpu(),(1,2,0)))

 

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » AI人脸图像生成(DCGAN)

提供最优质的资源集合

立即查看 了解详情