怎样用GAN生成各种胖吉猫?谷歌大脑程序员教你撩妹神技

2018 年 5 月 18 日 量子位 特别关注前沿科技
圆栗子 编译整理
量子位 报道 | 公众号 QbitAI

如果,AI可以帮你生成一些猫,很萌的那种,但是不能吸,你会做何感想?

Facebook聊天框里出道的灰色短毛猫Pusheen,是柔软的微胖界宠儿,中文名字叫胖吉。

一个来自谷歌大脑的程序猿说,他和他妹子都很喜欢这只胖子。于是,他有了用AI帮妹子生出很多很多小吉 (的图片) 的想法。 

 “其实就是有了眼睛和耳朵的水滴”

当然,并不只是想想而已。

一切从这里BEGAN

生成对抗网络 (GAN) 是精分的AI,由两个神经网络组成,一是生成模型 (Generator) ,即画师,二是判别模型 (Discriminator) ,即鉴赏家。缩略为G和D。

人类要用大量的图像来喂养GAN,培养两个神经网络的艺术细菌。

 先把食物对成山?

然后,G可以在熏陶之下,模仿着画出自己的作品,让D以为那就是人类投喂的画;而D渐渐了解自己吃过的画是什么味道,就能辨别哪些图是G画的。

相爱相杀的日子里,两者技能都会得到有效提升。G的画功越来越像人类,D也越来越难骗。

不过,技术宅支配的不是普通的GAN,而是名为BEGAN的新朋友。

 结构和EBGAN差不多

它的判别模型是自编码器 (AutoEncoder) 结构,即D的输入是图像,输出是编码解码后的图像;生成模型则借鉴了WGAN的损失函数。

不过,GAN的一生阅片无数,通常需要喂食几万乃至几百万张图像,才能茁壮成长。

可惜的是,虽然贵为表情包,胖吉也没有很多照片的。

 尊贵的座驾

于是,机智的少年加了一个 (并不厉害的) 小特技,一幅图翻过来掉过去,或放大或缩小,或背景变白,就变出了很多训练素材。不过,毕竟原始图库几百张,扩充之后可能还是有些干瘪。

我有特别的模仿技巧

既然胖吉的姿势不多,场景也不多,技术宅当时就没有太大的幻想。他抱着养死也没事的一颗宽广的心,开始训练BEGAN。

训练过程中,D的目标是让判别错误越少越好;G的目标,是让D错得越多越好。具体来说——

一张图片相当于一个数据x,D对它编码解码后得到图像D(x)。

z是一串随机数组成的向量 (Latent Vector) ,G根据它来生成的图可表示为g(z),D对它编码解码后得到图像D(g(z))。

 我说的模仿,不是cosplay

随着训练的进行,G的模仿能力越来越强,D(g(z))会越来越接近D(x)的分布。

不过,BEGAN在对比D(g(z))和D(x)之间差异的时候,用的损失函数 (Loss Function) 有些不一样。

让G作品的重构误差 (Reconstruction Error) 分布,去逼近人类作品的重构误差分布——BEGAN的损失函数使用的是这两者之间的差异。Wasserstein距离,可以把这个差异转换为真实的差异。

可能有惊喜的play

 卖家秀之Model 1

技术宅用3个数字组成的向量,来表示图片。他还给吃瓜党提供了自己调整向量的play——

每个角上的图像都可以自行设定,作为起点。从四角出发,生成的其他图,便是灰猫的渐变修养。

这个过程里,多多少少会有可爱的新胖吉出现。当然,生成效果并没有那么完美,畸形猫和看不出喵型的图像也理直气壮地存在。

 三只耳朵怎么样

程序猿友情提示,如果想少看一些畸形猫,就尽量把数字调小一些。数大了之后,容易有斑斓的色彩倾泻出来,让你忘了画猫的初衷。

不过那样的话,猫的样子也很难有丰富的变化,可能会比较单调

 有种听天由命的感觉

不想费力调向量的话,就点下一键生成按钮 (如上图) ,看到比渐变过程更随机的猫阵。

为了能让浏览器对面的大家感受到猫阵的厉害,程序猿还特意用TensorFlow.js重写了程序 (怕不是想增加撒狗粮的力度吧) 。

 单身使我快乐

在少年提供的三个模型里,我喜欢Model 2的效果,笔触比较圆润,配色似乎也可爱一些。

技术要领探讨一下

从WGAN那里借来的损失函数,帮BEGAN保证了两个模型的势均力敌,D和G想要赢对方都不那么容易。

 来亚,负相桑害亚

程序猿说,不久以后就会公布自己生成胖吉用的代码,但在那之前他想先给大家划个重点。此次实验过程中发挥最好的结构和超参数如下——

