前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎样用GAN生成各种胖吉猫?谷歌大脑程序员教你撩妹神技

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

作者头像
量子位
发布2018-07-20 18:35:02
9620
发布2018-07-20 18:35:02
举报
文章被收录于专栏:量子位量子位
圆栗子 编译整理 量子位 报道 | 公众号 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工作过。那么,为什么要在结尾多介绍一次呢?因为小卷毛还是有点可爱。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一切从这里BEGAN
  • 我有特别的模仿技巧
  • 可能有惊喜的play
  • 技术要领探讨一下
  • 如果这都不算爱
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档