什么是PixelCNN

PixelCNN是一种自回归模型,自回归模型是生成模型的一种。

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

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

什么是PixelCNN_第1张图片

像素 i(红色)由所有先前的像素(蓝色)定义。 PixelCNN 可以使用沿深度神经网络的卷积层对它们的关联进行建模。

使用卷积操作,PixelCNN 可以并行学习图像中所有像素的分布。 然而,在确定特定像素的概率时,标准卷积层的感受野违反了自回归模型的顺序预测。 在处理一个中心像素的信息时,卷积滤波器会考虑它周围的所有像素来计算输出特征图,而不仅仅是前面的像素。所以这里需要采用掩码来阻止来自尚未预测的像素的信息流。

掩码卷积层

可以通过将不应该考虑的所有像素清零来完成屏蔽。在我们的实现中,创建了具有与卷积过滤器相同大小且值为1和0的蒙版。在进行卷积运算之前,将此掩码乘以权重张量。在PixelCNN中,有两种掩码类型:

掩码类型 A:此掩码仅应用于第一个卷积层。 它通过将掩码中的中心像素归零来限制对像素的访问。 这样,我们保证模型不会访问它即将预测的像素(下图中的红色部分)。

掩码类型 B:此掩码应用于所有后续卷积层,并通过允许从像素到自身的连接来放宽掩码 A 的限制。 这对于解释第一层的像素预测很重要。

什么是PixelCNN_第2张图片

模型架构

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

什么是PixelCNN_第3张图片

在序列块之后为RELU-CONV-RELU-CONV 层,其中CONV是使用带有1x1 滤波器标准卷积。 然后,输出层是一个 softmax 层,它预测像素的所有可能值。 模型的输出具有与输入图像大小相同的格式(因为我们想要每个像素的输出值)乘以可能值的数量(根据强度级别进行分类,例如256 个强度级别)。

预处理

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

什么是PixelCNN_第4张图片

模型训练

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

什么是PixelCNN_第5张图片

推断

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

什么是PixelCNN_第6张图片

结论

PixelCNN 模型的优点是联合概率学习技术是非常容易处理的; 我们只是尝试在给定所有先前像素值的情况下预测后面的每个像素值。 由于 PixelCNN 是通过最小化负对数似然来训练的,因此与其他方法(例如 GAN——需要找到纳什均衡)相比它的训练更加稳定。 但是由于样本的生成是顺序的(逐像素),原始的 PixelCNN 在可扩展性方面存在困难。

你可能感兴趣的:(深度学习,python,计算机视觉)