MIT披萨GAN登上了CVPR:加香肠、去橄榄、再烤熟,分层才是王道
算法其实并不是一只GAN,而是许多GAN层层叠叠而生。
吃栗子 发自 凹非寺
量子位 报道 | 公众号 QbitAI
有只会做披萨的GAN,登上了CVPR 2019。
它的工作,并不是生成一张披萨的照片那么简单。
你看,AI可以给披萨铺上帕帕罗尼肠:
服服帖帖,朴素的芝士披萨,也能变成帕帕罗尼披萨了。
如果有素食的小伙伴,AI可以把帕帕罗尼肠拿走,露出底下的芝士来:
仿佛肉被熊孩子挑光了一样。
另外,在下不喜橄榄,也可以让AI帮忙把橄榄拣出去:
既然是“做披萨”的AI,只会加料减料并不够,还要把披萨烤熟:
完成。
这只AI就叫PizzaGAN。为它训练厨艺的,是来自MIT和卡塔尔计算研究所的5位爸爸。
他们说,算法其实并不是一只GAN,而是许多GAN层层叠叠而生。
并且,修炼过程中PizzaGAN吃下了2.8G的真实披萨数据集,以及1.8G的合成披萨数据集。
两个数据集现在已经开放下载了,团队说算法也快要开源了。
在那之前,我们先来看看AI是怎样做披萨的:
井然有序
AI按照食客的要求生产披萨,首先要认识各种配料。
分类、分割都只用了弱监督:通过AMT众包获得了标注数据,在图像层面 (Image Level) 标出有哪些配料就可以。但为了准确,每张图由5个人标注,最后采纳多数人的看法。
数据有了,要怎么用呢?
一层叠一层
就像开头提到的那样,PizzaGAN不是一只GAN,而是模块化的:
每种配料都有两个算子 (Operator) ,一个用来加料,一个用来减料。每个算子都是一只GAN。
比如,这是加帕帕罗尼肠用的GAN:
它的生成器和普通GAN不同,不会生出一张全新图像,而是在输入图像的基础上,生成一层加帕帕罗尼肠的新外观 (称作A+) 。
还生成一个Mask (称作M+) ,用来把新外观叠加到原图上,它会显示出哪些像素和原图不同。
有了A+和M+,就可以给芝士披萨,铺上一层帕帕罗尼肠了。
去掉帕帕罗尼也是同理:
GAN要生成一层新的外观 (A-) ,显示出去掉食材的部分本来的样子。
也生成一个Mask (M-) ,来指示原图里的哪些像素,在新图上会发生变化。
有了M-,就可以把A-这层新外观叠加到帕帕罗尼披萨上,得到一张芝士披萨。
罗勒,蘑菇,菠萝粒…..不想要的配料,全部可以去掉:
除此之外,注意一下,比起加料模块,减料模块拥有更重要的使命:
它们可以把输入的一张披萨,拆解成很多层,每层一种料,然后就可以按需加减了。
那么问题来了,是不是只要知道有哪些料,按随性的顺序来拆解就行?
琵琶半遮面
不不不,AI可以从遮挡关系上,判断出哪种料是先加的,哪种是后加的。
举个栗子,这里有一红一绿两个圆,红上绿下。
如果,先去掉红色、再去掉绿色,那么去掉红色的时候,绿色的圆会被AI补充完整。
反过来,先去掉绿色、再去掉红色的话,绿色的圆就补不齐了。
这样说来,先去掉红色比较合适。那么AI是怎样判断的呢?
根据Mask来看,先去红色再去绿色,两个Mask之间会有交集,反过来就完全没有交集了。
交集更多,就是更合理的顺序,AI便是这样推测减料的先后。
而最先去掉的料在最上层,也就是最后加的料。所以,把减料的顺序翻过来,就是加料顺序了。
撒好配料之后,放进烤箱:
一回熟二回生
最后一步,团队手动标注了932个真披萨,一部分是烤熟的,一部分还没烤。
这些数据用来训练AI,把生饼变成熟饼:比如面饼变得金黄,下层的番茄酱在上层的配料之间透出更迷人的红。
△ 开头出现过了,复习一下
只不过,芝士会融化这个知识点,对GAN来说可能还是有些困难了。
另外,由生到熟的过程,对人间的食物来说并不可逆。但AI能把已经烤熟的披萨,变回刚刚撒完配料的样子:
神奇的是,芝士仿佛从融化的状态,变回了一粒一粒的芝士碎。
这样一来,把忘了加的配料撒上,还可以重烤一次。
真是一只随和的AI。
得天独厚
MIT的一位少年,把自家的成果发上了推特。
楼下便有观众,对研究人员的脑回路表示服气:
看到论文题目,还以为只是提出分层 (Layering) 的概念,没想到居然真在“做披萨”。
少年也开心地回复了观众:
没错,就是提了分层的概念,可披萨刚好是分层加料的,所以是完美的搭配哟。
那么问题来了,论文题目叫什么呢?
果然不是一篇正常的CVPR。
论文传送门:
https://arxiv.org/abs/1906.02839
项目主页,有Demo:
http://pizzagan.csail.mit.edu/
- 马云正式卸任后,阿里巴巴开盘跌0.87%2019-09-10
- AI独角兽云知声,已完成一期科创板IPO辅导2019-10-17
- 亚马逊在华拓展云计算团队,挑战阿里巴巴和腾讯2019-10-16
- IDC:今年上半年中国公有云服务市场规模达54.2亿美元2019-11-07