Stable Video Diffusion: Scaling Latent Video Diffusion Models to large Data. SVD论文解读

Stable Video Diffusion: Scaling Latent Video Diffusion Models to large Data.


Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets

重点在 large datasets,大力出奇迹,就是用大数据去训练模型,从而使模型变得更好。

摘要

  1. 之前普遍用的是方法是:2D 图像上去训练文生图模型,然后插入时间序列层,在小的高质量的视频数据集上进行微调。但是存在的问题:

    1)使用小视频数据集是不符合目前大数据的趋势的。

    2)目前的视频数据集缺少一个统一的有效的策略去管理。

    作者本文针对这个问题提出一套比较流程化的有效的视频数据治理的手段。

  2. 作者提出了一个三步走的步骤:

    1)text-to-image pretraining 文生图预训练:实际上就是指我们目前已有的文生图的 stable diffusion base model。

    2)video pretraining 文生视频预训练:在大规模视频数据上去做预训练。视频预训练完成后,能够得到在视频领域的一个很好的 base model,这个 base model 会对视频的一些特征具有很好的表征,而且对视频文本特征之间的对应关系会有一些认识,具有了一些基础的能力。

    3)high-qualtity video finetuning 高质量视频微调:base model 有基础能力之后,就要把 base model 去应用到各种具体的下游任务中。如果想要做文生视频,那么就整理一个文本和视频对的数据集去继续 finetuning 之前视频预训练得到的 base model,从而得到一个文生视频的模型。如果想要做图生视频,那么就把图像作为控制条件,继续 finetuning base model,从而得到一个图生视频的模型。如果想控制视频生成的运镜,那么就通过 camera motion-specific Lora 的方式在 base model 上 finetuning 出 Lora 来控制视频生成的视角。如果想做多视图的生成,就用多视图的数据finetuning base model,从而得到一个多视图生成的模型。

    所以第二步算是一个关键,通过大量的数据做视频的预训练,这样能让模型具有一个基础的能力。有了这个基础能力之后,对于具体的下游任务,再去做特异化的 finetuning,这样就能得到各种各样的产出,而且这些产出的模型在各自的领域都达到了 SOTA 的一个效果,其实这也是大数据所带来的一个的优势体现。

3.Curating Data for HQ Video Synthesis

3.1 Data Processing and Annotation

1.LVD

首先作者是讲了他们的初始数据集的收集,称为LVD (large video dataset),包含将近 600M 个视频片段。

imga

这个数据集怎么来的?最初始去各处去搜集一些没有任何处理的原始数据,然后要经过一些过程来得到处理后的 LVD 数据集。首先是 cut detection。

什么叫 cut detection?这里的 cut 是指生成的视频一般都是连续的,可能中间不存在转换,比如说突然换一个场景,或者说有非常大的变动,这种其实是要分割成两段视频去做训练的,这样才有利于生成比较一致的视频。所以第一步就是检测这些视频中的cut,把它切成更细的clips。

关于 cut detection,作者对一个基础的 pipeline 还做了一些改进。基础的 pipeline 就是一个视频,每连续两帧之间它变化的一个幅度,如果变化幅度很大,它就认为这里是一个分界线,要把它切成两段。但是作者认为这种情况只能去检测出那种瞬间变化的那种场景切换,如果是那种渐变效果是检测不出来的。

因此作者将这个检测方法做了一下改进,改进之后就是一个多级的边界检测(apply a cut detection pipeline in a cascaded manner at three different FPS levels)。之前可能是连续两帧之间看它变化多大,现在每隔几帧去看一下它之间的变化大不大。有不同的间隔模式,有可能每隔 5 帧去看一下,然后再隔个 10 帧去看一下它之间的变化大不大。类似于这样的一个多级的方式去检测是否存在一些边界。

作者把视频分成更细的片段之后,用三种不同的方法给这些视频打上文本标注(three different synthetic captioning methods)。

  • image captioner CoCa,基于图像的,取视频中的一个中间帧,用图像打标的方式去给这个视频添加描述。
  • V-BLIP,一种基于整个视频的打标算法,考虑视频全局。
  • 基于大语言模型 LLM-based,把前两种打标的结果去进行一个综合。

这样每个视频就会有三个标注,经过这两步之后,作者就收集了他们的 large video datasets,包含了 577 百万的 clips,一共是 212 年的视频时间长度。

2.LVD-F

在形成 LVD 之后,作者经过一些实验发现这个数据集可能还并不是最佳的,需要对这个数据集做进一步的清洗,让这个数据集更质量更高,这样训练出来的这个视频生成模型才会更好。作者接下来就进行了第二个大的步骤,得到一个更小的模型叫做 LVD-F。LVD-F 的数据量差不多是 LVD 的 1/ 4 左右。

