CycleGAN-Unpaired图像翻译

Pix2Pix中,输入图像数据都是成对的。但在现实生活中,两个不同领域的图像很难有成对的。莫奈的画很好,但莫奈永远也画不出21世纪的样子,所以我们不可能获得21世纪莫奈风格的图像。那么要想让21世纪的图像变成莫奈风格,就必须用到无pair数据。

在这里插入图片描述

在语言翻译中,常用的一种假设是Cycle一致性,即X语言翻译到Y语言在翻译回X语言,应该和初始的表达是一致的。而一言以蔽之,本文介绍的CycleGAN算法就是将这种Cycle一致性思维引入到图像翻译任务上来。

算法模型

本文的问题和算法框架与Pix2Pix一致。如果对Pix2Pix不了解的话,出门左转到Pix2Pix进行阅读。

其实之前有很多Unpaired Image Translation的算法出现。但是相对于它们,CycleGAN的优势在于:

  • 不依赖基于特定任务的预定义的输入和输出的相似度计算方法。
  • 不需要假设输入和输出在同一个低维embedding空间。

公式变量定义

  • X,Y:两个领域
  • {x}, {y}: 两个领域的图像集合
  • 映射G: X->Y
  • 映射F: Y->X
  • DX: 用于区分{x}和{F(y)}
  • DY: 用于区分{y}和{G(x)}

损失函数

首先是GAN Loss,对于映射G来说,GAN loss是:

在这里插入图片描述

对于映射F有一个类似的公式。

其次是Cycle GAN的核心, Cycle一致性Loss。所谓的Cycle一致性,就是要保证

  • 前向一致: x->G(x)->F(G(x))≈x
  • 后向一致: y->F(y)->G(F(y))≈y

在这里插入图片描述

表示成公式为:

在这里插入图片描述

最后汇总的损失函数是:

在这里插入图片描述

Why works

为什么Cycle一致性能够起作用?

对于Unpaired问题来说,只是用普通GAN的话可以学到的模型有很多种。种类数目为领域X和领域Y之间的随机映射数目。所以只是用普通GAN损失函数无法保证输入x能够得到对应领域的y。而Cycle一致性的出现,降低了随机映射的数目。从而保证得到的输出不再是随机的。

训练细节

CycleGAN算法仍然是GAN算法,所以需要定义G模型和D模型。在CycleGAN中,G的模型结构与Perceptual Loss中一致,且使用instance normalization。

模型D则是70x70的PatchGAN中的D。这样的D在Pix2Pix图像翻译模型中也有使用,能够使用较少的参数和应用到更大的图像上。

为了使GAN的训练更加稳定,使用平方损失而不是Log似然。

在这里插入图片描述
为了减少震荡,使用历史生成图片而不是最新生成图片来进行D的训练。具体为缓存50张历史生成图像。

其他细节:

  • λ=10
  • Adam 优化算法
  • learning rate前100个epoch为0.0002,在下100个epoch上线性下降。

实验

实验检测手法仍然是AMT和FCN-score,与Pix2Pix图像翻译相似。

对比baseline算法

  • CoGAN
  • Pixel Loss + GAN
  • Feaure Loss + GAN
  • BiGAN
  • Pix2Pix(在Pair数据上训练)

在这里插入图片描述
在这里插入图片描述

Loss function实验

对比普通GAN损失,GAN+前向一致性损失,GAN+后向一致性损失,CycleGAN

在这里插入图片描述

应用

  • Collection Style Transfer
  • Object Tranfiguration
  • Season Transfer
  • Photo Generation From Paintings
  • Photo Enhancement

更多效果图请参考Paper

总结

使用了普通的GAN和两个方向上的一致性损失解决了Unpair的图像翻译问题。虽然效果比Pix2Pix要差,但已经达到了能看的地步。

但Pix2Pix系列的GAN算法整体上来说,在色彩和纹理上能够达到较好的效果,在有几何学变换的时候,领域转换的效果不好。比如猫狗转换问题。

