deep-learning - CycleGAN 用于未配对的图像到图像的转换
问题描述
参考关于 CycleGAN 的原始论文,我对这条线感到困惑
因此,最优 G 将域 X 转换为与 Y 相同分布的域 Y。然而,这样的转换并不能保证单个输入 x 和输出 y 以有意义的方式配对——有无限多的映射 G 会在 y^ 上产生相同的分布。
我知道有两组图像,它们之间没有配对,所以当生成器拍摄一张图像时,让我们说 X 集中的 x 作为输入并尝试将其转换为类似于 Y 集中图像的图像,那么我的问题是集合 Y 中有很多图像,那么我们的 x 将被翻译成哪个 y?Y 组有很多可用的选项。这就是我在上面写的论文中所指出的吗?这就是我们采用循环损失来克服这个问题并通过将 x 转换为 y 然后将 y 转换回 x 来在任意两个随机图像之间创建某种类型的配对的原因吗?
解决方案
好吧,图像x
不会被转换为具体图像y
,而是转换为域 Y 的“样式”。输入被馈送到生成器,它试图从所需的分布(另一个域)生成样本,生成的图像然后进入鉴别器,鉴别器试图预测样本是来自实际分布还是由生成器产生。这只是正常的 GAN 工作流程。
如果我理解正确,在您引用的行中,作者解释了对抗性损失引起的问题。他们在这里再说一遍:
理论上,对抗性训练可以学习映射 G 和 F,它们分别产生与目标域 Y 和 X 相同分布的输出。然而,如果容量足够大,网络可以将相同的输入图像集映射到目标域中图像的任意随机排列,其中任何学习的映射都可以产生与目标分布匹配的输出分布。因此,仅对抗性损失不能保证学习函数可以将单个输入 x_i 映射到所需的输出 y_i。
这是引入循环一致性的概念来产生有意义的映射,减少可能的映射函数的空间(可以看作是正则化的一种形式)的原因之一。这个想法不是在数据集中已经存在的 2 个随机图像之间创建配对(数据集保持未配对),而是要确保,如果您将真实图像从域映射X
到域Y
然后再返回,您会得到原图回来。
循环一致性鼓励生成器避免不必要的更改,从而生成与输入共享结构相似性的图像,它还可以防止生成器过度产生幻觉和模式崩溃。
我希望这能回答你的问题。
推荐阅读
- azure - 从 Azure 中部署的 bot sdk 获取当前用户的访问令牌
- angular - 如何以角度生成索引
- android - 为什么在android中使用MVVM而不是MVC
- reactjs - 是否可以使用 jsdoc 子文档或渲染道具用作函数?
- excel - 创建一个只有偶数 col 的范围
- shell - 识别包含特定关键字的所有文件或文件夹
- python - 使用不同的参数集在 Python 中执行具有多个参数的存储过程
- julia - 类 BLAS 库的纯 Julia 实现
- python - 排除 HTML 元素(recursive=False 不起作用)
- java - Java 泛型不兼容类型(不存在类型变量的实例)