这里采取了什么措施?作者去通过四个角度去计算了每个视频文本对之间的四个评分,分别是:

  • CLIP score:是计算视频和它的标注之间的一个匹配程度。
  • aesthetic score:评判视频本身的美观程度。
  • OCR detection score:OCR(optical character recognition) 检测每个视频中文字所占区域的面积大小,剔除包含大量书面文字的clips。
  • optic flow score:检测光流,如果两帧之间的变化越大,这个光流得分也会越高,用于检测视频的运动变化大小。

得到每个视频的四个指标之后,通过这四个指标去筛选 LVD 数据集,让它更小一点,更精细一点。那怎么去筛呢?很难人为去定义一个阈值,说 CLIP score 高于多少分?我认为是 OK 的,就把它拿进来,这个阈值是多少是需要通过实验去验证的,那怎么去做实验呢?在附录 E2.2 详细说明怎么去定这个threshold。

image-20231126232852027

举例来说,首先看这个 aesthetic threshold 的阈值怎么选取?为了实验的便捷,首先作者先做一个 random simple,将原来 600 百万的 LVD 数据集缩小到十百万,这样验证的速度会更快,因为作者只是为了得到一个阈值,并不是为了训练一个非常好的模型,那为了得到阈值,它就在一个小一点的数据集上去做实验。然后怎么去做实验?就是在这个小的数据集的基础上去建立 4 个不同大小的数据。

怎么去建立 4 个大小不同数据?蓝色表示保持 LVD-10M 这个数据集不变,橙色表示将 aesthetic score 低于 0.125 的那部分数据丢掉,只使用剩下的一些部分。依此类推,这样就构成了四个不同大小的子集,然后在这四个不同大小子集上去 finetuning 模型,然后去生成视频,让人去给这四个模型生成的视频打分。这里有三个指标,一个是 prompt alignment,指看四个模型之间文本和视频的匹配程度。第二个 Quality,指视频本身的质量。第三个 Aggregated,指综合前两项的综合得分。分数越高说明取这个阈值越好。这里绿色柱子综合得分最高,绿色对应的是0.25,所以作者选择的 threshold 就是0.25,即把 aesthetic score 低于 0.25 的那些视频都从 LVD 数据集里去删掉,这就是作者所说的数据治理,那其他的指标也是以此类推。比如 clip score 最好的指标是0.5,也就是 clip score 低于 0.5 的那些视频都丢掉,最后把这些所有视频取一个交集,就是说每一个指标都会丢掉一部分数据,然后最后取一个所有指标的一个交集,这样就得到最终的 LVD-F 数据集,就是作者治理之后的数据集。第2幅图的 Motion 指之前说的那个光流,根据光流做筛选。第1幅图中的 caption strategy 不是筛选指标,而是对比不同的打标方式所带来的模型效果的影响,但是作者认为现在一个通常的训练方式都是用尽可能不一样的 caption 去训练模型,也就是说一个视频可能会对应多个caption,这个是合理的,即蓝色的 Coca 这种打标方式效果是最好的。作者去调配了这三种不同的打标在训练过程中所可能出现的概率,50% 的情况下是 Coca 打的标签去作为数据的输入,25% 的和另外 25% 的情况是另外两种打标方式作为模型标签的输入 ( p C o C a = 0.5 ; p V − B L I P = 0.25 ; p L L M = 0.25 p_{CoCa} = 0.5; p_{V-BLIP} = 0.25; p_{LLM} = 0.25 pCoCa=0.5;pVBLIP=0.25;pLLM=0.25)。

作者经过这四个指标将 LVD 数据集进一步缩小,实现数据治理。

3.2 Stage I: Image Pre training

Or42Qr.png

实际上是文生图预训练,也就是 stable diffusion。作者验证了一下 Image Pretraining 对视频生成的影响。基于一个文生图预训练模型基础上继续做视频生成的 finetuning,和从头开始随机初始化开始去做视频生成训练,它们的效果差距是很大的。左边蓝色条就是用 stable diffusion 的那些文生图模型作为训练的初始值,它的生成效果要远远好于用一个完全随机初始化的模型去训一个视频生成的模型的效果。

3.2 Stage II: Curating a Video Pretraining Dataset

Or46CM.png

主要讲述如何把 LVD 数据集变成 LVD-F 数据集,把数据集的规模缩小了 1/ 4,但是质量更高。(b)就是去对比做不做数据治理对模型效果的影响。通过 Prompt Alignment、Quality 和一个综合评分,实际上是前两项的一个平均,对比一下做不做数据治理得到的数据集对模型性能的影响。蓝色F是指做数据治理的数据集训练出来的模型,User Preference 值更高,说明还是做数据治理会更有优势一点,当然这个 gap 相比于基不基于图像的预训练要小很多。

Or4u41.png

作者还对比了经过数据治理之后的数据集和一些外部的数据集之间对于训练视频生成模型的一个好坏。在图4(a)(b)中分别对比了两个不同的数据集,可以看到蓝色的条都更高一点了,蓝色条都是经过数据治理之后训练的模型,说明了数据治理很有效。

