专栏首页进击的CoderOpenAI提出能合成高清逼真图像的模型:“我们和GAN不一样!”

OpenAI提出能合成高清逼真图像的模型:“我们和GAN不一样!”

编者按:风格迁移变装模型这些改变图像属性的任务之前都是GAN的热门话题。现在,OpenAI的研究者们提出了一种新的生成模型,能快速输出高清、真实的图像。以下是论智对OpenAI博客的编译。

这篇文章介绍了我们的新成果——Glow,这是一个可逆的生成模型,其中使用了可反复的1×1卷积网络。2015年,我们曾推出过NICE,它是一种针对复杂高维进行建模的深度学习框架。在可逆模型的基础上,研究人员简化了NICE的网络结构,使模型能生成更加真实的高分辨率图像,并支持高效的采样,能发现可以用来控制数据属性的特征。下面让我们看看这个模型到底怎么玩:

这是年轻貌美的瑟曦。

黑化之后:

沧桑的瑟曦:

除此之外,你还能改变人物头发的颜色、眼睛大小和胡子。接下来,还有另一种玩法,即混合两张图:

碧昂斯和小李子Mix一下,长这样。

这是Glow模型的一个交互式Demo,感兴趣的读者可以移步官网体验试试,支持上传自己的照片调整脸部属性和合成两张图片。

动机

以上是研究者Prafulla Dhariwal和Durk Kingma的面部表情特征变化图。模型在训练时并没有被给予属性标签,但是它学会了一种隐藏空间,在其中特定的方向对应不同特征的变化,例如胡子的茂密程度、年龄、发色等等

生成模型与数据的观察有关,就像面对许多人脸图片,从中学习一种模型,了解数据是如何生成的。学习估计数据生成的过程需要学习数据中所有的结构,并且成功的模型可以合成和数据很相似的输出结果。精确的生成模型可应用的场景非常广泛,例如语音识别、文本分析合成、半监督学习和基于模型的控制。

Glow是一种可逆的生成模型,也可以称作“流式”生成模型,是NICE和RealNVP技术的扩展。目前,流式生成模型的关注度并不如GAN和VAE。

流式生成模型的几个优点有:

  • 确切的隐藏变量推断和对数相似度评估。在VAE中,模型智能大致推断与数据点相对应的隐藏变量的值,而GAN根本就没有能推测隐藏变量的编码器。但是在可逆生成模型中,这一过程能精确地推算出来。这不但能输出一个精确的结果,还能对数据的对数相似度进行优化,而不是之前对数据的下限值优化。
  • 高效的推理和合成。自回归的模型,例如PixelCNN同样是可逆的,但是这种模型的合成结果很难平行化,通常在平行硬件上很低效。而类似Glow的流式生成模型不论在推理还是合成方面都很高效。
  • 为下游任务提供了有用的隐藏空间。自回归模型的隐藏层有着位置的边缘分布,使其更难对数据进行正确操作。在GAN中,数据点经常不能直接表现在隐藏空间中,因为它们没有编码器,可能无法支持数据分布。在可逆生成模型和VAE上就没有这种情况。
  • 对节省内存有重大意义。可逆神经网络的计算梯度应该是恒定的内存量,而不是线性的。

结果

利用这种技术,我们在标准上比较了RealNVP和我们的Glow,RealNVP是在这之前表现最佳的流式生成模型。结果如下:

在含有30000张照片的数据集上训练之后,模型生成的样本

Glow模型能生成非常逼真的高分辨率图像,并且非常高效。模型在NVIDIA 1080 Ti GPU上只用130毫秒(0.13秒)就生成了一张256×256的照片。

在隐藏空间插值

我们还可以在两个随机面孔之间进行插值,利用编码器在两个图片之间进行编码,并从中间点中取样。注意,输入的是随机面孔,并不是模型中的样本,所以这也证明了模型可以支持完全的目标分布。

变脸过程十分流畅

在隐藏空间中处理

无需标签,我们就可以训练一个流式模型,然后利用学习到的隐藏表示进行下游任务。这些语义分布可以改变头发的颜色、图片风格、音调高低或者文本情感。由于流式模型拥有完美的编码器,你可以编码输入并且计算输入的平均隐藏向量。二者间向量的方向可以用来将输入向该方向改变。

这一过程只需要少量的标记数据,并且模型一训练完就能完成。在此之前,用GAN做这些需要训练一个单独的编码器,而VAE需要保证解码器和编码器适用于分布数据。其他类似CycleGAN直接学习表示变化的函数,也需要重新训练每一个变化。

# Train flow model on large, unlabelled dataset X

m = train(X_unlabelled)

# Split labelled dataset based on attribute, say blonde hair

X_positive, X_negative = split(X_labelled)

# Obtain average encodings of positive and negative inputs

z_positive = average([m.encode(x) for x in X_positive])

z_negative = average([m.encode(x) for x in X_negative])

# Get manipulation vector by taking difference

z_manipulate = z_positive - z_negative

# Manipulate new x_input along z_manipulate, by a scalar alpha \in [-1,1]

z_input = m.encode(x_input)

x_manipulated = m.decode(z_input + alpha * z_manipulate)

