本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:【j2开奖】资源 | 在TensorFlow 1.0上实现快速图像生成算法Fast PixelCNN++

时间:2017-02-27 17:48来源:668论坛 作者:本港台直播 点击:
参与:Jane W、吴攀 近日,伊利诺大学香槟分校的研究者在 GitHub 上发布了一个快速图像生成算法 Fast PixelCNN++的实现,该算法的相关论文已被提交到 ICLR 2016。 项目地址:https://github.c

参与:Jane W、吴攀

近日,伊利诺大学香槟分校的研究者在 GitHub 上发布了一个快速图像生成法 Fast PixelCNN++的实现atv,该法的相关论文已被提交到 ICLR 2016。

项目地址:https://github.com/PrajitR/fast-pixel-cnn

论文地址:https://openreview.net/pdf?id=rkdF0ZNKl

我们通过利用缓存避免冗余计算而实现了对图像生成算法 PixelCNN++ 的加速。原始的生成算法丢弃了可以重复利用的计算,并且还会占用不用于生成特定像素的附加计算资源。原始的算法在 Tesla K40 GPU 上生成 16 张 32x32 的图像可能需要长达 11 分钟。通过重新使用之前的计算并且仅执行所需的最小计算量,我们实现了相比原始生成算法高达 183 倍的加速。

  

报码:【j2开奖】资源 | 在TensorFlow 1.0上实现快速图像生成算法Fast PixelCNN++

如何运行

我们用 Python 3 和 TensorFlow 1.0 测试了我们的代。对其它版本的 Python 或 TensorFlow 可能需要稍作更改。

运行指南:

安装 TensorFlow 1.0、Numpy 和 Matplotlib

下载并解压 OpenAI 预训练的 PixelCNN++ 模型()。解压后,有一个名为 params_cifar.ckpt 的文件。

设置参数 CUDA_VISIBLE_DEVICES = 0 运行脚本 python generate.py——checkpoint = /path/to/params_cifar.ckpt——save_dir = /path/to/save/generated/images

该脚本将不断地循环生成图像,并将图像保存到——save_dir。你可以随时通过使用 Control-C 中断退出该脚本。

算法原理

什么是 PixelCNN++,为什么要使用它?

PixelCNN++ 是一个生成模型,它使用所有先前生成的像素作为信息生成下一个像素。也就是说,为了生成图像中的第 10 个像素,PixelCNN++ 将查看像素 1-9 来对像素 10 的输出分布建模:P(像素 10 |像素 1,..., 像素 9)。类似地,像素 11 将查看像素 1-10,继续这个过程直到对所有像素建模。这个特性使 PixelCNN 是一个自回归(autoregressive)模型,其中每个像素由先前像素的历史建模。使 PixelCNN 独一无二的是,该算法使用巧妙、快速的方法来集合来自先前像素的信息,这对于训练速度至关重要。

PixelCNN 是由 DeepMind 最初开发的(https://arxiv.org/abs/1606.05328),并得到了 OpenAI 的改进而得到了 PixelCNN++(https://openreview.net/pdf?id=BJrFC6ceg)中进行了改进。这些模型已经在各种图像生成基准(image generation benchmark)上实现了当前最佳的结果。这些模型可以直接用来训练,有强大的应对复杂的输入建模的能力,并能够产生清晰,有吸引力的图像。例如,PixelCNN 最近已被用于图像超分辨率(superresolution)(https://arxiv.org/abs/1702.00783)。

与其它的生成模型(如生成对抗网络(Generative Adversarial Network)和变自编器(Variational Autoencoder))相比,自回归模型的主要缺点之一是自回归模型必须一次产生一个像素,而其它方法可以一次产生整个图像。我们的方法加速了 PixelCNN 的生成过程。

加速一个带有膨胀系数(dilation)的简单的 1 维例子

在介绍加速 PixelCNN 的细节之前,让我们关注一个更简单的 1 维自回归模型:Wavenet(https://arxiv.org/abs/1609.03499)。这里提供的细节类似于 GitHub 上的 Fast Wavenet(https://github.com/tomlepaine/fast-wavenet),你可以参考更多的详细内容。

  

报码:【j2开奖】资源 | 在TensorFlow 1.0上实现快速图像生成算法Fast PixelCNN++

Wavenet 图(左边)看起来像一个二叉树(binary tree)。一个节点与它之前的第 n 个的邻居计算卷积(convolve),其中 n 是 2 的幂。由于 n(膨胀系数/ dilation)每经过 2 层就会增加,组合在一起的节点的范围(感受野/ receptive field)也呈指数增长。在每个生成步骤,来自感受野中的所有节点(图片中的 8)的信息必须被组合。原始的生成算法在每个生成步骤简单地重复着整个计算树。这很容易实现,但是很慢。

你可能已经注意到,当生成连续输出时,树的大部分被重复使用。例如,调用图片 t 中的当前步骤,并假设生成 t+2 的输出。在这种情况下,第一隐藏层中的四个橙色节点中的三个可以被重复使用!重新计算它们纯属浪费时间。

这启发了我们算法的核心:缓存以前计算的隐藏状态(hidden state)。如右图所示,我们为每个层保留以前计算的隐藏状态的缓存。缓存的大小等于隐藏层的膨胀系数,因为模型必须在隐藏层回溯 n 步。缓存像一个队列:最早的隐藏状态从队列的前面弹出,这完全等同于正常的膨胀卷积(dilated convolution)。在计算隐藏状态之后,必须将其推入队列的后面,因此从现在开始正好有 n 个步骤。重复这个过程给出了一个加速生成算法,它避免了原始方法的大量计算。

加速跨度卷积(strided convolution)

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容