主题: Locally Masked Convolution for Autoregressive Models

摘要: 高维生成模型具有许多应用程序,包括图像压缩,多媒体生成,异常检测和数据完成。自然图像的最新估算器是自回归的,可将像素上的联合分布分解为由深度神经网络(例如,神经网络)参数化的条件乘积。卷积神经网络,例如PixelCNN。但是,PixelCNN仅对关节的单个分解建模,并且只有单个生成顺序是有效的。对于诸如图像完成的任务,这些模型无法使用很多观察到的上下文。为了以任意顺序生成数据,我们引入了LMConv:对标准2D卷积的简单修改,允许将任意蒙版应用于图像中每个位置的权重。使用LMConv,我们可以学习分布估计器的集合,这些估计器共享参数但生成顺序有所不同,从而提高了全图像密度估计的性能(无条件CIFAR10为2.89 bpd),以及全局一致的图像完成度。

成为VIP会员查看完整内容
0
12

相关内容

加州大学伯克利分校(University of California, Berkeley),是美国最负盛名且是最顶尖的一所公立研究型大学,位于旧金山东湾伯克利市的山丘上。创建于1868年,是加州大学十个分校中历史最悠久的一所。加州大学伯克利分校在世界范围内拥有崇高的学术声誉,拥有丰富的教学资源,研究水平非常坚厚,与斯坦福大学、麻省理工学院等一同被誉为美国工程科技界的学术领袖。

一次性神经架构搜索(NAS)通过权重共享显著提高了计算效率。然而,这种方法也在超网络训练(架构搜索阶段)中引入了多模型遗忘,在超网络训练中,当使用部分共享的权重顺序训练新架构时,之前架构的性能会下降。为了克服这种灾难性遗忘,最先进的方法假设共享权值在联合优化后验概率时是最优的。然而,这种严格的假设在实践中并不一定适用于一次性NAS。在本文中,我们将一次性NAS中的超网络训练描述为一个持续学习的约束优化问题,即当前架构的学习不应该降低以前架构的性能。提出了一种基于新搜索的结构选择损失函数,并证明了在最大化所选约束的多样性时,不需要严格的假设就可以计算后验概率。设计了一种贪心查新方法,寻找最具代表性的子集,对超网络训练进行正则化。我们将我们提出的方法应用于两个一次性的NAS基线,随机抽样NAS (RandomNAS)和基于梯度的抽样NAS (GDAS)。大量的实验证明,我们的方法提高了超级网络在一次NAS中的预测能力,并在CIFAR-10、CIFAR-100和PTB上取得了显著的效率。

成为VIP会员查看完整内容
0
16

【导读】自回归模型时生成模型的一种,本文介绍了其代表作PixelCNN的原理、代码实现以及应用。

介绍

生成模型最近备受关注,是无监督学习中的一类重要模型。 它的目标是学习生成新样本,使得这些样本看起来与训练数据相似。一旦模型成功训练,它就可以用于从图像修复,着色,超分辨率等。自回归是生成模型的一种,它构建一个显式密度模型,该模型学习训练数据的最大似然。

自回归是一种实用的方法,它提供了似然函数的显式建模。但是,要对具有多个维度/特征的数据进行建模,自回归模型需要更多条件。首先,输入空间X需要为其特征确定顺序。这就是为什么自回归模型通常用于具有固有时间步长序列的时间序列。但是,可以通过定义(例如)左侧的像素在右侧的像素之前,顶部的像素在底部的像素之前来将它们用于图像。其次,为了对数据观察中的特征的联合分布(p(x))进行精确建模,自回归方法将p(x)转换为条件分布的乘积。给定先前特征的值,自回归模型使用每个特征的条件定义联合分布。比如,图像中某个像素具有特定强度值的概率由所有先前像素的值决定;图像的概率(所有像素的联合分布)是其所有像素的概率的组合。因此,自回归模型使用链式规则将数据样本x的可能性分解为一维分布的乘积。分解将联合建模问题变成了序列问题,学习了在给定所有先前生成的像素的情况下预测下一个像素的过程。

现在,最大的挑战是计算这些条件似然p(xᵢ|x₁,…,xᵢ₁)。我们如何在易于处理和可扩展的表达模型中定义这些复杂的分布?一种解决方案是使用通用近似器,例如深度神经网络。 PixelCNN

