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