· 激活函数用了带泄露整流函数 (leaky ReLU) ,alpha=2
· 批量归一化
· G,步长为1的卷积层之后,近邻 (Nearest Neighbor) 算法缩放图像两次
· D,步长为1的卷积层之后,2 x 2窗口的平均池化 (Average Pooling)
· D,每层32或64个过滤器
· G,开始每层32或64个过滤器,后面依次翻倍 (e.g, 32,32,32,64,64,64,128,128,128…)
· 100维的潜在空间
· 学习率e-4或5e-4或e-3


视频是训练过程,可以看到AI一开始画的图很简单,灰疙瘩而已。后面元素就慢慢多起来了,耳朵、尾巴、五官,甚至还有吃的和玩的。

不过,少年也说了,有些模型mode collapse的迹象比较明显,作品没什么新意。他觉得一部分原因可能是,用略显稚嫩的方法扩充的数据集,掩饰不住匮乏的本质。BEGAN从小就没吃饱吧。

 明明今天上午,吃了五碗面

再有,在模型取舍上,是选单调但能生产完整胖吉的模型,还是选天马行空多姿多彩但日常画出畸形猫的模型?当事人还是倾向于后者。

如果这都不算爱

少年果然有双发现美的眼睛,给自家AI的作品 (强行) 划归了多个不同的系列。

比如,戏水吉。

比如,玩火吉。

比如,绿林吉。

比如,飞天吉。

比如,连体吉。

另外,程序猿还做了加减play,他说虽然效果不太明显,但结果还是合理的。你看——

友好解读是,吃taco的左歪猫 - 左歪猫 + 被绳牵着的右歪猫 = 吃小taco且被绳牵着的右歪猫。

好吧,我信了。

比起BEGAN论文里生成人脸的整容技能,胖吉的举一反三可能只是小打小闹。

但不管怎么看,这也是表情包和TensorFlow.js的正确打开方式了,至少可以让妹子开心啊。

回头想想那个要举着手机、在办公室里到处寻觅表情包本体的游戏,不被当成 (hen)  (tai) 也很难啊。

 警察叔叔,就是他

没有对比就没有伤害。所以,传送门也要放在一起。

这是胖吉变变变试玩地址:
http://zna.do/pusheen

这是寻找表情包试玩地址:
https://emojiscavengerhunt.withgoogle.com/

P.S. 程序猿的名字叫Zachary Nado,进入谷歌大脑之前,他还在发射成瘾的SpaceX工作过。那么,为什么要在结尾多介绍一次呢?因为小卷毛还是有点可爱。

加入社群

量子位AI社群17群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot7入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot7,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态


登录查看更多
1

相关内容

BEGANs将一个自编码器作为分类器,通过基于Wasserstein距离的损失来匹配自编码器的损失分布。采用神经网络结构,训练中添加额外的均衡过程来平衡生成器与分类器。
【牛津大学&DeepMind】自监督学习教程,141页ppt
专知会员服务
179+阅读 · 2020年5月29日
【CVPR2020】MSG-GAN:用于稳定图像合成的多尺度梯度GAN
专知会员服务
28+阅读 · 2020年4月6日
自回归模型:PixelCNN
专知会员服务
26+阅读 · 2020年3月21日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
【论文笔记】ICLR 2018 Wasserstein自编码器
专知
30+阅读 · 2018年6月29日
在TensorFlow中对比两大生成模型:VAE与GAN
机器之心
12+阅读 · 2017年10月23日
GAN完整理论推导、证明与实现(附代码)
数据派THU
4+阅读 · 2017年10月6日
【开发】 用GAN来做图像生成,这是最好的方法
GAN生成式对抗网络
6+阅读 · 2017年8月9日
Generating Fact Checking Explanations
Arxiv
9+阅读 · 2020年4月13日
Seeing What a GAN Cannot Generate
Arxiv
8+阅读 · 2019年10月24日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
A Probe into Understanding GAN and VAE models
Arxiv
9+阅读 · 2018年12月13日
Arxiv
7+阅读 · 2018年11月6日
Arxiv
11+阅读 · 2018年3月23日
Arxiv
4+阅读 · 2018年3月23日
VIP会员
相关论文
Generating Fact Checking Explanations
Arxiv
9+阅读 · 2020年4月13日
Seeing What a GAN Cannot Generate
Arxiv
8+阅读 · 2019年10月24日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
A Probe into Understanding GAN and VAE models
Arxiv
9+阅读 · 2018年12月13日
Arxiv
7+阅读 · 2018年11月6日
Arxiv
11+阅读 · 2018年3月23日
Arxiv
4+阅读 · 2018年3月23日
Top
微信扫码咨询专知VIP会员