目录
Machine Learning HW6
一、任务
二次元人物脸的生成,最后的目标是生成1000张二次元人物的人脸
二、数据集
Crypko:
百度网盘:
链接:https://pan.baidu.com/s/10QORgGHFEZ-nYETL_1miCw?pwd=a37q
提取码:a37q

三、结果


四、改进方法
4.1 Simple line
运行课程上给的基础代码。
4.2 Medium Baseline
增加训练次数
将n_epoch调大
"n_epoch": 50,
"n_critic": 2,
4.3 Strong Baseline
把DCGAN转化成WGAN
# 去掉discriminator最后一个sigmoid层。
# nn.Sigmoid()
# 使用nn.InstanceNorm2d层
def conv_bn_lrelu(self, in_dim, out_dim):
return nn.Sequential(
nn.Conv2d(in_dim, out_dim, 4, 2, 1),
#nn.BatchNorm2d(out_dim),
nn.InstanceNorm2d(out_dim),
nn.LeakyReLU(0.2),
)
·· 修改gp函数
def gp(self, r_imgs, f_imgs):
Tensor = torch.cuda.FloatTensor
alpha = Tensor(np.random.random((r_imgs.size(0), 1, 1, 1)))
interpolates = (alpha*r_imgs + (1 - alpha)*f_imgs).requires_grad_(True)
d_interpolates = self.D(interpolates)
fake = Variable(Tensor(r_imgs.shape[0]).fill_(1.0), requires_grad=False)
gradients = autograd.grad(
outputs=d_interpolates,
inputs=interpolates,
grad_outputs=fake,
create_graph=True,
retain_graph=True,
only_inputs=True,
)[0]
gradients = gradients.view(gradients.size(0), -1)
gradient_penalty = ((gradients.norm(1, dim=1) - 1)**2).mean()
return gradient_penalty
修改loss函数
gradient_penalty = self.gp(r_imgs, f_imgs)
loss_D = -torch.mean(r_logit) + torch.mean(f_logit) + gradient_penalty
......
loss_G = -torch.mean(self.D(f_imgs))
4.4 Boss Baseline
style-gan
!pip install stylegan2_pytorch
#训练模型
!stylegan2_pytorch --data faces --image-size 64 --batch-size 16 --num-train-steps=20000
#训练结束后,利用模型生成图片,可选择使用哪个epoch的模型来生成
!stylegan2_pytorch --generate --num_generate=4 --num_image_tiles=8
#生成转换动画
!stylegan2_pytorch --generate-interpolation --interpolation-num-steps 100
本文档是李宏毅2022年机器学习课程的第六次作业,目标是生成1000张二次元人脸。数据集来源于Crypko并提供了百度网盘链接。作业中探讨了四种不同的基线方法:基础代码运行、增加训练次数、将DCGAN改进为WGAN以及应用style-gan。
1551

被折叠的 条评论
为什么被折叠?



