5.2 Introduction to Video Generation Model-Stable video diffusion
本小节主要介绍SD-Video 相关的解读,以及应用为后边的实践做准备。
Last updated
本小节主要介绍SD-Video 相关的解读,以及应用为后边的实践做准备。
Last updated
AI生成视频在AIGC领域算是一个火热的赛道,闭源的pika,runway等已经得到了广泛的用户关注,而Stable video diffusion(SVD)作为开源视频生成模型,在很多方面具备和pika和runway等相近的效果表现。本文主要结合SVD的论文对其训练方法进行解读,并且对其进行了使用测试,从而尝试提供一些使用建议和归纳。
包括5.8亿个带注释的视频剪辑对,总计212年的内容。称之为Large Video Dataset (LVD)。
初始的长视频数据集,里边包含了很多静态的场景,对视频生成模型的训练是很不利的。通过基于光流(Optical flow)算法对视频进行打分筛选,有效视频片段比例得到显著提升。下图展示了经过光流处理,视频中有效片段的比例以及原始视频数据集中基于光流算法打分的分数分布情况。
使用CLIP为每个剪辑片段的第一帧,中间一帧,最后一帧进行注释,这里对于CLIP获取的信息,还经过LLM模型进行归纳,从而计算美学得分,以及计算图像相似度。
排除一些对视频模型训练有害的数据,例如很少运动的片段,大量文本的片段,很低的美学得分等。
数据预处理结果如下表所示:
训练的过程分为了三步走:
即2D文本到图像的扩散模型,初始权重来自于stable diffusion 2.1。
通过对比实验发现,加载预训练的图像模型在视频生成质量和遵循提示词等方面都更受欢迎,对比实验在LVD的一个1000万子集上训练并比较了两个相同的视频模型,其中一个使用了预训练的空间权重,另一个没有使用。结果如下图:
对大量视频进行训练:
在经过CLIP,OCR,光流,艺术美学打分等处理过的视频数据集上训练
对训练结果基于人类喜好进行评估
训练结果基于人类喜好进行Elo分的筛选
在一小部分高质量高分辨率的视频上进行精细调优训练。
大约25万高质量样本,50K Iterations, 5761024(base模型 320576)
高质量视频微调训练在用户喜好,Elo打分等方面的提升如下图
为了获得高帧率的流畅视频,对高分辨率文本到视频模型进行微调,基于一个插帧模型。遵循Blattmann等人的方法[8],通过Mask将左右帧连接到UNet的输入。模型学会在两个条件帧内预测三帧,有效地将帧率提高四倍。发现很少的迭代次数(约10k)就足以得到一个好的模型。
在一个带有丰富相机运动元数据的小数据集上训练这些额外的参数。使用了三个数据子集,其中相机运动被分类为“水平移动”、“缩放”和“静止”。
在多视角数据集上微调训练,使用了两个数据集,一个是Objaverse的子集(包含150K个精选的、CC许可的3D物体),另一个是MVImgNet(包含了大量日常生活中的物品)。训练过程中,所有模型都在16小时内进行了约12000步的训练,使用了8个80GB的A100 GPU,总批量大小为16,学习率为1e-5。结果表明,微调后的多视角模型(被称为SVD-MV)相较于其他模型表现优秀,说明了SVD模型中学习到的视频先验在多视角生成中的优势。此外,与其他从SVD微调而来的模型一样,少量的迭代次数(约12000次)就足以得到一个好的模型。
此外,SVD-MV在训练时间较短(16小时内12000次迭代)的情况下,与最先进的技术相比具有竞争力,而现有的模型通常需要更长的训练时间。
https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt
其中svd_xt可以产生25帧576*1024的视频
目前大多数人都是通过comfyui的节点去使用svd,如下图
svd的参数主要包括如下:
FPS:
帧率,2个模型,分别支持14和25帧,根据帧率可以推出生成视频秒数
Motion bucket id:
控制视频中的动作,数值 越高,动作越多。 取值范围【0~255】
实际测试取值小的时候整体画面运镜幅度小,偏小的取值人物等主体会动多一些,取值较大,运镜比较大但是画面主体的变化小一些
Augmentation level:
添加的noise,更高的noise会降低生成视频和原始image的相似度,产生更更高的变化和运动。实际测试发现,这个数值适当高一些,视频会有更多的变化,一般也不会特别引起视频质量下降和崩坏。
KSampling cfg:
这里需要注意的是,K采样器的cfg建议是1.5到3,不然视频很容易崩坏。可以加入VideoLinerCFGGuidance等comfyui节点,产生一些动态的cfg从而使得视频在时序上产生更多的一些变化和运动,但是整体上控制在1到3。
分辨率:
设置成输入图片的匹配的分辨率,但是最佳的分辨率对于svd_xt来说是宽1024高576,分辨率设置成输入图片的分辨率的话,分辨率不能太高,太高也是较高概率导致视频崩坏。
一组推介的参数配置:
只产生<4s的视频
语义欠缺,缺乏控制
视频变化幅度通常较小,或者单纯运镜
人脸还原度经常有问题
经过系统性大量测试,猜测其训练数据主要来自于电影,适合于做什么和不适合做什么简单进行了总结。
风景
美食(单一主体)
水,火,云等各种粒子特效运动
带电影感的图片:具有一些景深,影视风格的偏冷,偏绿,偏暖,黑白图片,人的背阴
公路汽车,飞机,火箭等
画面简单,有电影感照片
比较平面和2D图片,线稿图,手绘,油画
比较平的动漫, (不行,不行,不行,说三遍)(非常高概率崩坏,除非画面有较好的前景背景层次感,但是也只能生成一些运镜的视频)
人的眼睛,人的手(理论上可以结合comfyui的一些修脸和换脸的插件修复但是原生的模型这方面支持较差,修复的效果取决于模型之外的能力)
运动较大的动物
物体较多较大的运动
和pika以及runway等对比,在泛化的场景上整体上处于同等或者接近的水平。主要差距在于人物,2D动画等方面会稍微欠缺一些,猜测是由于缺乏相关的数据训练。另外pika以及runway实际上是一个产品,而不是模型,也就说这些系统是有完整的workflow去进一步对生成视频进行优化和加工的,例如pika和runwau都是超分可以支持到4K的,一些情况下也可以生成更长的视频,这些方面都是不足或者不能简单对标的。
目前视频生成从使用的角度总结下来,最大的问题,还是缺乏控制,也就是说视频怎么动基本上完全取决于随机抽卡,缺乏语义上或者其他方式的指导和控制所以也导致视频整体上动作和变化较小,对于多主体的视频画面适配较差。
直接上图:
提示词:荒野
提示词:跳舞舞者
zavy-crnvl, a solo carnival dancer in mid-twirl, showcasing the movement of their vibrant costume. The focus is on the flowing fabric and the expression of joy on the dancer's face
提示词:热带雨林
ebest quality,masterpiece,highers,4k,8k,realistic, tropical_rainforest,bush,forest,grass,jungl,horizon,lake,moss,nature,outdoors,plant,rainforest,rock,scenery,sky,stream,stone,sunlight,tree,water,waterfall,
beasy negative,worst quality,low quality,normal quality,