一、背景说明
之前对CycleGAN进行过一次解读,分别见链接:
CycleGAN代码使用入门_benben044的博客-CSDN博客
cycleGAN算法解读_benben044的博客-CSDN博客
本次对简化版的github源码进行解读,使得代码和原理更清晰易懂。
简化版代码见:
https://download.csdn.net/download/benben044/87583252?spm=1001.2014.3001.5503
二、代码运行
1、在windows本地运行
首先运行python -m visdom.server,
然后直接在pycharm中运行train.py文件,可以跑起来
如果跑不起来,把参数改一下:
2、ECS上运行
visdom在ecs跑不了,测试代码如下:
启动visdom:python -m visdom.server
运行上面脚本,会一直卡着,信息如下:
所以我把代码中visdom中的代码都注释掉。
此时,抛弃了visdom功能,让cycleGAN先跑起来
执行命令:nohup python -u train.py > train.log 2>&1 &
三、代码解读
1、train.py解读
以上是一个神经网络模板化的流程。
下面是训练环节。
生成器的损失函数由三部分组成:
(1)Identity Loss:
这个loss的含义是:生成器G用来生成y风格的图像,那么把y送入G应该仍然生成y,只有这样才能证明G具有生成y风格的能力。因此G(y)和y应该尽可能接近。根据论文中的解释,如果不加入该loss,那么生成器可能会自主地修改图像的色调,使得整体的颜色发生变化。
(2)DY和DX处的GAN损失:
由GAN生成的图片尽量要让判别器判别为真。
(3)Cycle Loss:
A生成B后再生成A’,希望A和A‘尽量接近。
B生成A后再生成B‘,希望B和B‘尽量接近。
判别器的损失函数由两部分组成。
判别器干两件事:真的要判别为真,假的要判别为假。与生成器的博弈后,理想情况下判别器针对假图片判别为假的概率为0.5,即对生成器生成的图片无法进行判断。
2、models.py解读