用流式模型改变属性的简单代码

进步之外

相比之前的RealNVP,我们的进步之处主要是一个可逆的1×1卷积,以及删减掉其他元素,简化了模型。

RealNVP架构由两种图层组成:具有棋盘蒙版的图层和通道蒙版的图层。我们去除了棋盘样的图层,简化了结构。剩下的通道类型的蒙版起到以下作用:

  • 在通道维度中改变输入的顺序
  • 将输入分成A和B两部分,从特征维度的中部开始
  • 将A输入到一个较浅的卷积神经网络。根据神经网络的输出线性地对B进行转换
  • 连接A和B

可以看到我们的1×1卷积在性能上有大大的提升

除此之外,我们取消了批归一化,将它替换成激活归一图层。该图层利用基于数据的初始化,简单地转换并缩放激活,该初始化在给定初始小批量数据的情况下将激活规范化。

训练规模

我们的结构结合了多种优化,例如梯度检查点,可以让我们在较大规模上训练流式生成模型。我们使用Horovod轻松地将模型在多个机器上进行了训练;文章开头的Demo用了8个GPU。

未来方向

这篇研究表明,训练流式模型生成真实的高清图像是很有潜力的,并且经过学习的隐藏表示可以很容易用于下流任务。我们对未来工作的方向有以下计划:

1. 在可能性上比其他模型更有竞争力

在对数相似度上,自适应模型和VAE的表现比流式模型要好,但是他们在采样和精确推理上不如流式模型。未来我们会尝试结合这几种模型,以弥补不足。

2. 改进结构,提高计算和参数效率

为了生成逼真的高分辨率图像,人脸生成模型利用大约200M的参数和将近600个卷积层,训练起来成本很高。但是更浅的网络表现得又不好。使用自注意力结构或者进行渐进式训练可能会让训练成本更便宜。

最后欲知更多细节,请查看原论文:d4mucfpksywv.cloudfront.net/research-covers/glow/paper/glow.pdf

来源:OpenAI

编译:Bing

原文地址:blog.openai.com/glow/

本文分享自微信公众号 - 进击的Coder(FightingCoder)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最适合中国开发者的深度学习框架:走向成熟的 PaddlePaddle 1.0

    自深度学习以分层逐步学习的奇思妙想崛起以来,深度学习框架就在不停地发展。在 AlexNet 还没有携带深度学习亮相 ImageNet 之前,由蒙特利尔大学 LI...

    崔庆才
  • 利用深度学习识别滑动验证码缺口位置

    做爬虫的同学肯定或多或少会为验证码苦恼过,在最初的时候,大部分验证码都是图形验证码。但是前几年「极验」验证码横空出世,行为验证码变得越来越流行,其中之一的形式便...

    崔庆才
  • 图解 2018 年领先的两大 NLP 模型:BERT 和 ELMo

    2018 年已经成为自然语言处理机器学习模型的转折点。我们对如何以最能捕捉潜在意义和关系的方式、最准确地表示单词和句子的理解正在迅速发展。

    崔庆才
  • 2017 知乎看山杯从入门到第二

    利用一个暑假的时间,做了研究生生涯中的第一个正式比赛,最终排名第二,有些小遗憾,但收获更多的是成长和经验。我们之前没有参加过机器学习和文本相关的比赛,只是学过一...

    AI研习社
  • 塔秘 | 应用 AI 之前,你必须了解的 10 项准备工作

    导读 不是每一个问题都可以通过机器学习来解决,且不是每一个公司都准备应用人工智能。本文会告诉你,你的公司是否有利用人工智能的条件,以及在那之前如何才能实现它。 ...

    灯塔大数据
  • CMU:深度学习自然语言处理,神经机器翻译与 seq2seq 模型汇总,6 大类型附部署技巧

    【新智元导读】CMU 语言技术研究所助理教授 Graham Neubig 将有关神经机器翻译和 seq2seq 各种模型的概要、重点以及部署技巧整理为一篇长达6...

    新智元
  • 数学建模如何诱骗了华尔街

    现实世界——从种族隔离制度到金融市场——一直在警示我们:那些试图通过科技来掌握复杂人类行为的做法会使我们误入歧途。 无论是在科学领域,还是在日常生活中,我们都...

    钱塘数据
  • 【GTC2020】Megatron-LM:使用模型并行性训练数十亿个参数语言模型

    我们将通过对现有PyTorch transformer实现进行少量有针对性的修改来介绍一种高效的模型并行方法。最近,训练最大的神经语言模型已经成为提高NLP应用...

    GPUS Lady
  • AI 技术讲座精选:深度学习是如何改变数据科学范式的?

    【AI100 导读】深度学习正在改变一切。就像电子学和计算机改变了所有的经济活动一样,人工智能将重塑零售、运输、制造、医药、电信、重工业等行业,即使是数据科学本...

    AI科技大本营
  • 在神经网络中提取知识:学习用较小的模型学得更好

    在传统的机器学习中,为了获得最先进的(SOTA)性能,我们经常训练一系列整合模型来克服单个模型的弱点。但是,要获得SOTA性能,通常需要使用具有数百万个参数的大...

    deephub

扫码关注云+社区

领取腾讯云代金券