在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

魔改StyleGAN模型为图片中的马添加头盔

介绍

GAN体系结构一直是通过AI生成内容的标准,但是它可以实际在训练数据集中提供新内容吗? 还是只是模仿训练数据并以新方式混合功能?

在本文中,我将讨论“重写深度生成模型”(https://arxiv.org/abs/2007.15646)一文,该文件可直接编辑GAN模型,以提供所需的输出,即使它与现有数据集不匹配也是如此。 上图是编辑示例,您可以在其中复制头盔功能并将其粘贴到上下文中。 我相信这种可能性将打开数字行业中许多新的有趣应用程序,例如为可能不存在现有数据集的动画或游戏生成虚拟内容。

GAN

生成对抗网络(GAN)是一种生成模型,这意味着它可以生成与训练数据类似的现实输出。 例如,经过人脸训练的GAN将能够生成相似外观的逼真的面孔。 GAN可以通过学习训练数据的分布并生成遵循相同分布的新内容来做到这一点。

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

GAN通过拥有一个试图区分真实图像和伪造图像的鉴别器以及一个生成伪造数据来欺骗鉴别器的生成器来“间接”学习分布。 这两个网络将不断竞争和相互学习,直到它们两个都可以分别生成和区分现实图像为止。

GAN的局限性

尽管GAN能够学习一般数据分布并生成数据集的各种图像。 它仍然限于训练数据中存在的内容。 例如,让我们以训练有素的GAN模型为例。 尽管它可以生成数据集中不存在的新面孔,但它不能发明具有新颖特征的全新面孔。 您只能期望它以新的方式结合模型已经知道的内容。

因此,如果我们只想生成法线脸,就没有问题。 但是,如果我们想要眉毛浓密或第三只眼的脸怎么办? GAN模型无法生成此模型,因为在训练数据中没有带有浓密眉毛或第三只眼睛的样本。 快速的解决方案是简单地使用照片编辑工具编辑生成的人脸,但是如果我们要生成大量像这样的图像,这是不可行的。 因此,GAN模型将更适合该问题,但是当没有现有数据集时,我们如何使GAN生成所需的图像?

重写GAN规则

2020年1月,麻省理工学院和Adobe Research发表了一篇有趣的论文,名为“重写深度生成模型”,使我们能够直接编辑GAN模型并产生新颖的内容。 模型重写是什么意思? 与其让模型根据训练数据或标签进行优化,不如直接设置我们要保留的规则(参数)以提供期望的结果。 想要戴上头盔吗? 没问题。 我们可以复制头盔的特征并将其放在马头特征上。 但是,这需要了解内部参数及其对输出的影响,这在过去是一个很大的挑战。 虽然,本文已证明这是可行的。

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

通过重写模型在上下文中复制和粘贴特征

训练和重写之间的区别类似于自然选择和基因工程之间的区别。 虽然训练可以有效地优化全局目标,但不能直接指定内部机制。 相比之下,重写使一个人可以直接选择他们希望包括的内部规则,即使这些选择并非恰好匹配现有数据集或优化全局目标。 -David Bau(论文的主要作者)

正如David Bau所说,重写模型就像基因工程。

工作原理

您实际上如何重写生成模型? 本文提出了将生成器的权重视为最佳线性联想记忆(OLAM)的想法。 OLAM的作用是存储键值对关联。 我们将选择一个特定的图层L,该图层代表值V,该值V表示图像的输出特征,例如微笑表情。 然后,在层L之前的前一层将表示**K,**K表示有意义的上下文,例如嘴巴位置。 此处,L层和L-1层之间的权重W用作存储K和V之间的关联的线性关联存储器。

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

我们可以将K????V关联视为模型中的规则。 例如,假设我们有一个在马匹上训练过的StyleGAN模型,并且我们想重写该模型以将头盔戴在马匹上。 我们将所需的特征头盔表示为V ‘,将上下文中的马头表示为K’。 因此,为了获得我们想要的特征,我们想要将原始规则K????V更改为我们想要的规则K‘????V’。 为此,我们以将规则更改为目标K‘????V’的方式更新权重。

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

数学细节

我们如何更新W以获得目标K‘????V’? 我们要设置新规则K‘????V’,同时最小化旧k????v的变化。 因此,

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

上面的表达式是一个约束最小二乘问题,可以用

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

然后可以简化

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

其中C = K * KT,并且Λ和C ^ −1 k ∗均为简单向量。

因此,我们的更新将具有2个分量,即幅度Λ和更新方向C ^ -1 k *。 我们将更新方向C ^ -1 k *表示为d。 更新方向d仅受**k *影响,只有Λ取决于值v *。 为简化起见,更新方向确保仅影响选定上下文k *的权重将被更新,以最小化对其他规则的干扰,而Λ确保我们达到所需的v *。 有关数学的更多详细信息,建议阅读论文本身。

总之,获得更新权重W1的步骤是

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

结果

该研究已尝试重写预训练的StyleGAN和ProGAN模型以证明其功能。 其中一些样例是将头盔戴在马上,圆顶形的顶部放到树顶,皱眉变成微笑,摘掉耳环,增加浓密的眉毛,再戴上眼镜。

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容
在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容
在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容
在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

在GAN中通过上下文的复制和粘贴,在没有数据集的情况下生成新内容

源代码在这里:

https://colab.research.google.com/github/davidbau/rewriting/blob/master/notebooks/rewriting-interface.ipynb

https://github.com/davidbau/rewriting

作者:Fathy Rashad

deephub翻译组