在这里插入图片描述

Pix2Pix实现图像转换

Pix2Pix概述

Pix2Pix是基于条件生成对抗网络(cGAN, Condition Generative Adversarial Networks )实现的一种深度学习图像转换模型,该模型是由Phillip Isola等作者在2017年CVPR上提出的,可以实现语义/标签到真实图片、灰度图到彩色图、航空图到地图、白天到黑夜、线稿图到实物图的转换。Pix2Pix是将cGAN应用于有监督的图像到图像翻译的经典之作,其包括两个模型:生成器判别器

传统上,尽管此类任务的目标都是相同的从像素预测像素,但每项都是用单独的专用机器来处理的。而Pix2Pix使用的网络作为一个通用框架,使用相同的架构和目标,只在不同的数据上进行训练,即可得到令人满意的结果,鉴于此许多人已经使用此网络发布了他们自己的艺术作品。

基础原理

cGAN的生成器与传统GAN的生成器在原理上有一些区别,cGAN的生成器是将输入图片作为指导信息,由输入图像不断尝试生成用于迷惑判别器的“假”图像,由输入图像转换输出为相应“假”图像的本质是从像素到另一个像素的映射,而传统GAN的生成器是基于一个给定的随机噪声生成图像,输出图像通过其他约束条件控制生成,这是cGAN和GAN的在图像翻译任务中的差异。Pix2Pix中判别器的任务是判断从生成器输出的图像是真实的训练图像还是生成的“假”图像。在生成器与判别器的不断博弈过程中,模型会达到一个平衡点,生成器输出的图像与真实训练数据使得判别器刚好具有50%的概率判断正确。

在教程开始前,首先定义一些在整个过程中需要用到的符号:

  • xxx:代表观测图像的数据。
  • zzz:代表随机噪声的数据。
  • y=G(x,z)y=G(x,z)y=G(x,z):生成器网络,给出由观测图像xxx与随机噪声zzz生成的“假”图片,其中xxx来自于训练数据而非生成器。
  • D(x,G(x,z))D(x,G(x,z))D(x,G(x,z)):判别器网络,给出图像判定为真实图像的概率,其中xxx来自于训练数据,G(x,z)G(x,z)G(x,z)来自于生成器。

cGAN的目标可以表示为:

LcGAN(G,D)=E(x,y)[log(D(x,y))]+E(x,z)[log(1−D(x,G(x,z)))]L_{cGAN}(G,D)=E_{(x,y)}[log(D(x,y))]+E_{(x,z)}[log(1-D(x,G(x,z)))]LcGAN(G,D)=E(x,y)[log(D(x,y))]+E(x,z)[log(1D(x,G(x,z)))]

该公式是cGAN的损失函数,D想要尽最大努力去正确分类真实图像与“假”图像,也就是使参数logD(x,y)log D(x,y)logD(x,y)最大化;而G则尽最大努力用生成的“假”图像yyy欺骗D,避免被识破,也就是使参数log(1−D(G(x,z)))log(1−D(G(x,z)))log(1D(G(x,z)))最小化。cGAN的目标可简化为:

argmin⁡Gmax⁡DLcGAN(G,D)arg\min_{G}\max_{D}L_{cGAN}(G,D)argGminDmaxLcGAN(G,D)

pix2pix1

为了对比cGAN和GAN的不同,我们将GAN的目标也进行了说明:

LGAN(G,D)=Ey[log(D(y))]+E(x,z)[log(1−D(x,z))]L_{GAN}(G,D)=E_{y}[log(D(y))]+E_{(x,z)}[log(1-D(x,z))]LGAN(G,D)=Ey[log(D(y))]+E(x,z)[log(1D(x,z))]

从公式可以看出,GAN直接由随机噪声zzz生成“假”图像,不借助观测图像xxx的任何信息。过去的经验告诉我们,GAN与传统损失混合使用是有好处的,判别器的任务不变,依旧是区分真实图像与“假”图像,但是生成器的任务不仅要欺骗判别器,还要在传统损失的基础上接近训练数据。假设cGAN与L1正则化混合使用,那么有:

LL1(G)=E(x,y,z)[∣∣y−G(x,z)∣∣1]L_{L1}(G)=E_{(x,y,z)}[||y-G(x,z)||_{1}]LL1(G)=E(x,y,z)[∣∣yG(x,z)1]

进而得到最终目标:

argmin⁡Gmax⁡DLcGAN(G,D)+λLL1(G)arg\min_{G}\max_{D}L_{cGAN}(G,D)+\lambda L_{L1}(G)argGminDmaxLcGAN(G,D)+λLL1(G)

图像转换问题本质上其实就是像素到像素的映射问题,Pix2Pix使用完全一样的网络结构和目标函数,仅更换不同的训练数据集就能分别实现以上的任务。本任务将借助MindSpore框架来实现Pix2Pix的应用。
在这里插入图片描述

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