作者还对比了在不同的数据规模下,数据治理是不是有用?图4©中,之前都是在10M数据量级上去做实验,现在扩展到 50M上,经过治理的蓝色条还是要比橙色条高,说明在更大的规模的数据集上,数据治理仍然是有用的。

图4(d)对比说明了,使用更大的数据集去做数据治理相比于更小的数据集做数据治理之后的模型生成效果,蓝色条高于橙色条,说明大数据量对于模型的性能还是有效的。

3.4 Stage III: High-Quality Finetuning

Or4I2I.png

在第三阶段做了一个实验,去验证第二阶段给模型带来的提升。怎么去对比?作者选了三个模型:

  • 绿色:直接从第一阶段,也就是文生图模型来作为第三阶段 finetuning 的初始值,即跳过第二阶段。
  • 橙色:经过了 Video Pretraining 阶段,用该结果作为第三阶段精调的初始值,其中,第二阶段 Video Pretraining 用的未经过治理后筛选过的数据。
  • 蓝色:在第二阶段用的是经过治理的数据去训练,得到的模型作为第三阶段的初始值。

结果验证经过 Video Pretraining 肯定比不经历第二阶段要好很多。用治理过的数据也会比不治理的数据要好很多。同时,一个有趣的发现,是第 10K 步和第 50K 步,随着步数增大,第二阶段作用会慢慢变弱,也就是这个柱子的分数整体是在降低的。这是为什么呢?其实经不经过第二阶段只是改变了第三阶段的一个初始值,那第三阶段其实也是能学到东西的,那经过一段时间学习之后,它能把第二阶段没学到的有一些东西可能弥补回来,从而缩短这个差距。

并不是说经过 50K 步数之后,经过第二阶段的模型性能本身变差,只是说相比于没有经过第二阶段的模型而言,这个 gap 减小了,这是理所应当的。

4.Training Video Models at Scale

Text-to-Video 以及 Image-to-Video Model 的区别在于控制条件的输入是什么?如果文本生成视频,那么 condition 输入的是文本,经过一个 clip 的文本编码器,把文本编辑编码成embedding,然后经过 cross attention 去融合到模型中去。如果做图像生成视频,就需要把 image 作为 condition,可能需要一个 CLIP image encoder 去把图像变成一个embedding,然后通过 cross attention 或者其他方式融入到模型里面去,告诉模型有这样的控制条件的存在。这就是它们的区别。

4.3.1. Camera Motion Lora

如果做视频生成,它是基于一个文本生成的模型来做一定的改进得到的,那改进点在哪?其实就是要让模型知道这个时间的信息,因为图像是没有时间信息的,但是视频就得有个时间信息。所以通过文生图模型来拓展到视频生成模型上,一般会在原来的文生图模型上添加一个 temporal attention 的方式去把帧与帧之间时序上的信息建立一定的联系。

Lora 就是去对矩阵做一些参数微调,通过矩阵分解的方式,相当于旁边多出了一些参数,去达到微调参数矩阵的效果。这里微调的就是 temporal attention 的这些blocks,在这些 blocks 旁边加一个 Lora 模块,去增加一些参数,去微调这些 blocks 的权重,这就是这些Lora的原理。

Or4CbD.png

每个 Lora 是一种定制化的相机角度移动的方式。比如说我有一个 horizontal Lora,就是控制物体水平移动的,那么如果输入是一张静止的图,那么生成的视频就是一个水平视角移动的视频。如果用的是 zooming Lora,那么生成的视频就是不断放大的视频,或者不断缩小的视频。如果训练的是 static Lora,那么它就是一个静止的视频。

4.4 Frame Interpolation

插帧,即在两帧之间插入更多帧,让视频的帧率更高,更看起来更流畅。那作者怎么做呢?它训练的时候其实就是输入前后两帧,然后让模型去输出中间的很多帧。

4.5 Multi-View Generation

多视图生成,将某一个视角作为 condition 条件,然后要输出一个其他视角的图片。

Or4wmF.png

表9中是现有的一些 SOTA 的多视图生成的方案,或者说 3D 生成的一些方案。可以看到我们的方法 SVD-MV(Multi-View) 的三个指标都是更高的。(a)中的下半部分是ablation study,验证的是初始化参数对于最后多视图生成的模型效果的影响。Scratch-MV 是随机初始化的参数去训练一个多视图生成的模型。SD2.1-MV 是用 SD2.1 模型的参数作为多视图生成模型训练的初始值。SVD-MV 是经过了之前说的第二阶段 Video Pretraining 之后的参数作为第三阶段模型的数据初始值。它们之间的一个对比能够证明不同的初始值所给模型带来的提升。通过第一行和第二行的数值对比可以看出 stage I 带来的提升;通过第二行和第三行的数值对比可以看出 Video Pretraining 阶段对于多视图生成的提升,前两阶段对于最终的结果都是有用的。(b)画出了一个随着训练步数的增长,3种不同的初始值训练得到的模型在多视图生成上的分数。

本文核心在于数据怎么处理。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值