DeepMind在2016年推出了PixelCNN,该模型开启了自回归生成模型系列之一。它已被用于生成语音,视频和高分辨率图片。

PixelCNN是一个深层神经网络,可捕获其参数中像素之间的依存关系分布。它沿着两个空间维度在图像中一次顺序生成一个像素。

使用卷积运算,PixelCNN可以并行学习图像中所有像素的分布。但是,当确定特定像素的概率时,标准卷积层的接收场违反了自回归模型的顺序预测。当处理中心像素的信息时,卷积滤波器会考虑其周围的所有像素以计算输出特征图,而不仅仅是先前的像素。然后采用掩码来阻止来自尚未预测的像素的信息流。 掩码卷积层

可以通过将不应该考虑的所有像素清零来完成屏蔽。在我们的实现中,创建了具有与卷积过滤器相同大小且值为1和0的蒙版。在进行卷积运算之前,将此掩码乘以权重张量。在PixelCNN中,有两种掩码类型: 掩码类型A:此掩码仅应用于第一卷积层。它通过将遮罩中的中心像素置零来限制对感兴趣像素的访问。这样,我们保证模型不会访问要预测的像素(下图中的红色)。 掩码类型B:此掩码应用于所有后续的卷积层,并通过允许从像素到其自身的连接来放宽掩码A的限制。

在这里,我们提供一段代码,使用Tensorflow 2.0框架实现掩码。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

        class MaskedConv2D(keras.layers.Layer):` """Convolutional layers with masks.``
`` Convolutional layers with simple implementation of masks type A and B for`` autoregressive models.``
`` Arguments:`` mask_type: one of `"A"` or `"B".``` filters: Integer, the dimensionality of the output space`` (i.e. the number of output filters in the convolution).`` kernel_size: An integer or tuple/list of 2 integers, specifying the`` height and width of the 2D convolution window.`` Can be a single integer to specify the same value for``all spatial dimensions.`` strides: An integer or tuple/list of 2 integers,`` specifying the strides of the convolution along the height and width.`` Can be a single integer to specify the same value for``all spatial dimensions.`` Specifying any stride value != 1 is incompatible with specifying``any `dilation_rate` value != 1.`` padding: one of `"valid"` or `"same"` (case-insensitive).`` kernel_initializer: Initializer for the `kernel` weights matrix.`` bias_initializer: Initializer for the bias vector.``"""``
`` def __init__(self,`` mask_type,`` filters,`` kernel_size,`` strides=1,`` padding='same',`` kernel_initializer='glorot_uniform',`` bias_initializer='zeros'):`` super(MaskedConv2D, self).__init__()``
`` assert mask_type in {'A', 'B'}`` self.mask_type = mask_type``
`` self.filters = filters`` self.kernel_size = kernel_size`` self.strides = strides`` self.padding = padding.upper()`` self.kernel_initializer = initializers.get(kernel_initializer)`` self.bias_initializer = initializers.get(bias_initializer)``
`` def build(self, input_shape):`` self.kernel = self.add_weight('kernel',`` shape=(self.kernel_size,`` self.kernel_size,`` int(input_shape[-1]),`` self.filters),`` initializer=self.kernel_initializer,`` trainable=True)``
`` self.bias = self.add_weight('bias',`` shape=(self.filters,),`` initializer=self.bias_initializer,`` trainable=True)``
`` center = self.kernel_size // 2``
`` mask = np.ones(self.kernel.shape, dtype=np.float32)`` mask[center, center + (self.mask_type == 'B'):, :, :] = 0.`` mask[center + 1:, :, :, :] = 0.``
`` self.mask = tf.constant(mask, dtype=tf.float32, name='mask')``
`` def call(self, input):`` masked_kernel = tf.math.multiply(self.mask, self.kernel)`` x = nn.conv2d(input,`` masked_kernel,`` strides=[1, self.strides, self.strides, 1],`` padding=self.padding)`` x = nn.bias_add(x, self.bias)`` return x`

模型结构

PixelCNN使用以下架构:第一层是具有7x7滤镜的掩码卷积(A型)。然后,使用了15个残差块。每个块使用3x3卷积层B和标准1x1卷积层的组合来处理数据。在每个卷积层之间,存在一个非线性ReLU。最后,残余块还包括残余连接。

