GANs系列:用于图像风格迁移的CycleGAN网络原理解读

您所在的位置:网站首页 gan网络原理 GANs系列:用于图像风格迁移的CycleGAN网络原理解读

GANs系列:用于图像风格迁移的CycleGAN网络原理解读

2023-08-15 04:02| 来源: 网络整理| 查看: 265

CycleGAN论文:https://arxiv.org/pdf/1703.10593.pdf

一、前言

       目前关于GAN应用,比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。

pix2pixGAN参考:GAN系列之 pix2pixGAN 网络原理介绍以及论文解读

      pix2pixGAN有一个明显的缺点就是,在进行训练的时候必须提供成对的数据集。比如当我们想生成梵高风格的画时,梵高本人画的作品肯定是相对较少的,这个时候就可以考虑使用cycleGAN。

二、什么是cycleGAN?

cycleGAN主要用于图像之间的转换,例如风格迁移。如下图所示

当然cycleGAN还有一些其他有趣的应用等待我们发现,例如把男人的照片转换成女人。

cycleGAN适用于非配对的图像到图像转换,解决了模型训练需要成对数据的困难,论文也对成对和不成对的数据进行了说明展示,如下图所示

三、cycleGAN的原理

        原理可以概括为将一类图片转成成另一类图片,比如,现有两个样本空间X、Y,我们希望把X空间中的样本转换成Y空间中的样本。这种转换只是风格上的转换,实际X Y 的内容是不一样的。实际的目标就是学习从X到Y的映射,假设该映射为F,它就对应着GAN中的生成器,F就可以将X中的图片A转换为Y中的图片F(A),当然,对于生成的图片,我们仍然需要使用鉴别器来鉴别其真假情况。 

         在足够大的样本容量下,网络可以将相同的输入图像集合映射到目标域中图像的任何随机排列,其中任何学习的映射可以归纳出与目标分布匹配的输出分布(即:映射F完全 可以将所有x都映射为Y空间中的同一张图片,使损失无效化)因此,单独的对抗损失Loss不能保证学习函数可以 将单个输入Xi映射到期望的输出Yi。 对此,作者又提出了所谓的“循环一致性损失” (cycle consistency loss)

        我们希望能够把 A 图片转化为 B图片。 为了实现这个过程,我们需要两个生成器 G_AB 和 G_BA,分别把  A 和  B 的图片进行互相转换

 四、损失函数的定义

        为了训练这个单向 GAN 需要两个 loss, 分别是 生成器的重建 loss 判别器的判别 loss。

判别 loss: 判别器 D_B 是用来判断输入的图片是否是真实的  B 图片

生成 loss:生成器用来重建图片 a,目的是希望生成的图片 G_BA(G_AB(a)) 和原图 a 尽可能的相似,那么可以很简单的采取 L1 loss 或者 L2 loss。最后生成 loss 就表示为 :

CycleGAN 其实就是一个 A→B 单向 GAN 加上一个 B→A 单向 GAN。两个 GAN 共享两个生成器,然 后各自带一个判别器,所以加起来总共有两个判别器 和两个生成器。一个单向 GAN 有两个 loss, 而 CycleGAN 加起来总共有四个 loss。 

循环一致性损失

 GAN网络的对抗loss之外,还有一个cycle-loss,也就是循 环一致损失。因为网络需要保证生成的图像必须保留有原 始图像的特性,所以如果我们使用生成器GA-B生 成一张假图像,那么要能够使用另外一个生成器 GB-A来努力恢复成原始图像。此过程必须满足循环一致性

 总损失:

 五、判别器的结构

      和pix2pixGAN一样,判别器依旧采用Patch-GAN

为什么选择PatchGAN?(马尔可夫判别器)

      为了能更好得对图像的局部做判断,作者提出PatchGAN的结构,也就是说把图像等分成patch,分别判断每个Patch的真假,最后再取平均!作者最后说,文章提出的这个PatchGAN可以看成所以另一种形式的纹理损失或样式损失。在具体实验时,不同尺寸的patch,最后发现70x70的尺寸比较合适。

六、代码实现

GAN项目实战 使用CycleGAN将苹果变成橙子Pytorch版



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3