【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍

参考文献
StarGAN v2: Diverse Image Synthesis for Multiple Domains

近日,百度推出了复现营活动,选了GAN方向和视频分类方向的共九篇论文带领入营的学员们用百度自研的PadddlePaddle框架进行复现,复现的好的还有奖学金,高达2w软妹币。我认为这是个学习的好机会,要复现论文必然要先精读论文,不仅要观其大略还要死扣细节,而魔鬼都藏在细节中。常听有人感叹,看了许多论文,依然过不好这一生,我想这或许是因为你没加入复现营。给个复现营的链接
戳此直达复现营
https://aistudio.baidu.com/aistudio/education/group/info/1340

当然有许多同学更喜欢用pytorch或tf,但我觉得,pytorch或tf毕竟不是自家的东西,哪天美帝说不让用就不让用了,就很忧伤,不如未雨绸缪一起努力把PaddlePaddle的生态弄起来。跟前几次技术革命中我们大中华的缺席不同,AI领域其实我们已占据半壁*,大家一起学好PaddlePaddle,我们足可以与美帝并驾其驱甚至超越美帝,诸君共勉。

废话少叙,接下来给大家分享下这次复现营中的九篇论文之一,StarGAN v2,看名字我们就知道先前肯定还有个StarGAN v1,作者还起了个Star的名字,似乎在暗示自己是明日之星,是什么给了作者这样的勇气,请听下面分解。

我大概在四年前就听说过GAN,其中蕴含了博弈论的先进思想,简单的说就是同时训练一个生成器和一个鉴别器,生成器的目标是生成一幅骗过鉴别器的图片,鉴别器的目标是区分真实图片和生成器生成的图片,在二者的相互斗法中,生成器的造假水平也节节攀升。而且可以证明,GAN在数学上严格超越了VAE(另一种生成器,我也不是很懂,既然被GAN在数学证明上严格超越,那也说明VAE差不多玩完了,我想我也不需要再懂了)。不过GAN给人的感觉是长期以来只被当成一个玩具,究其原因是听说其训练不稳定,会陷入模式坍塌等问题中,经过这几年的发展,又听说问题都解决的差不多了,现在GAN生成的图片已经做到了以假乱真。比如像这样
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
不仅如此,而且做到了你想生成什么就生成什么,GAN进阶成了cGAN(conditional GAN),你可以给生成器指定一个标签,它就会给你生成指定标签对应的事物。但有人觉得,这还不够,我希望能更精细地控制GAN生成的图片,而一两个标签的描述能力有限。话说到这,我们就不禁意识到,不仅一两个标签的描述能力有限,整个语言的描述能力都很有限,很多东西只可意会不可言传,那怎么办?那我们何必想着用语言描述,就用图描述好了,比如我给GAN一张图片,让GAN能在保持这张图片一些特性不变的情形下生成另一种图片,于是CycleGAN应运而生,效果如下
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
输入图片和输出图片分明是两种事物,却保持了某种特性不变,能把马变成斑马,very intersting,其是怎么做到的,先看下面这个单向GAN,
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
我们把马和斑马归属为两个不同的domain,上面的生成器GAB负责把来自domainA的马变成归属为domainB的斑马,而GBA则相反, 把来自domainB的斑马变成归属为domainA的马,再训练一个鉴别器DB,能判断一张图片是来自真实domainB的斑马还是从domainA的马经过GAB转换而来的假斑马,训练上面的单向GAN需要两个loss,分别是生成器的重建loss和判别器的判别loss。

判别loss

判别器DB是用来判断输入的图片是否是真实的domain B图片,于是生成的假图片GAB(A)和原始的真图片B都会输入到判别器里面。loss用公式表示为:

【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
这个公式很容易理解,只要你对GAN有过基本的认知,为显篇幅太长不再细说。

重建loss

重建loss便是希望图片A从domainA转变为domainB时保留一些源图片的特性,上图的GBA生成器用来重建图片a,目的是希望生成的图片GBA(GAB(a))和原图a尽可能的相似,那么可以很简单的采取L1 loss或者L2 loss。最后生成loss就表示为

【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
把两个单向GAN加起来就是CycleGAN
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
上图中左边的单向GAN就是上面详细说明过的,右边的单向GAN就是相反方向也来一遍。

