上个月在NVIDIA GTC 2019上,NVIDIA推出了一个新应用程序,可将用户绘制的简单彩球变成令人惊叹的逼真的图像。
该应用程序基于基于深度学习的
生成竞争网络 (GAN)技术构建。 NVIDIA本身将其称为GauGAN-一种双关语,旨在指代艺术家Paul Gauguin。 GauGAN功能基于新的SPADE算法。
在本文中,我将解释该工程杰作的工作原理。 为了吸引尽可能多的感兴趣的读者,我将尝试详细描述卷积神经网络的工作原理。 由于SPADE是一个具有竞争性的竞争性网络,因此我将向您详细介绍。 但是,如果您已经熟悉此术语,则可以立即转到“图像到图像广播”部分。
影像产生
让我们开始理解:在大多数现代深度学习应用程序中,使用神经判别类型(判别器),而SPADE是生成神经网络(生成器)。
鉴别器
鉴别器对输入数据进行分类。 例如,图像分类器是获取图像并选择一个合适的类别标签的鉴别器,例如,将图像定义为“狗”,“汽车”或“交通灯”,即选择描述整个图像的标签。 分类器获得的输出通常表示为数字向量
在哪里
是从0到1的数字,表示网络对图像属于所选图像的信心
类。
鉴别器还可以汇编分类列表。 它可以将图像的每个像素分类为属于“人”或“机器”的类别(所谓的“语义分割”)。
分类器拍摄具有3个通道(红色,绿色和蓝色)的图像,并将其与该图像可以表示的每个可能类别中的置信度矢量进行比较。由于图像与其类别之间的联系非常复杂,因此神经网络将其穿过许多层的堆栈,每一层都“轻微地”对其进行处理,并将其输出传递到下一个解释层次。
发电机
像SPADE这样的生成网络会接收数据集,并试图创建看起来好像属于该数据类的新原始数据。 同时,数据可以是任何东西:声音,语言或其他东西,但我们将专注于图像。 通常,进入这种网络的数据只是一个随机数的向量,输入数据的每个可能集合都将创建自己的图像。
基于随机输入向量的生成器实际上与图像分类器相反。 实际上,在“条件类”生成器中,输入向量是整个数据类的向量。正如我们已经看到的,SPADE所使用的不仅仅是“随机向量”。 该系统以一种称为“分段图”的绘图为指导。 后者指示发布的内容和位置。 SPADE进行与我们上面提到的语义分段相反的过程。 通常,将一种数据类型转换为另一种数据的区分性任务具有相似的任务,但是它采用了不同的,异常的路径。
现代的生成器和鉴别器通常使用卷积网络来处理其数据。 有关卷积神经网络(CNN)的更完整介绍,请参见
Chew on Karna上的帖子或
Andrei Karpati的著作 。
分类器和图像生成器之间有一个重要的区别,在于它们在处理过程中如何精确地改变图像的大小。 图像分类器应减少它,直到图像丢失所有空间信息并且仅保留类别。 这可以通过组合图层或使用卷积网络来实现,单个像素通过卷积网络。 另一方面,生成器使用“卷积”的逆过程(称为卷积转置)来创建图像。 他经常与“反卷积”或
“反向卷积”混为一谈。

传统的2x2卷积以“ 2”为步长将每个2x2块转换为一个点,从而将输出大小减小1/2。

