cyclegan网络结构_【论文解读】用于卡通人脸生成的关键点辅助CycleGAN

87bd6dd8c034370d5e3b0eb53d8f6370.png

香港中文大学贾佳亚团队联合哈尔滨工业大学(深圳)、腾讯优图实验室提出一种人像转卡通图画的新论文并上传至arXiv,论文基于人脸关键点与CycleGAN进行了改进。

cefa8f90365d3f057500ca374c10fd99.png
arXiv链接: https:// arxiv.org/abs/1907.0142 4

本文对该论文进行原理解读。在分析这篇文章之前,我们先回顾一下image translation这个计算机视觉问题。

CycleGAN原理简介

熟悉生成式模型GAN的人或许对生成器G与判别器D联合对抗性训练的模型结构及其原理并不陌生,简单来说就是生成器通过损失优化生成符合要求(损失函数/条件)的图片,判别器对生成的图片与训练集图片进行区分并给生成器生成的图片以损失,通过损失函数求取的梯度来更新生成器的权重。

到条件生成对抗网络的时候,如果要训练一个图像到图像的转换工作,比如下面这种:

a3fb6923190bdbb3b09415385c1a47d4.png
(图片截取自Pix2Pix论文原文https://arxiv.org/pdf/1611.07004.pdf)

通常需要收集大量的配对图像,比如从街景图转换称语义分割图,然后用对应的图像进行生成,或者黑白-彩色转换亦是同样的过程。

然而在现实生活中,很多需要转换的图像都是不一一配对的,比如将某幅风景画转换风格为Van Gogh风格的画作,得到这种配对的图片都是几乎不可能的。于是UC Berkeley的朱俊彦提出了CycleGAN模型(https://arxiv.org/pdf/1703.10593.pdf)。

CycleGAN解决了什么问题?

CycleGAN的提出,正如论文中介绍的,将图像从一个域转换为另一个域,并训练另一个网络使用循环转换的思想,从而免去了需要图像对监督训练的麻烦。

先上一张效果图。

fc7563a80af3695736bb2a4ef8635fa2.png

CycleGAN的原理是什么?

6c35a9bd7e4ccad9053c3ef66f66a258.png

整个网络模型包含四个模块:两个生成器G、F,两个判别器

。如(a)所示,生成器G用来将X域的图片映射到Y域,F将G从X域映射的图片再次映射回原来的部分,
用来监督G的生成,即
接受属于Y域的真实图片和G生成的Y域假图片,
用来判别F从Y域假图片映射回来的图片和真实的X域图片。图(b)和(c)形象的描述了这一过程。

要知道,我们的目的是实现两种图像域之间的转换(例如,马转换成斑马,同时斑马也可以转换成马),所以根据(b),生成器G在X域中取出一张图片x,并输出另一张图片

,此时判别器DY给予反馈,将对抗性损失通过
传递给G,同时DY要再一次更新自身权重。另一方面,生成器F将
转换回原来的X域,得到
与x理应具有相同的内容,如b下方所示,这样的一个过程构成了循环,所以输出
的约束即为cycle-consistency loss。同理如图(c)所示,这一过程主要用于训练F,其余的类比。

CycleGAN的损失函数

根据笔者看论文的经验,在生成式对抗网络中,除了少数网络结构创新导致实验结果提升以外,其他的网络结构改动通常带来的优化并不是很大,相反,跟原理联系紧密的优化目标:对抗性损失函数,在GAN的训练中可能重要性程度要大得多。

在CycleGAN中,对抗性损失仍然给如原始GAN一样为:

同理,生成器F的对抗性损失为:

大头来了Cycle-Consistency Loss:

最终损失函数为:

好了,基础就讲到这,如果有不懂的可以取翻阅原论文,下面介绍本次的论文。


人像转卡通CycleGAN

作者在CycleGAN的基础上改进输入条件,同时修改了判别器,最终在无匹配数据集上训练得到了比CycleGAN更优的结果,甚至比肩动画设计师的专业绘画结果。

c16e9c0b16ac19bd69037ee1c46014ec.png

导读

关于技术难点就不多说了,如果有配对的数据,完全可以使用一个有监督训练方式,甚至都可以不用GAN,但是这样的后果就是模型容易过拟合,何况在大多数条件下,让专业人员给每一个人绘制专属卡通头像基本不现实,同时也限制了创造力,所以为何不将这种需要大量人力工作交给深度学习算法来做呢?(PS:我个人很忌讳什么东西都用AI来吹,所以在我的概念范畴中,这类计算机视觉技术还不算AI,不过是一个人的智能下的image mapping而已)。

既然存在配对数据集困难的问题,那么已有的算法中,CycleGAN的思想是无匹配图像转换任务的最好的模型之一,总的来说,作者的工作有几个贡献:

  • 作者提出了一个人脸关键点辅助的CycleGAN,将真实人脸转化为具有不匹配训练数据的卡通头像,并产生了比原始CycleGAN更高质量的结果。
  • 作者引入了关键点的一致性损失,有效地解决了不成对训练数据之间结构不匹配的问题。
  • 作者使用全局和局部鉴别器,显着提高生成的卡通头像的图像质量。
  • 作者构建了一个包含两种卡通风格的新数据集。 该数据集包含2,125个bitmoji风格样本和17,920个动画头像样式图像,以及相应的两种样式面部关键点标注。

方法

基本结构使用CycleGAN,即包含G:X to Y 和F:Y to X。作者在CycleGAN的基础上,添加了人脸关键点作为条件输入,并与输入图像级联输入生成器G,得到卡通人脸,卡通人脸在回归网络下生成人脸关键点特征图作为条件损失。同时使用多个局部判别器对眼部、鼻子、嘴巴进行鉴别,其生成网络G结构如下:

0fd8fc45cc468a4014963e63a3f364e1.png

Landmark损失

使用一个回归器R,即将输入图片回归出5个人脸关键点坐标,从而得到关键点一致性损失:

代表输入关键点的heatmap,R为与训练的U-Net型结构的关键点回归器,并且有5个通道的输出,这图个通道分别对应五个相应的域。RY是用于Y域图像的关键点回归器。

全局判别器

必不可少的判别器——全局判别器,使用了普通的GAN的对抗性损失函数:

9e0fe19039b87ed4c32144d8440706ed.png

关键点辅助的局部判别器

作者引入了三个局部判别器,以分别用于眼睛、鼻子和嘴巴,对抗性损失如下:

50a816bb300e5be995c1b796f39cc41c.png

为卡通头像对应的局部图像patch。

训练技巧

训练GAN网络本身就是个很麻烦的事情(比一般的视觉任务都要困难),比如D不能训的太好,也不能一点鉴别能力都没有。尤其在作者这个任务里,不管是回归器还是生成器或者局部判别器,对回归器来说,虽然输入一张卡通头像可以得到输出的关键点map信息,但是由于神经网络的黑盒子特性,不管输入什么内容,输出都会是一个5通道张量。假设,G网络得到的并不是一个卡通人脸,那么R回归的关键点信息就是不准的,根据输入的关键点计算损失就不能有利于生成结构一致的卡通头像,又比如,如果协同训练判别器,以及局部判别器,有可能局部判别器很容易区分生成样本与真实样本,这种情况下判别器会出现梯度消失,生成器就根本没法再训练。所以作者在这里将模型训练分解成两个子阶段。

第一阶段

先不使用局部判别器,训练出粗糙的卡通人脸,大约需要100k次迭代。

第二阶段

在第一阶段G可以生成粗糙的结果上引入局部判别器,从而优化局部细节,最后得到最终精细的模型。

4. 实验结果

作者放出的实验结果也是相当不错,这里列举一二。

人物画像风:

130892ea88a7ecad17c43126acbf4a75.png

还有二次元风格:

b895bc1f398e388e0e220daf8cec73eb.png

不得不说,在美感上,作者的实验结果比其他方法确实改进了很多。

除此之外,作者还进行了用户调研,给生成的结果做了个比较,结果显示作者的方法被大家pick的概率是最高的(笔者内心OS:这TM全是套路啊)

45fa8a25a2e14d90520ebb87ad53aac5.png

最后,作者在Ablation Study部分还比较了有无Local Discriminator的区别:

181e4d1ed0ed5902000e26b169457779.png

可以发现,有没有local patch discriminator还是有较大差别的。

总结

通常的GAN的训练方法,需要配对的数据,Cycle construct的模型在一定程度上解决了这一矛盾。虽然在整体上,CycleGAN生成的Bitmoji难以在局部的部分产生更精细的结果,而且由于L1损失是基于全局平均的结果,很难将生成质量反馈到卡通人脸的局部区域,所以作者提出了局部判别器的思路。

值得一提的是,将一个区域进行判别进而梯度反向传播在代码上比原始CycleGAN增加了实现难度,最终带来的效果提升当然是值得肯定的。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值