网络将使用标准卷积层和1x1滤波器,形成一连串RELU-CONV-RELU-CONV层。然后,输出层是softmax层,可预测像素所有可能值中的值。模型的输出具有与输入图像相同的空间格式(因为我们需要每个像素的输出值)乘以可能值的数量(例如256个强度级别)。 在这里,我们提供一段代码,使用Tensorflow 2.0框架实现网络体系结构。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

        class ResidualBlock(keras.Model):`"""Residual blocks that compose pixelCNN``
`` Blocks of layers with 3 convolutional layers and one residual connection.`` Based on Figure 5 from [1] where h indicates number of filters.``
`` Refs:`` [1] - Oord, A. V. D., Kalchbrenner, N., & Kavukcuoglu, K. (2016). Pixel`` recurrent neural networks. arXiv preprint arXiv:1601.06759.`` """``
``def __init__(self, h):``super(ResidualBlock, self).__init__(name='')``
``self.conv2a = keras.layers.Conv2D(filters=h, kernel_size=1, strides=1)``self.conv2b = MaskedConv2D(mask_type='B', filters=h, kernel_size=3, strides=1)``self.conv2c = keras.layers.Conv2D(filters=2 * h, kernel_size=1, strides=1)``
``def call(self, input_tensor):`` x = nn.relu(input_tensor)`` x = self.conv2a(x)``
`` x = nn.relu(x)`` x = self.conv2b(x)``
`` x = nn.relu(x)`` x = self.conv2c(x)``
`` x += input_tensor``return x``
``# Create PixelCNN model``inputs = keras.layers.Input(shape=(height, width, n_channel))``x = MaskedConv2D(mask_type='A', filters=128, kernel_size=7, strides=1)(inputs)``
``for i in range(15):`` x = ResidualBlock(h=64)(x)``
``x = keras.layers.Activation(activation='relu')(x)``x = keras.layers.Conv2D(filters=128, kernel_size=1, strides=1)(x)``x = keras.layers.Activation(activation='relu')(x)``x = keras.layers.Conv2D(filters=128, kernel_size=1, strides=1)(x)``x = keras.layers.Conv2D(filters=q_levels, kernel_size=1, strides=1)(x)``
``pixelcnn = keras.Model(inputs=inputs, outputs=x)`

预处理

PixelCNN的输入值缩放到[0,1]区间。

模型训练

PixelCNN有一个简单的训练方法。该模型通过最大化训练数据的似然估计来学习其参数。

推断

由于PixelCNN是自回归模型,因此推断恰好是顺序的-我们必须逐个像素地生成。首先,我们通过将零传递给我们的模型来生成图像。它不应影响第一个像素,因为其值被建模为独立于所有其他像素。因此,我们执行前向通过并获得其分布。给定分布,我们首先进行采样。然后,我们使用采样的像素值更新图像,然后重复此过程,直到生成所有像素值为止。在这里,使用MNIST数据集使用PixelCNN在150个epoch之后生成样本。每个生成的图像具有四个级别的像素强度。

原文链接:

https://towardsdatascience.com/autoregressive-models-pixelcnn-e30734ede0c1

成为VIP会员查看完整内容
0
17

三维形状物体的生成是计算机图形学和计算机视觉领域的一个重要问题。图形学关注三维物体的建模,而计算机视觉关注如何推断,如从单张图片的输入,对应三维物体的形状。近年来,很多工作开始使用深度神经网络结合不同的三维表达方式来实现三维形状的生成,如体素(voxel),点云(point clouds),三角网格(mesh)以及隐式曲面表达(implicit function)。大部分此类工作生成的是非结构化的三维物体,但是结构化的表达对于感知和理解三维物体是很重要的,如物体不同组件的构成、关系等。

在这个工作里,我们设计了一个深度神经网络,通过顺序部件装配(sequential part assembly)的方式来表达和生成三维物体。简单来说,我们把这样的部件装配序列看成一个”句子”,这个“句子”的每一个“单词”描述了一个部件及其空间位置,类似说一句话一样来生成三维模型。在这个意义上,我们的工作部分受到语法分析的启发:一个句子既可以被看成一个由单词构成的线性结构(linear),也可以被看成由嵌套的短语构成的层级结构(hierarchical)。在三维物体结构表达的情景下,先前的工作 [1,2,3] 采用层级的部件组合(从整体到局部的树状结构),而我们采用线性的部件组合。