CycleGAN的效果上面也看到了,但CycleGAN仍然有许多不足之处,比如它一个模型只能让马变成斑马,你想让马变成海马,那不行,又得重新训练一个新的模型,那多麻烦啊,于是GAN最终进阶成了StarGAN,既可以让马变成斑马,又可以让马变成海马,还能让马变成木马,就问你服不服!那么StarGAN又是怎么做到的。来看下图
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
有了上面CycleGAN的说明,StarGAN就容易理解多了,首先它的想法是,我想训练一个模型让马能变成斑马,同时也能变成海马,最好还能变成木马,那么一个容易想到的是,我可以加一个标签,标签将决定这匹马究竟能变成什么,上图中的图(b)就是将源图片加上一个target domain标签,生成器G就能将源图片转变为目标域的图片,不同的target domain标签便能引导源图片转变成不同域的图片。与CycleGAN类似,StarGAN也有个重建loss,将生成的fake图片和原始图片的domain标签结合起来喂入到生成器G要求能重建出原始输入图片,再来个鉴别器,将fake图片和真实图片分别喂入到鉴别器D,D需要判断图片是否真实,还需要判断它来自哪个域。

StarGAN的效果如下
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
我们看上图,如果把Blond hair,Gender,Aged等定义成一个domain,我们便能将源图片转变成带有各domain性质的不同图片,同时还保留有源图片的一些特性,也实现了能把马变成斑马,海马,木马的梦想,可喜可贺,那么到这里,感觉所有问题都解决了,此时此刻,StarGAN v2还跑出来刷什么存在感?

只见StarGAN v2扭扭捏捏地说,你有没有觉得,StarGAN的输出太单调了,虽然能把源图片转变为不同domain的图片,但只要我指定完domain标签,它生成的图片居然每次都一样!俗话说的好,要想生活过得好,姿势的掌握不能少!先来看StarGAN v2的效果

【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
你看,同一个输入图片,我指定完domain后,它能一次性给你生成不同的同属一个domain的图片!有了v2,你生活会更精彩!那么丢掉上面的v1,让我们看看v2是怎么做的。

在详细说明之前,先来辨析一组概念,domain和style,这组概念是作者自行定义的,其实我觉得界限也很模糊
domain:一个图像集合,其中的图片可以被分类为同一种具有视觉区分度的类型。
style:每个图像具有的独特外观。
嘿,这么一说,你估计还是不懂,举个不恰当的例子,毕加索画的猫和狗就属于不同的domain,但他们的style是很接近的,而毕加索画的猫和梵高画的猫是同一个domain,但显然style是不同的。

从这出发,那我们可以认为就是当我们输入一张图片和指定一个目标domain后,v2可以把源图片转变成不同style的同属一个domain的不同图片,具体是怎么做的,请看下面
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
看到上面的图(a),有人就问了,跟v1不同,我倒是看到一个style的标签,却没看到一个domain的标签,那么生成器怎么知道要把源图片变成哪个域的,而其实呢,图(a)中的style标签全称为domain-specific styles,已经包含了domain的信息,那么这个标签是怎么生成的,有两种方法,分别对应上图中的图(b)和图©。图(b)是个mapping network,映射网络,把随机生成的一个latent code(通常服从正态分布或某种喜闻乐见的分布)映射成一个style标签,我们可以看到,这个映射网络是多头的,每个头代表一个domain,所以这个映射网络就是可以把latent code映射成带有不同domain信息的带同种style风格的多个domain-specific styles标签,而latent code是随机生成的,所以就是可以有不同种styles标签的出现,于是实现了在把源图片转变成目标domain的图片时可以有多种style的图片出现。图©是style encoder网络,可以输入一张参考图片,该网络可以提取出该参考图片的style,再生成不同的domain-specific styles标签,这些标签的style与输入的参考图片都为同一种,而又带有不同的domain信息,这些domain-specific styles标签又可以送入图(a)的生成器中指导源图片的转换,图(d)是个判别器,也有多个头,代表不同domain,分别用于判别输入的图片是属于该domain的真实图片还是生成器生成出来的fake图片。

至于StarGAN v2的loss函数,与CycleGAN和StarGAN差不多,也有个重建loss,还分为两种,一个风格重建,一个图片重建,分别如下
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
总之都是先转变成一种东西,然后又转回去,希望前后保持一致,以让某种图片的特征一直能够保持。除了这个,StarGAN v2还有个多样性loss,
【飞桨】【PaddlePaddle】【论文复现】之StarGAN v2介绍
希望在不同style的标签引导下,生成器生成的图片的差异足够大,除此之外,还有所有GAN都共有的对抗loss,这里就不说明了。

very well,为了介绍StarGAN v2,我一路把CycleGAN和StarGAN都连带介绍了,可谓业界良心。总体来说,StarGAN v2的各模块的结构,功能都比较明晰,适合拿来上手复现,还在等什么呢,加入复现营,你值得拥有!