CycleGAN与pix2pix论文精读

文章介绍了CycleGAN和pix2pix这两篇图像转译领域的经典论文。pix2pix利用条件生成对抗网络进行配对图像生成,解决边界模糊问题;CycleGAN则解决了无配对数据的图像转换,通过循环一致损失保留语义信息。两者都使用了对抗损失和特定的网络结构如UNet和PatchGAN。
摘要由CSDN通过智能技术生成

由于毕设和image-to-image translation有关,所以最近拜读了CycleGAN和pix2pix论文,这两篇可以说是图像转译领域的经典论文了,下面是两个链接:
Image-to-Image Translation with Conditional Adversarial Networks
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

一、Pix2pix精读

有趣的是,pix2pix和cycleGAN都是直接把效果图放在论文最前面,给人一目了然的感觉。
在这里插入图片描述

(一)简介

pix2pix这篇论文主要的工作是图像的配对生成,比如给出给出一个简笔画,能够生成对应的真实图像。
作者在一开始就提出,在图像翻译领域,卷积神经网络已经成为了一个workhorse(牛马),但是需要针对不同的任务,设置不同的损失函数,而且这个损失函数要合适。比如我想在图像生成任务中用像素级别的欧几里得距离来做损失函数,那么模型会更倾向于产生模糊的边界。因为哪怕两个图像一样,就因为整体位置偏了一点,欧几里得距离也会变得非常大,因此模型会生成更加模糊的边界。这显然是不合适的。
因此,作者提出,用一个更高级的视角来看待,比如“使输出图像和真实图像无法分辨出来”这样的目标,会更加好一些。而者正是GAN正在做的事,且GAN的损失函数是在去适应数据,因此能够适用于不同的任务,而且不用为每个任务设计单独的损失函数。

(二)方法

方法上,作者主要借鉴了cGAN,也就是条件生成对抗网络,而条件生成对抗网络和传统GAN地区别在于,生成器产生图像时的输入是一个随机变量和一张真实图像;判别器的输入不只是单张图像,而是将真实图像和生成图像一起进行判别,如下图。
在这里插入图片描述

(三)损失函数

对应的,损失函数也会改变:
在这里插入图片描述
上面公式的第一部分,是借鉴了条件生成对抗网络的损失函数,如下图,D是判别器,G是生成器,x是输入的图像,y是对应的真实图像,z是随机变量。对于判别器来讲,是希望 D ( x , y ) D(x,y) D(x,y)尽量大,也就是识别出真实图像的概率大,而 D ( x , G ( x , z ) ) D(x,G(x,z)) D(x,G(x,z))尽量小,也就是认为生成图像时真实的概率尽量小,也就是 1 − D ( x , G ( x , z ) ) 1-D(x,G(x,z)) 1D(x,G(x,z))尽量大;对于生成器来讲,第一项是常量,只要让第二项尽量小就可以。
在这里插入图片描述
而第二部分,是针对生成器的,因为我们希望生成器不仅能够骗过判别器,也就是尽量真实,还要跟输入图像的内容保持一致。因此加了一项L1损失函数,因为相比L2能够产生更少的模糊。
对于生成器和判别器的网络结构:
生成器采用的是UNet网络结构,考虑到生成的图像和原图像一样有高分辨率,因此采用了传统的encode-decoder结构,但是对于图像翻译任务来讲,原图像的很多语义信息很容易在中间的bottleneck中丢失,因此unet的skip-connection可以帮助补充丢失的语义信息:
在这里插入图片描述
对于判别器,采用的是PatchGAN,也就是将几个像素块看成一个patch,patch与patch之间是相互独立的,patch内部又是相关的,也就是马尔科夫随机场。这可能会丢失低频信息(低语义特征),但不用担心,L1损失函数弥补了这个缺点。

二、CycleGAN论文精读

在这里插入图片描述

(一)简介

cycleGAN与pix2pix最大的不同在于,pix2pix的训练需要配对的数据,比如一个简笔画对应一个真实图像,但这往往很难实现,但如果我们做两个域之间的转换,这就变得相对简单了。这就是CycleGAN做的工作。不仅是 x → y x→y xy而是 X → Y X→Y XY
在这里插入图片描述
但是,这个时候会有新问题出现,如何保证在转换时,原图像的语义信息被保留下来了?因为这种映射关系很多,但能够保留x的信息的映射很少,而且很容易导致模式崩溃,也就是无论输入是什么样的,输出的图像都是一样的。因此,如果我们能够使y再映射回x,这样就能保证语义信息在y中不会被丢失掉。如下图所示:
在这里插入图片描述

(二)损失函数

损失函数设计:
在这里插入图片描述
前两部分是对抗损失,即对于映射 X → Y X→Y XY和判别器 D Y D_Y DY有第一项,同理对于映射 Y → X Y→X YX和判别器 D X D_X DX有第二项
在这里插入图片描述
第三项是循环一致损失函数,定义如下,是为了保证在图像翻译时保留原图像的语义特信息。
在这里插入图片描述
后面的消融实验也证明了循环一致损失的重要性。
作者也在论文里提到了,这就像是在训练两个特殊的自编码器,即 X → Y → X X→Y→X XYX Y → X → Y Y→X→Y YXY

(三)应用

CycleGAN其实有很多有意思的应用,作者也提供了网站CycleGAN Project Page,里面不仅有代码,还有很多有趣的应用,比如季节转换,街景转GTA等等,不过也有一些失败的案例,比如下图的马边变斑马,由于训练数据里没有人骑着马,因此很容易将人也变成了黑白条纹。
失败案例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值