另外,Unpaired问题与Paired问题存在一个Gap,生成的图像总体上相差太远。为了解决这个混淆性,弱监督或者半监督可能会帮助提高效果。

Reference

更多内容欢迎关注微信公众号【雨石记】.

<think>嗯,用户这次的问题非常聚焦——ta想确认某个特定路径下的模型是否对应CycleGAN马变斑马训练环境。这个问题涉及到开源项目结构和模型版本管理,需要结合引用内容和项目常识来验证。 用户提到的路径"junyanz/pytorch-CycleGAN-and-pix2pix/i2/v1"看起来像是项目内部的子目录。根据引用[1]的核心文件说明,训练脚本明确包含train_cyclegan_turbo.py,而马变斑马正是CycleGAN的经典案例(引用[4]提到的Horsezebra数据集)。但路径中的"i2/v1"比较可疑——开源项目通常不会用这种命名,更像是用户自定义的实验版本号。 注意到引用[3]提到photo2cartoon项目的数据预处理流程,这说明用户可能正在尝试类似图像转换任务。用户反复确认路径的行为,暗示ta可能遇到了环境配置问题或模型加载失败的情况。考虑到CycleGAN的通用性,其实只要存在训练脚本和预训练权重,具体存储路径并不影响模型本质。 需要提醒用户的是:1)官方文档(引用[1]的training_cyclegan_turbo.md)才是验证标准 2)模型是否有效应当通过实际推理测试(引用[1]的inference_unpaired.py)。对于这类开源项目,直接运行测试脚本比纠结路径更高效——毕竟研究人员常会自定义实验目录结构。 </think>根据提供的引用信息和项目结构分析,可以确认`junyanz/pytorch-CycleGAN-and-pix2pix`项目中**包含马变斑马的CycleGAN训练环境**,但路径`i2/v1`的具体含义需结合项目结构解读: 1. **核心训练支持** 引用[1]明确说明项目包含`src/train_cyclegan_turbo.py`训练脚本[^1],而引用[4]指出该项目在`Horse→zebra`(马变斑马)数据集上进行了实验验证[^4],**表明该项目原生支持此类训练任务**。 2. **路径解析** - `i2/v1` **非标准路径**:项目官方文档未提及此路径格式(引用[1]中的训练文档路径为`docs/training_cyclegan_turbo.md`[^1]) - 可能含义: * `i2`:可能是自定义实验编号(如第二次迭代) * `v1`:版本标识(如首次训练版本) * 需通过项目目录结构验证: ``` pytorch-CycleGAN-and-pix2pix/ ├── checkpoints/ # 模型保存目录(通常含horse2zebra) │ └── horse2zebra/ ├── datasets/ # 数据集目录 │ └── horse2zebra/ └── scripts/ # 训练脚本 ├── train_cyclegan.sh # 马变斑马训练入口 ``` 3. **结论** ✅ **支持训练**:项目环境完整支持马变斑马训练(含数据集加载、训练脚本、预训练模型) ❓ **路径含义**:`i2/v1`需结合具体目录验证,可能是: - 用户自定义的实验子目录(如`checkpoints/horse2zebra_i2_v1`) - 非官方标准路径,需检查是否存在对应模型文件(`.pth`)或配置文件 建议通过以下命令验证路径有效性: ```bash ls checkpoints/horse2zebra_i2_v1/ # 检查模型文件 cat checkpoints/horse2zebra_i2_v1/train_opt.txt # 查看训练配置 ``` --- ### 相关问题 1. CycleGAN 马变斑马数据集如何预处理? 2. 如何复现官方马变斑马训练流程? 3. `train_cyclegan_turbo.py` 相比原始版本有何优化? 4. 模型版本管理最佳实践是什么? > 注:若需精确验证`i2/v1`路径,建议提供完整项目结构树或检查`checkpoints/`目录下的实际子目录名称。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值