【论文笔记】cycleGAN:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》

本文主要是介绍【论文笔记】cycleGAN:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是 cycleGAN 论文《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》的阅读笔记。

在这里插入图片描述
论文一上来就给出了该图,从图中可以看到 cycleGAN 可以从源域图像转换为目标域的图像,并保留源域图像的细节,还可以从目标域图像转换回源域图像。

一、摘要

cycleGAN 的主要贡献是在不适用配对的图像对(paired images)数据时,用 GAN 实现了图像到图像的转换(image-to-image translation),即学习从源域图像到目标域图像之间的映射关系。此外除了传统的对抗损失(adversarial loss),还加入了循环一致性损失(cycle consistency loss)来保证转换后的图像保留原图像的细节信息。

二、记号

  • X X X:源域图像集合
  • Y Y Y:目标域图像集合
  • x x x:一幅源域图像
  • y y y:一幅目标域图像
  • x ^ \hat{x} x^:生成的源域图像
  • y ^ \hat{y} y^:生成的目标域图像
  • G G G:从源域图像到目标域图像的生成器
  • F F F:从目标域图像到源域图像的生成器
  • D X D_X DX:判别生成的源域图像是否为真的判别器
  • D Y D_Y DY:判别生成的目标域图像是否为真的判别器

三、网络结构

在这里插入图片描述
上图是配对的图像和不配对的图像的对比图。

配对的图像对举个例子就是给定一副莫奈的画作,如果再给定与该画作对应的真实场景,则图像就是配对的。这样的数据的获取是十分困难且昂贵的。所以本文没有使用配对的图像对,而是先从源域图像转化为目标域图像,只保证风格相似,而不保证内容和原图一致,记作 y ^ = G ( x ) \hat{y}=G(x) y^=G(x)。还是拿莫奈的画作举例,先将这幅画转化成看起来真实的图像,但是转换后的内容可能和画作不一致。很明显,如果只有上述操作则存在一定的问题:一是不能保证从源域图像 x x x 生成目标域图像 y ^ \hat{y} y^ 是有意义的,因为有多种生成器 G G G 可以让 x x x 可以映射到 y ^ \hat{y} y^,因为 y ^ \hat{y} y^ 只要符合目标域对应的分布就可以了。此外还存在 GAN 难以训练的问题,由于模型崩溃(mode collapse)问题的存在,即生成器宁可多生成一些重复但是很“安全”的样本,也不愿意去生成多样性的样本。
在这里插入图片描述
上图是加入循环一致性之后两个生成器的输出示意图。

为解决上述问题,有必要在整体的网络结构上做些补充、调整,也就是实现循环一致性。举例来说,在语言翻译时,先将英语转化为法语,然后再将法语转化为英语,我们对转换前后的两个英语做损失就可以保证整个过程照着我们期望的方向进行了。所以再加一个从目标域图像转化为源域图像的生成器 F F F,先用 G G G 将源域图像 x x x 转化为目标域图像 y ^ \hat{y} y^,再用 F F F 将其转化回源域图像 x ^ \hat{x} x^,然后计算 x x x x ^ \hat{x} x^ 之间的循环一致性损失,以保证 F ( G ( x ) ) ≈ x F(G(x))\approx x F(G(x))x。类似的,也对目标域图像做类似的操作,以保证 G ( F ( y ) ) ≈ y G(F(y))\approx y G(F(y))y

因为有两个生成器,相应的判别器也有两个,一个是判别生成源域图像 F ( y ) F(y) F(y) 和真实的源域图像 x x x 是否相似的判别器 D X D_X DX,另一个是判别生成的目标域图像 G ( x ) G(x) G(x) 和真实的目标域图像 y y y 是否相似的判别器 D Y D_Y DY
在这里插入图片描述
上图是整个网络的结构示意图,(a) 图是两个生成器和两个判别器的示意图,(b) 图是前向循环一致性示意图,© 是后向循环一致性示意图。

四、损失函数

整个网络的损失函数主要包括两个,一个是对抗损失,用来将生成图像的分布与目标域图像的分布做匹配;另一个是循环一致性损失,用来防止 G G G F F F 学到的映射互相矛盾。

对抗损失

