看了《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》这篇论文,大致了解了CycleGAN的工作原理,为了更好的理解他损失函数的设计,结合提供的代码,我绘制了损失函数的流程图,并且用maps跑了代码,图中的图片就是测试集挑选出来的。通过看代码,我发现他的输入是不配对的,也就是real_B并不是并不是real_A的标签图。当然你可以设置opt.serial_batches=True,这样输入 real_B就是real_A的标签图,当然False训练结果其实也可以,和True差别不大。没理解这其中的含义,后续在了解了解。
其中idt_A,idt_B, cycle_A,cycle_B都是通过L1损失计算出来的。