CycleGAN
cycleGAN可用于风格迁移,用来处理图像转换过程中数据unpair的问题。如下图所示,原本正常马可以变成斑马,同时保持背景不变。其本质是两个对称的GAN,构成一个环形网络。两个GAN共享两个生成器,并各自带一个判别器,即总共两个判别器和两个生成器。
Loss的计算
本质上还是Gan,所以弄清楚其损失函数的计算方法就可以了。
# 鉴别器的loss
def discriminator_loss(disc_of_real_output, disc_of_gen_output, lsgan=True):
if lsgan:
real_loss = keras.losses.mean_squared_error(disc_of_real_output, tf.ones_like(disc_of_real_output))
generated_loss = tf.reduce_mean(tf.square(disc_of_gen_output))
total_disc_loss = (real_loss + generated_loss) * 0.5 # 0.5 slows down rate that D learns compared to G
else: # Use vanilla GAN loss
raise NotImplementedError
real_loss = tf.losses.sigmoid_cross_entropy(multi_class_labels=tf.ones_like(disc_of_real_output),
logits=disc_of_real_output)
generated_loss = tf.losses.sigmoid_cross_entropy(multi_class_labels=tf.zeros_like(disc_of_gen_output),