作者 | 小白
来源 | 小白学视觉
你有没有想过通过深度神经网络学会如何烹饪?麻省理工学院的最新研究便使用深度神经网络实现如何烹饪美味的披萨!他们最近在CVPR 2019上发表的名为《How to make a pizza: Learning a compositional layer-based GAN model》的文章,探索了如何训练生成对抗网络(GAN)用来识别和制作披萨所涉及的步骤。他们的PizzaGAN分为两部分:
给定披萨的输入图像,用于训练PizzaGAN识别当前披萨上都有什么配料
给定披萨的输入图像,PizzaGAN可以将一组有序的生成模型应用于图像,用于添加或去除披萨上的各种配料
1. 披萨的组成
在尝试训练深度神经网络制作披萨之前,我们首先需要弄清楚制作披萨的流程。
像任何伟大的食谱一样,制作披萨的过程包括一系列有序的步骤。我们需要从制作面团,酱汁和奶酪开始,然后继续添加其他的辅助调料,在每一步添加调料的过程中都会改变披萨的样子。
2. PizzaGAN如何定义披萨
上一节中介绍了制作披萨的流程,现在我们需要训练一个模拟这些步骤的实际模型。假设我们已经做了一个意大利辣香肠披萨,现在我们的朋友提出想要在披萨上添加橄榄,我们可以通过以下两个步骤来模拟从原始披萨到新披萨的过程:
1)识别当前的披萨 :意大利辣香肠披萨
2)添加橄榄
在添加橄榄后,另一位朋友可能会说:“我不喜欢意大利辣香肠,能不能用火腿代替意大利香肠!”这样我们就会有以下3个步骤:
1)识别当前的披萨:意大利辣香肠和橄榄披萨
2)去掉意大利辣香肠
3)添加火腿
为了学习如何制作披萨,PizzaGAN需要模拟出所有这些步骤。
3. PizzaGAN如何制作披萨
数据集
用于训练PizzaGAN的披萨数据集由9,213张图像组成,每张图像都有一个披萨,并有一组相应的标签,用于描述披萨上的配料,但是不包括之前提到的面团,酱汁和基础奶酪。例如,如果披萨图像上有火腿和蘑菇,则该图像的标签为:
[“火腿”,“蘑菇”]
在训练过程中,输出分类被设置为one-hot编码。因此,在输入火腿和蘑菇披萨时输出向量中的火腿和蘑菇元素设置为1,而其余元素设置为0。
利用生成器添加和去除披萨配料
回想一下上节中介绍的内容,我们希望能够将披萨的制作过程模型化为一组连续步骤。因此,无论训练什么网络必须能够一次执行一个步骤。
在实际操作中,我们训练生成器用以实现披萨上每种配料的添加或去除操作。在给定披萨的输入图像时,生成器能够生成新的披萨输出图像,就如同我们在披萨上添加或去除了配料一样。
由于生成器每次只能被训练用于执行添加或者去除配料中的一个操作,因此我们需要训练多个生成器。具体地,针对每一种配料都需要训练两个生成器,一个用于添加这种配料,另一个用于去除这种配料,例如一个用于添加意大利肠,一个用于去除它,具体如下图所示。
利用判别器识别披萨配料
在PizzaGAN中,我们除了使用生成器用于实现在披萨中添加和去除的配料外,还需要判别器来识别披萨上的配料。
具体地,给定披萨的输入图像,判别器网络预测一组多标签分类,输出向量的每个元素对应于特定的配料。
例如,在下图中,PizzaGAN判别器预测披萨图像具有意大利辣香肠,蘑菇和橄榄,则输出向量中对应于那些配料的元素在推断时被预测为1。
GAN模型通常将生成器和判别器进行对抗训练。PizzaGAN也遵循这一训练步骤,除了预测披萨图像的标签之外,判别器还预测图像是真实的披萨还是来自生成器生成的披萨,这有助于生成器生成看起来逼真的披萨图像,并确保所有的配料都是正确的。
成功制作一个披萨
通过判别器预测披萨上的配料,同时利用生成器添加和去除披萨配料,PizzaGAN能够以非常高的准确度构建和分解披萨图像,最后再加上一个生成器实现披萨的烘焙操作,这样一个诱人的披萨就可以顺利地制作完成啦。
PizzaGAN添加和去除配料
PizzaGAN烹饪披萨
更多相关内容可以后台回复“披萨”获取原文下载链接。
长按二维码关注我们
往期热门