对抗损失的公式如下:
L G A N ( G , D Y , X , Y ) = E y ∼ p data  ( y ) [ log ⁡ D Y ( y ) ] + E x ∼ p data  ( x ) [ log ⁡ ( 1 − D Y ( G ( x ) ) ] \begin{aligned} \mathcal{L}_{\mathrm{GAN}}\left(G, D_{Y}, X, Y\right) &=\mathbb{E}_{y \sim p_{\text {data }}(y)}\left[\log D_{Y}(y)\right] \\ &+\mathbb{E}_{x \sim p_{\text {data }}(x)}\left[\log \left(1-D_{Y}(G(x))\right]\right. \end{aligned} LGAN(G,DY,X,Y)=Eypdata (y)[logDY(y)]+Expdata (x)[log(1DY(G(x))]
其中 p d a t a ( x ) p_{data}(x) pdata(x) 是源域图像的分布, p d a t a ( y ) p_{data}(y) pdata(y) 是目标域图像的分布。类似的可以得到 L G A N ( F , D X , Y , X ) \mathcal{L}_{\mathrm{GAN}}\left(F, D_{X}, Y, X\right) LGAN(F,DX,Y,X) 的表达式。

循环一致性损失

单独的对抗损失不能保证学习到的函数可以将输入的 x x x 映射到想要得到的输出 y y y,所以又加入了循环一致性损失,来保证 x → G ( x ) → F ( G ( x ) ) ≈ x x\rightarrow G(x)\rightarrow F(G(x))\approx x xG(x)F(G(x))x y → F ( y ) → G ( F ( y ) ) ≈ y y\rightarrow F(y)\rightarrow G(F(y))\approx y yF(y)G(F(y))y,其公式如下:
L cyc  ( G , F ) = E x ∼ p data  ( x ) [ ∥ F ( G ( x ) ) − x ∥ 1 ] + E y ∼ p data  ( y ) [ ∥ G ( F ( y ) ) − y ∥ 1 ] \begin{aligned} \mathcal{L}_{\text {cyc }}(G, F) &=\mathbb{E}_{x \sim p_{\text {data }}(x)}\left[\|F(G(x))-x\|_{1}\right] \\ &+\mathbb{E}_{y \sim p_{\text {data }}(y)}\left[\|G(F(y))-y\|_{1}\right] \end{aligned} Lcyc (G,F)=Expdata (x)[F(G(x))x1]+Eypdata (y)[G(F(y))y1]


如此一来,整个网络的总损失函数为:
L ( G , F , D X , D Y ) = L GAN  ( G , D Y , X , Y ) + L GAN  ( F , D X , Y , X ) + λ L cyc  ( G , F ) \begin{aligned} \mathcal{L}\left(G, F, D_{X}, D_{Y}\right) &=\mathcal{L}_{\text {GAN }}\left(G, D_{Y}, X, Y\right) \\ &+\mathcal{L}_{\text {GAN }}\left(F, D_{X}, Y, X\right) \\ &+\lambda \mathcal{L}_{\text {cyc }}(G, F) \end{aligned} L(G,F,DX,DY)=LGAN (G,DY,X,Y)+LGAN (F,DX,Y,X)+λLcyc (G,F)
其中 λ \lambda λ 是控制对抗损失和循环一致性损失两者重要性比重的参数,在实验中 λ = 10 \lambda=10 λ=10。然后我们就可以通过最大最小化上述损失函数来得到最优的生成器了:
G ∗ , F ∗ = arg ⁡ min ⁡ G , F max ⁡ D x , D Y L ( G , F , D X , D Y ) G^{*}, F^{*}=\arg \min _{G, F} \max _{D_{x}, D_{Y}} \mathcal{L}\left(G, F, D_{X}, D_{Y}\right) G,F=argG,FminDx,DYmaxL(G,F,DX,DY)

五、其他设置

  • 在对抗损失中使用了最小二乘损失来代替上面的负的对数似然损失,这样可以使训练更稳定,并且输出结果更好。具体的,通过最小化以下损失来训练生成器 G G G

L G A N ( G , D Y , X , Y ) = E x ∼ p data  ( x ) [ ( D ( G ( x ) ) − 1 ) 2 ] \begin{aligned} \mathcal{L}_{\mathrm{GAN}}\left(G, D_{Y}, X, Y\right) &=\mathbb{E}_{x \sim p_{\text {data }}(x)}\left[(D(G(x))-1)^2]\right. \end{aligned} LGAN(G,DY,X,Y)=Expdata (x)[(D(G(x))1)2]

​ 通过最小化以下损失来训练判别器 D D D
L G A N ( G , D Y , X , Y ) = E y ∼ p data  ( y ) [ ( D ( y ) − 1 ) 2 ] + E x ∼ p data  ( x ) [ D ( G ( x ) ) 2 ] \begin{aligned} \mathcal{L}_{\mathrm{GAN}}\left(G, D_{Y}, X, Y\right) &=\mathbb{E}_{y \sim p_{\text {data }}(y)}\left[(D(y)-1)^2\right] +\mathbb{E}_{x \sim p_{\text {data }}(x)}\left[D(G(x))^2]\right. \end{aligned} LGAN(G,DY,X,Y)=Eypdata (y)[(D(y)1)2]+Expdata (x)[D(G(x))2]

  • 为了减少模型的震荡,不适用最新的生成器产生的图像作为判别器的输入来训练判别器,而是使用生成器的历史输出来训练判别器。具体的,设置了一个缓冲池保存生成器生成的50张最新图像。
  • 使用 Adam 优化器,batch size 为 1,学习率为 2e-4,在前100个 epoch 里保持不变,在之后的100个 epoch 里线性衰减到0。

这篇关于【论文笔记】cycleGAN:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323165

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi