Tensorflow中的视频像素网络

DeepMind最近发布了一篇名为视频像素网络(VPN)的论文,它是一种概率视频模型,用于估计视频中原始像素值的离散联合分布。 DeepMind没有发布本文的开源实现。 这篇博客文章描述了VPN体系结构以及我实现本文的细节。 您可以在这里找到它:TF中的VPN。

VPN架构

作者提出了一种基于深度神经网络的生成视频模型,该模型可以对视频中像素值的联合分布进行建模。 该模型对视频帧进行编码,并捕获视频的时间维度,每个帧的两个空间维度以及颜色通道维度中的依存关系。 这样就可以对从一个像素到下一个像素的随机过渡建模,而不会引入由独立性假设引起的任何不确定性。

VPN的体系结构包括两部分:保留分辨率的CNN编码器和PixelCNN解码器。 CNN编码器在所有层都保留输入帧的空间分辨率。 随着时间的推移,编码器的输出将与卷积LSTM组合在一起,该卷积LSTM也保留了分辨率。 PixelCNN解码器使用掩码卷积有效捕获空间和颜色依赖性,并使用softmax层对原始像素值上的多项式分布进行建模。 该网络还利用新定义的乘法单元和相应的残差块。

他们在本文中的主要贡献是能够在不引入任何独立性假设的情况下对每个像素的概率分布进行建模的能力。 使每个像素依赖于所有先前的帧以及当前帧上的预测像素。 它们通过在预测当前像素时将包含该帧中到目前为止所有预测像素的当前帧馈入模型来实现。 然后从当前像素的预测分布中采样以获取新的当前帧,以用于预测下一个像素。 因此,在推论时,生成视频张量需要采样T * N ^ 2 * 3个变量,对于分辨率为64×64的视频,其一秒钟约为10次方5个样本。 但是在训练时,我们可以使用掩码卷积代替每个像素将当前帧馈送到网络,我将在后面的部分中对其进行更简短的描述。

(图。1)

保留分辨率的CNN编码器

给定一组视频帧F0,…,FT,VPN首先使用CNN编码器对前T帧F0,…,FT-1中的每一个进行编码,以预测FT。 每个CNN编码器均由k个(原始VPN架构中的k = 8)残留块组成。 所有这些编码器都保留输入帧的空间分辨率。

PixelCNN解码器

VPN体系结构的第二部分计算沿空间和颜色维度的依赖性。 CNN编码器的输出提供有关先前帧的信息。 pixelCNN解码器将这些信息与当前帧融合在一起,以使每个像素取决于先前的像素。 他们通过使用/ masked卷积/来实现。 PixelCNN由l个分辨率保留的剩余块组成(原始VPN架构中l = 12)。

乘法单位

作者在他们的论文中介绍了乘法单元,该乘法单元是通过将类似LSTM的门合并到卷积层中来构造的(图2)。

(图2)

剩余乘法块

为了使梯度易于通过网络的多个层传播,它们将两个MU层堆叠在残差乘法块(图3)中,其中输入具有到输出的残差(加法跳过)连接。 为了提高计算效率,使用1×1卷积层将块内MU层中的通道数减半。

(图3)

我的实施细节

为了实现此体系结构,我需要做一些技巧,因为有很多实现细节在本文中没有提到。

蒙面卷积

在论文中,他们提到他们正在使用PixelCNN解码器中的掩码卷积。 他们没有提供有关如何使用它的任何细节。 但是,当他们在PixelCNN解码器中融合当前帧时,我假设他们在此融合中使用它来迫使每个像素仅依赖于之前预测的像素。 这些屏蔽的卷积实际上使我们能够通过在训练时将所有地面真帧作为当前帧馈入来更快地训练VPN。 屏蔽卷积确保每个像素都不依赖于地面真实情况中的标记。 通过将要掩盖的卷积滤波器中的部分清零,可以轻松实现掩盖卷积。

微型VPN和微型VPN

虽然所提出的VPN体系结构是用于视频建模的最新体系结构,但是模型的规模使其难以训练,并且对于小型域而言过于矫kill过正。 因此,我尝试了这种网络的几种变体,减少了卷积层中的滤波器数量以及编码器和解码器中的残差块数量。

迷你VPN:

该模型包含编码器和解码器中剩余块的一半数量。 并包含原始VPN架构上使用的1/4过滤器。

微型VPN:

该模型在两者中都包含剩余块数的1/4。 编码器和解码器。 并包含原始VPN架构上使用的1/4过滤器。

但是,由于缺乏计算能力,我的实现尚未在完整的MNIST数据集上进行过训练和测试。 为了确保实现的正确性,对它进行了过度拟合。 不同架构的过度拟合曲线(图4)表明原始架构收敛最快(仅需要600次迭代)。 第二个是Micro-VPN体系结构(需要3K迭代)。 最后一个是Mini-VPN(需要5K迭代)。 在融合之前的训练阶段,Mini-VPN和Micro-VPN架构都陷入了局部最优状态,而原始VPN架构能够轻松融合而不会陷入中间。

(图4)

最后说明

我不能说由于缺乏计算能力,我的实现能够复制他们在论文中产生的结果。 如果有人尝试对它进行全面培训并分享结果,我将感到非常高兴。