步长为“ 2”的转置2x2卷积会从每个点生成2x2块,从而将输出大小增加2倍。
发电机培训
从理论上讲,卷积神经网络可以生成如上所述的图像。 但是我们如何训练她? 也就是说,如果我们考虑到输入图像数据集,我们如何调整生成器的参数(在我们的示例中为SPADE),以便它创建看起来像与建议数据集相对应的新图像?
为此,您需要与图像分类器进行比较,每个图像分类器都有正确的分类标签。 知道了网络预测向量和正确的类别,我们可以使用反向传播算法来确定网络更新参数。 这对于提高确定所需类别的准确性并减少其他类别的影响是必要的。
图像分类器的准确性可以通过将其输出逐个元素与正确的分类向量进行比较来估算。 但是对于生成器,没有“正确的”输出图像。问题在于,当生成器创建图像时,每个像素都没有“正确”的值(我们无法比较结果,就像基于先前准备的基准(近似Trans。)的分类器一样。 从理论上讲,任何看起来可信且与目标数据相似的图像都是有效的,即使其像素值与真实图像有很大不同。
那么,我们如何才能告诉生成器应该在哪些像素上更改其输出以及如何生成更逼真的图像(即如何给出“错误信号”)? 研究人员对此问题进行了很多思考,实际上这是相当困难的。 大多数想法(例如计算到真实图像的平均“距离”)都会产生模糊,质量较差的图片。
理想情况下,我们可以通过“高级”概念“测量”生成的图像的真实感,例如“将图像与真实图像区分开来有多困难?” ...
生成对抗网络
这正是
Goodfellow等(2014)的一部分 。 想法是使用两个神经网络而不是一个神经网络生成图像:一个网络-
生成器,第二个是图像分类器(鉴别器)。 鉴别器的任务是将生成器的输出图像与原始数据集中的真实图像区分开(这些图像的类别称为“伪”和“真实”)。 生成器的工作是通过创建与数据集中的图像尽可能相似的图像来欺骗鉴别器。 可以说,生成器和鉴别器在此过程中是对立的。 因此,名称为:
生成对抗网络 。
基于随机向量输入的生成竞争网络。 在此示例中,生成器输出之一试图欺骗鉴别器选择“真实”图像。这对我们有什么帮助? 现在,我们可以仅基于鉴别器的预测使用错误消息:从0(“假”)到1(“实”)的值。 由于鉴别器是神经网络,因此我们可以与图像生成器共享其关于错误的结论。 也就是说,鉴别器可以告诉生成器应该在哪里以及如何调整其图像,以便更好地“欺骗”鉴别器(即,如何提高其图像的真实性)。
在学习如何查找虚假图像的过程中,鉴别器会向生成器提供越来越好的反馈,说明生成器如何改进其工作。 因此,鉴别器对发生器执行
“学习损失”功能 。
光荣小甘
我们在工作中考虑的GAN遵循上述逻辑。 他的歧视者
分析图像
并获得价值
从0到1,这反映了他对图像是真实的还是由生成器伪造的信心。 他的发电机
获取正态分布数的随机向量
并显示图像
可以由鉴别器欺骗的(实际上,此图像
)
我们没有讨论的问题之一是如何训练GAN以及开发人员用来衡量网络性能的
损耗函数 。 通常,损失函数应随着鉴别器的训练而增加,而随着发生器的训练而减小。 源GAN的损失函数使用以下两个参数。 首先是
代表辨别器将真实图像正确分类为真实程度的程度。 第二个是鉴别器检测假图像的能力:
$ inline $ \ begin {equation *} \ mathcal {L} _ \ text {GAN}(D,G)= \ underbrace {E _ {\ vec {x} \ sim p_ \ text {data}} [\ log D( \ vec {x})]} _ {\文字{真实图像上的准确性}} + \底线{E _ {\ vec {z} \ sim \ mathcal {N}} [\ log(1-D(G(\ vec {z})]]} _ {\文字{假货的准确性}} \结束{equation *} $ inline $
鉴别器
得出他声称图像真实的说法。 这是有道理的,因为
当判别器认为x为实数时增加。 当鉴别器更好地检测到伪造图像时,表达式的值也会增加。
(开始争取1),因为
将趋向于0。
实际上,我们使用整批图像来评估准确性。 我们拍摄了大量(但绝不是全部)真实图像
和许多随机向量
根据上面的公式获得平均值。 然后我们选择常见错误和数据集。
随着时间的流逝,这会导致有趣的结果:
Goodfellow GAN模拟MNIST,TFD和CIFAR-10数据集。 轮廓图像是数据集中最接近相邻假货的图像。仅在4.5年前,所有这些都很棒。 幸运的是,正如SPADE和其他网络所显示的,机器学习继续迅速发展。
培训问题
生成竞争性网络因其准备工作的复杂性和不稳定而臭名昭著。 问题之一是,如果生成器在训练速度上远远领先于鉴别器,则其图像选择范围将缩小到有助于其欺骗鉴别器的图像。 实际上,结果是,训练生成器归结为创建单个通用图像来欺骗鉴别器。 此问题称为“折叠模式”。

GAN崩溃模式类似于Goodfellow的模式。 请注意,这些卧室中的许多图像看起来非常相似。
来源另一个问题是,当生成器有效地欺骗鉴别器时
,它以非常小的梯度运行,因此
无法获得足够的数据来找到真正的答案,在这种情况下,该图像看起来更加真实。
研究人员为解决这些问题所做的努力主要旨在改变损失函数的结构。
Xudong Mao等人(2016 )提出的简单更改之一是损失函数的替换
几个简单的功能
,它们基于面积较小的正方形。 这将导致训练过程的稳定,使用无阻尼梯度可获得更好的图像并减少崩溃的机会。
研究人员遇到的另一个问题是获取高分辨率图像的困难,部分原因是更详细的图像为鉴别器提供了更多信息来检测假图像。 现代GAN开始使用低分辨率图像训练网络,并逐渐添加越来越多的图层,直到达到所需的图像大小为止。
在GAN训练过程中,逐渐以更高的分辨率添加图层可显着提高整个过程的稳定性,以及所生成图像的速度和质量。图像到图像广播
到目前为止,我们已经讨论了如何从输入数据的随机集合中生成图像。 但是SPADE不仅使用随机数据。 该网络使用称为分割图的图像:它将材质类分配给每个像素(例如,草,木材,水,石头,天空)。 从这张图片看,这张卡是SPADE,可以生成一张照片。 这称为“图像到图像广播”。
pix2pix演示了六种不同类型的图像到图像广播。 Pix2pix是这两个网络的前身,我们将进一步讨论:pix2pixHD和SPADE。为了使生成器学习此方法,它需要一组分割图和相应的照片。 我们正在修改GAN体系结构,以使生成器和鉴别器都可以接收到分段图。 当然,生成器需要一张地图才能知道“绘制方式”。 鉴别器还需要它来确保生成器将正确的东西放置在正确的位置。
在训练期间,生成器学习不要在分割图上指示“天空”的地方放草,因为否则辨别器可以轻松检测到虚假图像,依此类推。
对于图像到图像的转换,生成器和鉴别器都接受输入图像。 鉴别器还从训练数据集中接收发生器输出或真实输出。 例子图像到图像转换器的开发
让我们看一个真正的图像到图像转换器:
pix2pixHD 。 顺便说一下,SPADE是为pix2pixHD的图像和相似性而设计的。
对于图像到图像的翻译器,我们的生成器会创建一个图像并将其接受为输入。 我们可以只使用卷积层图,但是由于卷积层仅在很小的区域内合并值,因此我们需要太多的层来传输高分辨率图像信息。
pix2pixHD在“编码器”的帮助下更有效地解决了这个问题,“编码器”减小了输入图像的比例,其次是“解码器”,其增大了比例以获得输出图像。 正如我们将很快看到的,SPADE提供了一种更优雅的解决方案,不需要编码器。
Pix2pixHD网络图处于“高”级别。 “残差”块和“ +操作”是指残差神经网络中的“跳过连接”技术。 网络中有跳过块,它们在编码器和解码器中互连。批量标准化是一个问题
几乎所有现代的卷积神经网络都使用批量归一化或其类似物之一来加速和稳定训练过程。 在激活一对通道参数之前,每个通道的激活都会将平均值移至0,将标准偏差移至1
和
让他们再次非正规化。
不幸的是,批量归一化会损害生成器,使网络难以实现某些类型的图像处理。 pix2pixHD使用
规范化标准 ,而不是对一批图像进行
规范化 ,该规范化
标准分别对每个图像进行规范化。
Pix2pixHD培训
诸如pix2pixHD和SPADE之类的现代GAN测量其输出图像的真实感与生成竞争性网络的原始设计所描述的稍有不同。
为了解决生成高分辨率图像的问题,pix2pixHD使用三个结构相同的鉴别器,每个鉴别器以不同的比例(正常大小,缩小2倍,缩小4倍)接收输出图像。
Pix2pixHD的用途
,还包括旨在使生成器的结论更现实的另一要素(无论这是否有助于欺骗歧视者)。 这个项目
称为“特征匹配”-鼓励生成器在模拟真实数据与生成器输出之间的区分时使层的分布相同,从而最大程度地减少
他们之间。
因此,优化归结为以下几点:
$$ display $$ \开始{equation *} \ min_G \ bigg(\ lambda \ sum_ {k = 1,2,3} V_ \ text {LSGAN}(G,D_k)+ \ big(\ max_ {D_1,D_2 ,D_3} \ sum_ {k = 1,2,3} \ mathcal {L} _ \文字{FM}(G,D_k)\ big)\ bigg)\ end {equation *},$$显示$$
损失由三个歧视因素和系数相加得出
,它控制两个元素的优先级。
pix2pixHD使用由真实卧室(在每个示例中的左侧)组成的分割图来创建伪卧室(在右侧)。尽管鉴别器会减小图像比例,直到分解整个图像,但它们会停留在大小为70×70(适当比例)的“斑点”上。 然后,他们只需汇总整个图像中这些“斑点”的所有值。
由于该功能
, ,
. , .
pix2pixHD . CelebA , .pix2pixHD?
, . , pix2pixHD .
, pix2pixHD , , , . , . «» ()
. β- , : , «», «», «» - .
pix2pixHD . , , .— SPADE.
: SPADE
- : - () (SPADE).
SPADE , , γ, β, , . , 2 .
, SPADE .SPADE « », ( ):
SPADE pix2pixHD, «» , . GAN, . (« »). «» pix2pixHD, .
SPADE , pix2pixHD, :
hinge loss .
:
SPADE pix2pixHD, SPADE . . GauGAN «» , . , - SPADE , «» , .
, SPADE , «» .
, , «». SPADE , , ? 55, «».
, , 5x5 . , .
SPADE , , , , pix2pixHD. , .
SPADE — (, , , ).
SPADE , .: ,
, . , , SPADE , , .
, . , ,
.
这就是SPADE / GaiGAN的功能。我希望本文能满足您对新NVIDIA系统工作原理的好奇心。您可以通过Twitter @AdamDanielKin或通过电子邮件adam@AdamDKing.com与我联系。