VideoDiffusionModels

VideoDiffusionModels

  • space-only 3D卷积
  • 时空分离注意力factorized space-time attention
  • 什么叫"将空间维度flatten为batch维度"

space-only 3D卷积

将原UNet中的2D卷积替换成了space-only 3D卷积(space-only 3D convolution),举例来说,如果原来用的是3x3卷积,那么现在就要把它替换为1x3x3卷积(其中第一个维度对应视频帧,即时间维度,第二个和第三个维度对应帧高和帧宽,即空间维度,由于第一个维度是1所以对时间没有影响只对空间有影响)。

注意:这里的第一个维度是1,对应的是视频帧,即时间维度,所以对时间没有影响,只对空间维度有影响。所以也就是space-only 3D convolution的意思:只对空间维度进行卷积操作,而不改变时间维度。
这样做的好处是:可以保持视频序列的时间长度,同时减少参数数量和计算量。

随后的空间注意块仍然保留,但只针对空间维度进行注意力操作,也就是把时间维度flatten为batch维度。在每个空间注意块之后,新插入一个时间注意块(temporal attention block),该时间注意块在第一个维度即时间维度上执行注意力,并将空间维度flatten为batch维度。论文在每个时间注意力块中使用相对位置嵌入(relative position embeddings),以便让网络能够不依赖具体的视频帧时间也能够区分视频帧的顺序。这种先进行空间注意力,再进行时间注意力的方式,可以称为时空分离注意力(factorized space-time attention)

时空分离注意力factorized space-time attention

时空分离注意力机制:为了减少计算量和内存消耗,只让每个视频时间步的每个键和查询向量与自己匹配,而不是与其他时间步的向量匹配。
例如:我们有一个视频序列,每一帧都是一个4x4的图像,我们把每个像素当作一个patch,那我们就有16个patch,如果用joint space-time attention(ST)策略,那我们就需要计算每一帧的16个patch与其他所有帧的16个patch之间的注意力权重,这样就会产生很多冗余的计算,但是如果我们用固定注意力矩阵的策略,那我们就只需要计算每一帧的16个patch与自己的16个patch之间的注意力权重,这样就可以大大减少计算量和内存消耗。
【意思就是:单帧对自己进行注意力机制的计算,而不是在帧与帧之间进行注意力计算,好处就是可以保留每一帧的空间信息,而不是让它们与其他帧混合】

什么叫"将空间维度flatten为batch维度"

这句话是说明在空间注意力操作之后,要对时间维度也进行注意力操作,从而提取视频序列中的时间相关信息。举个例子,假设一个空间注意力块的输出形状是(batch, channel, 16, 64, 64),其中第一个维度是batch,第二个维度是channel,第三个维度是时间,第四个和第五个维度是空间。那么在这个输出上执行一个时间注意力块,就是把第四个和第五个维度合并为一个维度,得到(batch, channel, 16, 4096),然后在第三个维度上进行注意力操作,得到(batch, channel, 16, 4096),最后再把第四个维度拆分为两个维度,得到(batch, channel, 16, 64, 64)。这样就完成了一个时间注意力块的操作。

也就是进行帧与帧之间的attention计算。

这个时间注意力块的操作,就是在计算帧与帧之间的注意力,从而捕捉视频序列中的运动或者变化,这种注意力操作可以帮助网络生成更加连贯和逼真的视频。

你可能感兴趣的:(diffusion,人工智能)