问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

StoryDiffusion:基于一致自注意力的长范围图像和视频生成技术

创作时间:
作者:
@小白创作中心

StoryDiffusion:基于一致自注意力的长范围图像和视频生成技术

引用
CSDN
1.
https://blog.csdn.net/weixin_44966641/article/details/138501765

StoryDiffusion是一种创新的AI图像和视频生成技术,通过在生成模型中引入一致的自注意力机制,实现了长范围图像和视频的生成。该技术在第一阶段通过批内自注意力KV共享生成主题一致的图片,在第二阶段根据这些图片进行特征插值并作为条件生成中间帧,最终得到连贯的视频。

方法

Story Diffusion整体上可以分为两个阶段。第一阶段在生图模型中插入Consistent Self-Attention(CSA)模块,来生成主题一致的图片。这一阶段是不需要训练的。第一阶段生成的主题一致图片可以直接用来拼成故事画,也可以输入到第二阶段。第二阶段,根据第一阶段生成的主体一致图片,生成一致转场视频。

第一阶段

一个故事中有多个故事分镜,每个文本描述prompt对应一个分镜图片。Story Diffusion第一阶段要做的事情就是在生成多张背景不同的分镜图片时,保持故事中的(多个)人物在所有分镜图片中的形象(脸部、服装、配饰等)保持一致。

Story Diffusion第一阶段的CSA与ConsiStory中的SDSA思路类似,即通过在同一个batch内,UNet的注意力层在各图片之间进行KV共享,使得batch内不同图片可以彼此交互,从而实现主题一致的生成结果。但是CSA取交互KV的方式与SDSA有所不同,是在同batch内随机找另一张图片取KV。而且CSA的KV共享只做在UNet的自注意力层中,交叉注意力层不做。

第一阶段,生成主题一致图片的核心模块CSA及其如何插入到标准UNet中的示意图如下所示。具体来说,记一个batch内的图片特征为I ∈ R B × N × C \mathcal{I}\in\mathbb{R}^{B\times N\times C}I∈RB×N×C,其中B , N , C B,N,CB,N,C分别为batch size,每张图片的token个数以及通道数。标准的自注意力是在每张图片的特征自身进行的,表示为:

O i = Attention ( Q i , K i , V i ) O_i=\text{Attention}(Q_i,K_i,Vi)Oi =Attention(Qi ,Ki ,Vi)

其中Q i , K i , V i Q_i,K_i,V_iQi ,Ki ,Vi分别是第i ii个图片特征I i I_iIi经过线性变换得到的。

在Story Diffusion的CSA中,为了实现batch内的特征交互,对第i ii个图片特征,首先从batch内的其他图片特征中随机选一个:

S i = RandSample ( I 1 , … , I i − 1 , I i + 1 , … , I B ) S_i=\text{RandSample}(I_1,\dots,I_{i-1},I_{i+1},\dots,I_B)Si =RandSample(I1 ,…,Ii−1 ,Ii+1 ,…,IB )

然后将S i S_iSi与原特征I i I_iIi拼接起来得到P i P_iPi,再经过线性映射,得到新的key和value:K P i , V P i K_{P_i},V_{P_i}KPi ,VPi。再进行注意力计算:

O i = Attention ( Q i , K P i , V P i ) O_i=\text{Attention}(Q_i,K_{P_i},V_{P_i})Oi =Attention(Qi ,KPi ,VPi)

这样,batch内的图片在生成时能够相互交互,从而保持主题的一致。

另外,为了解决在生成较长故事时batch过大,显存不足的问题,Story Diffusion还采用了滑窗机制来进行生成,具体伪代码如下所示:

第二阶段

Story Diffusion的第二阶段是在第一阶段生成的一系列主题一致图片的基础上,进一步生成视频。也就是在每两张图片之间插帧,生成连贯的视频,相当于是一个给定首尾帧,生成中间帧的视频生成任务。作者指出现有的工作(SparseCtrl和SEINE),在首尾两帧差异过大时,生成效果不够稳定。作者认为这是因为他们只依赖于时序模块来生成中间帧,所以对首尾帧差距太大的情况处理得不够好。

本文提出的视频插帧方法如下图所示。对于给定的首尾两帧图片,首先通过一个图像编码器(CLIP)提取它们的特征。然后通过线性插值,得到中间帧的特征。并经过n层Transformer Block进行处理。再将各帧的特征作为条件,(与prompt文本embeddings拼接起来)通过交叉注意力的形式注入到UNet的生图过程中。

总结

Story Diffusion第一阶段的batch内KV共享来实现图片彼此之间的交互,进而保证主题一致性。第二阶段先提取首尾帧特征并插值,处理后作为条件注入到生图过程中。

第一阶段的KV共享的方式感觉不如ConsiStory的方式精妙,但是ConsiStory是为了背景的多样性选择了仅在主题区域内进行KV共享,Story Diffusion的随机选图全局共享的方式,背景一致性也得到了一定保证,对后续的插帧视频生成更友好一些。还有个问题就是第二阶段为啥要用CLIP语义特征,以图3为例,首尾两帧的语义特征应该是非常接近的(比如“一个人走在马路上”),似乎用纹理特征更合理一些?

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号