CycleGAN算法笔记

CycleGAN是一种无监督图像到图像翻译的深度学习算法,它使用两个生成器和两个判别器实现两个不同域之间的映射。通过cycle consistency loss,即使在没有配对数据的情况下,也能确保从一个域转换后再转换回原域时图像的一致性。论文和开源代码链接分别给出,实验结果显示CycleGAN在图像生成任务中表现出色,避免了模式崩塌问题,并与其他图像风格迁移算法形成对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
论文链接:https://arxiv.org/abs/1703.10593
代码链接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

CycleGAN是发表在ICCV2017关于将GAN应用在无监督的图像到图像翻译(image-to-image translation)的著名算法,和应用于有监督图像翻译的pix2pix几乎是同一批作者。CycleGAN最大的特点是无监督,也就是不要求训练数据是成对的,只需要提供不同域(domain)的图像就能成功训练不同域之间图像的映射(或者叫翻译),这大大降低了图像翻译的门槛,毕竟某些类型的成对数据并不容易获取,比如同一个场景的夏天照片和冬天照片、同样造型的斑马和马等,因此CycleGAN是非常棒的一个作品
关于成对和非成对数据的对比可以看Figure2,左边是成对的数据,也就是pix2pix算法所使用的训练数据;右边是非成对的数据,X和Y是不同域的数据,不同域的例子比如夏天和冬天、斑马和马、苹果和橘子等。
在这里插入图片描述
CycleGAN算法的整体示意图如Figure3所示,整体上包含2个GAN网络
假设现在有X和Y两个域,可以简单理解为X为斑马,Y为马。在CycleGAN中有2个生成器,分别用G和F表示,如Figure3(a)所示,生成器G用来基于X域的图像生成Y域的图像(斑马->马);生成器F用来基于Y域的图像生成X域的图像(马->斑马),这2个生成器的定位是相反的过程,通过(b)和©中的cycle-consistency loss进行约束。同时CycleGAN中有2个判别器,分别用DX和DY表示,用来判断输入的X域或Y域图像是真还是假。因此CycleGAN可以看做是2个GAN的融合,一个GAN由生成器G和判别器DY构成,实现从X域到Y域的图像生成和判别;另一个GAN由生成器F和判别器DX构成,实现从Y域到X域的图像生成和判别,两个网络构成循环(cycle)的过程
在这里插入图片描述
CycleGAN的整个过程可以用如下示意图表示,截取自:https://hardikbansal.github.io/CycleGANBlog/。这个图对CycleGAN的描述非常清晰,该图总共分为上下2部分,分别表示从X域到Y域的图像生成和从Y域到X域的图像生成。
在这里插入图片描述
CycleGAN的整体优化目标如公式3所示,一共包含3个部分,第一部分LGAN(G,DY,X,Y)表示生成器G和判别器DY的优化目标;第二部分LGAN(F,DX,Y,X)表示生成器F和判别器DX的优化目标,这2部分是GAN算法本身的优化目标。第三部分Lcyc(G,F)表示cycle consistency loss,用于约束从变换域再变换到原域时图像的一致。
在这里插入图片描述
LGAN(G,DY,X,Y)如公式1所示,是常规GAN的优化目标,判别器DY要最大化这个优化目标,生成器G要最小化公式1中的后半部分。LGAN(F,DX,Y,X)也是同理。

CycleGAN算法是一种无需成对数据的图像转换方法,它通过两个生成器和两个判别器,将一个图像域中的图像映射到另一个图像域中的图像。下面是实现CycleGAN算法的步骤: 1. 定义两个图像域,分别为A和B。 2. 定义两个生成器,分别为G_A和G_B,它们的输入是A和B域的图像,输出是B和A域的图像。 3. 定义两个判别器,分别为D_A和D_B,它们的输入是A和B域的图像,输出是一个二元值,表示输入图像是真实的还是生成的。 4. 定义损失函数。CycleGAN使用了四种损失函数:生成器损失、判别器损失、循环一致性损失和身份损失。生成器损失是生成器输出与真实图像之间的差异,判别器损失是判别器对真实图像和生成图像的分类误差,循环一致性损失是指对于任意图像x,将其通过G_A生成为B域的图像并通过G_B生成为A域的图像,最终得到的图像应该和x相似,身份损失是指对于任意图像x,将其通过G_A或G_B生成为相应域的图像,应该与x相似。 5. 训练网络。在训练过程中,先训练判别器,然后训练生成器。对于每个生成器,在训练时需要同时优化生成器损失和循环一致性损失。在训练过程中,还需要使用身份损失来保持图像的一致性。 6. 生成图像。在训练结束后,使用训练好的生成器来将A域的图像转换为B域的图像,或将B域的图像转换为A域的图像。 以上就是CycleGAN算法的实现步骤,需要注意的是,不同的数据集和任务需要不同的网络结构和超参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值