以Video Pixel Networks(VPN)中的前几帧为条件的像素生成究竟如何?
为解释我的问题,以下是来自OpenAI的pixelcnn++文件中第3.2节的引文:
接下来,我们关注van den Oord等人。 (2016c)将我们的生成模型作为条件 CIFAR-10图片的类别标签。这是通过线性投影 将我们的网络中每个卷积单元的类别标签划分为单独的类别相关偏差向量。
这意味着,我们首先具有形状为[batch_size, num_channels]
的偏置矢量,然后将其重整为[batch_size, 1, 1, num_channels]
,然后将其平铺为[batch_size, img_height, img_with, num_channles]
,然后添加平铺的偏置矢量到相同形状的因果转化输出这样,将要生成的每个像素都将以类标签信息为条件。
现在回到VPN文件:我们如何做同样的事情来限制所有先前帧的像素生成?更具体地说:
ConvLSTM输出的形状为[bs, H, W, C]
,
我们不能简单地将其添加到pixelcnn解码器的因果转换输出中,否则每一代像素将无法看到所有上下文信息。
如果我们首先将ConvLSTM输出调整为[bs, 1, 1, HxWxC]
的形状,然后将其平铺为[bs, H, W, HxWxC]
,然后将其添加到pixelcnn解码器的因果conv输出中,则每个像素生成将可以访问先前框架中的所有上下文信息,但是有两个问题:
1)形状信息会被破坏吗?
2)如果一个人的GPU内存不足,我们如何使pixelcnn解码器具有HxWxC
(例如bs * 28 * 28 * 256 = bs * 200704)通道? (从VPN论文中,作者提到在ConvLSTM中有256个通道,这就是我们上面有bs * 28 * 28 * 256
的原因)。如果使用1x1转换来减少通道数,则需要减少很多通道,因此会丢失上下文信息。
那么像素生成是如何精确地取决于先前的帧的?