首先,对CycleGAN不了解的可以下载论文《Unpaired Image-to-Image Translation using Cycle-Consistent Adversial Network》,附上下载链接。
这里我们只对CycleGAN的特点以及训练时的感悟进行总结。
先上一张自己画的总体框架。
总体的流程:将图像分成X域和Y域,网络有两个过程,第一个是蓝线标示的前向过程,从X域真图像开始,经过一个生成器转换到Y域,再经过一个生成器回到X域;同理,由红色虚线标示的反向过程是图像从Y域出发,经过一个生成器转换到X域,再经过一个生成器回到Y域。每个生成器后都有一个判别器,来判断当前输入图像的真假。判别器使用PatchGAN。
循环一致性检验是加在X域真图像和X域假图像之间,还要Y域真图像和Y域假图像之间,计算L1 loss 来保证图像内容的不变性。如果不加循环一致性检验,在训练时很容易导致模式坍塌,这也是训练不成对图像的难点所在。
训练时对抗损失使用最小二乘损失,我在训练时,图像上采样过程使用亚像素卷积层代替反卷积,有利于消除棋盘效应。
对于L1 loss 我在训练中尝试使用过L2 loss 但发现loss曲线比较震荡,这里不推荐。
我用CycleGAN做了人脸超分辨还有手势图像转换,有兴趣的可以交流一下。