生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D 。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
最近参加了PaddleGAN的生成对抗网络七日打卡营,感觉收货颇丰。对于刚刚入门的我来说可能还不能将所有的知识消化吸收,但是还是可以从最基本的原理开始入手。我对GAN的基本原理理解如下:
我们有两个网络,G(Generator)和D(Discriminator)。它们的功能分别是:
- G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
- D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,概率介于0-1之间,越接近1代表越真实,越接近0代表越可能是假的。
经过这几天的学习,相信大家对GAN已经有了一定的了解了,也在前面的作业中体验过GAN的一些应用了。那现在大家是不是想要升级一下难度,自己动手来训练一个模型呢?需要自己动手训练的大作业来啦,大作业内容为基于PaddleGAN中的超分模型,实现卡通画超分。
import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 训练数据统计
train_names = os.listdir('PaddleGAN/data/animeSR/train')
print(f'训练集数据量: {len(train_names)}')
# 测试数据统计
test_names = os.listdir('PaddleGAN/data/animeSR/test')
print(f'测试集数据量: {len(test_names)}')
# 训练数据可视化
img = cv2.imread('PaddleGAN/data/animeSR/train/Anime_1.jpg')
img = img[:,:,::-1]
plt.figure()
plt.imshow(img)
plt.show()
找到你需要的模型的配置文件,修改模型参数,一般修改迭代次数,num_workers,batch_size以及数据集路径。
有能力的同学也可以尝试修改其他参数,或者基于现有模型进行二次开发,模型代码在/home/aistudio/PaddleGAN/ppgan/models
目录下。
以LESRCNNN为例,这里将配置文件lesrcnn_psnr_x4_div2k.yaml
中的
参数total_iters
设置为50000
参数dataset:train:num_workers
设置为4
参数dataset:train:batch_size
设置为16
参数dataset:train:gt_folder
改为data/animeSR/train
参数dataset:train:lq_folder
改为data/animeSR/train_X4
参数dataset:test:gt_folder
改为data/animeSR/test
参数dataset:test:lq_folder
改为data/animeSR/test_X4
参数periods: [… , … , … , …]
periods的数字总和要等于 total_iters 的数值
%cd /home/aistudio/PaddleGAN/
!python -u tools/main.py --config-file configs/lesrcnn_psnr_x4_div2k.yaml
测试模型
cd /home/aistudio/PaddleGAN/
!python tools/main.py --config-file configs/lesrcnn_psnr_x4_div2k.yaml --evaluate-only --load /home/aistudio/pretrained_model/ESRGAN_PSNR_50000_weight.pdparams