成为VIP会员查看完整内容
0
4

题目: PolyGen: An Autoregressive Generative Model of 3D Meshes

摘要:

多边形网格是三维几何的一种有效表现形式,在计算机图形学、机器人技术和游戏开发中具有重要意义。现有的基于学习的方法避免了使用3D网格的挑战,而是使用与神经结构和训练方法更兼容的替代对象表示。提出了一种直接对网格建模的方法,利用基于变换的结构对网格顶点和面进行顺序预测。我们的模型可以对一系列输入进行条件设置,包括类对象、体素和图像,因为模型是概率性的,所以它可以生成在模糊场景中捕获不确定性的样本。我们证明了该模型能够产生高质量、可用的网格,并为网格建模任务建立了对数似然基准。我们还根据不同的方法评估了表面重建的条件模型,并在没有直接训练的情况下展示了竞争性的表现。

成为VIP会员查看完整内容
0
16

题目:GNEG:Graph-Based Negative Sampling for word2vec

论文摘要; 负抽样是分布式词表示学习的一个重要组成部分。我们假设,考虑全局的语料库级信息,为每个目标词生成不同的噪声分布,比原始的基于频率的分布更能满足每个训练词的反例要求。为此,我们从语料库中预先计算单词的共现统计量,并将其应用于随机游走等it网络算法中。我们通过一系列实验验证了这一假设,实验结果表明,我们的方法将单词类比任务提高了约5%,并将单词相似性任务的性能提高了约1%。

成为VIP会员查看完整内容
0
29

Existing image inpainting methods typically fill holes by borrowing information from surrounding image regions. They often produce unsatisfactory results when the holes overlap with or touch foreground objects due to lack of information about the actual extent of foreground and background regions within the holes. These scenarios, however, are very important in practice, especially for applications such as distracting object removal. To address the problem, we propose a foreground-aware image inpainting system that explicitly disentangles structure inference and content completion. Specifically, our model learns to predict the foreground contour first, and then inpaints the missing region using the predicted contour as guidance. We show that by this disentanglement, the contour completion model predicts reasonable contours of objects, and further substantially improves the performance of image inpainting. Experiments show that our method significantly outperforms existing methods and achieves superior inpainting results on challenging cases with complex compositions.

0
3
下载
预览
小贴士
相关资讯
已删除
将门创投
10+阅读 · 2019年4月26日
SFFAI报告 | 常建龙 :深度卷积网络中的卷积算子研究进展
人工智能前沿讲习班
10+阅读 · 2018年10月22日
卷积神经网络简明教程
论智
4+阅读 · 2018年8月24日
语义分割和转置卷积
AI研习社
9+阅读 · 2018年6月22日
深度剖析卷积神经网络
云栖社区
7+阅读 · 2018年5月27日
相关论文
Zhilin Yang,Zihang Dai,Yiming Yang,Jaime Carbonell,Ruslan Salakhutdinov,Quoc V. Le
13+阅读 · 2019年6月19日
FocusNet: An attention-based Fully Convolutional Network for Medical Image Segmentation
Chaitanya Kaul,Suresh Manandhar,Nick Pears
4+阅读 · 2019年2月8日
Foreground-aware Image Inpainting
Wei Xiong,Zhe Lin,Jimei Yang,Xin Lu,Connelly Barnes,Jiebo Luo
3+阅读 · 2019年1月17日
Automatically Designing CNN Architectures for Medical Image Segmentation
Aliasghar Mortazi,Ulas Bagci
9+阅读 · 2018年7月19日
Md Zahangir Alom,Mahmudul Hasan,Chris Yakopcic,Tarek M. Taha,Vijayan K. Asari
7+阅读 · 2018年5月29日
Honggang Zhou,Yunchun Li,Hailong Yang,Wei Li,Jie Jia
3+阅读 · 2018年4月26日
Qingyao Ai,Keping Bi,Jiafeng Guo,W. Bruce Croft
4+阅读 · 2018年4月16日
Jiayuan Gu,Han Hu,Liwei Wang,Yichen Wei,Jifeng Dai
4+阅读 · 2018年3月19日
Jason Lee,Elman Mansimov,Kyunghyun Cho
4+阅读 · 2018年2月19日
Rıza Alp Güler,Natalia Neverova,Iasonas Kokkinos
3+阅读 · 2018年2月1日
Top