跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)
Movie Gen:A Cast of Media Foundation Models
简介
Movie Gen是Meta公司提出的一系列内容生成模型,包含了
3.2.1 预训练数据
Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。
图片-文本对的预训练流程与Meta提出的 Emu: Enhancing image generation models using photogenic needles in a haystack 流程相同。[2309.15807] Emu: Enhancing Image Generation Models Using Photogenic Needles in a HaystacktAbstract page for arXiv paper 2309.15807: Emu: Enhancing Image Generation Models Using Photogenic Needles in a Haystackhttps://arxiv.org/abs/2309.15807https://arxiv.org/abs/2309.15807
https://arxiv.org/abs/2309.15807
原始视频数据由4秒至两分钟长度的数据组成,视频内容涵盖人文、自然、动物等多个领域。数据经过预处理后得到一系列的clip-prompts pairs(视频片段-提示词对) 。
每个clip(视频片段)大约4-16秒长,视频内容由单镜头拍摄,且不包含复杂的动作。
视频数据预处理流程如下:

Visual Filtering
1. 过滤掉分辨率小于720px的视频
2. 数据集中60%的视频为横屏视频,40%为竖屏视频
3. 删去文字特别多的视频
4. 从长视频中抽取出单场景的4-16s的片段
5. 保证视频美学品质
6. 保证视频没有边框
Motion Filtering
删去运动幅度较小的视频,通过Meta内部的静态视频检测模型移除所有没有运动的视频,随后选出具有“合理”运动幅度的视频。
Content Filtering
删除重复的视频片段、对不同类型的数据进行重新采样,保证内容的均匀性。
Captioning
对每个视频片段使用llama3-Video创建准确、具体的prompts。70%的数据使用8B模型,30%的数据使用70B。
为了保证模型能够生成电影质感的运镜,训练了一个运镜分类器来对16类运镜进行分类,如变焦、平移。如果运镜分类结果置信度很高,则将这个运镜分类结果添加至提示词中。
Multi-stage data curation
Movie Gen将上述数据预处理流程分了三个阶段,每个阶段对于数据的筛选逐渐严格,使得模型可以由易到难逐步进行学习。
3.2.2 预训练
1. 首先使用text-to-image的数据对模型进行warm up热身训练,随后使用text-to-image和text-tovideo的数据进行联合训练。
2. 视频数据分辨率首先由256px提升至768px
3. 不断用更好的数据集和优化后的超参数对模型进行训练。

训练阶段:256 px T2I
- TP(张量并行度): 1
- 指训练过程中使用的张量并行度。在这个阶段,没有应用张量并行。
- CP(检查点并行度): 1
- 可能指的是检查点并行度。在这个阶段,没有应用检查点并行。
- bs/GPU(每个GPU的批量大小): 6
- 指每个GPU在一次前向/后向传递中处理的样本数量。每个GPU处理6个样本。
- GPUs(GPU数量): 1536
- 用于训练的GPU总数。这个阶段使用了1536个GPU。
- global bs(全局批量大小): 9216
- 跨所有GPU的总批量大小。计算公式为
bs/GPU * #GPUs= 6 * 1536 = 9216。
- learning rate(学习率): 1e-4
- 确定每次迭代时向损失函数最小值移动的步长。学习率设置为0.0001。
- iters(迭代次数): 210k
- 训练过程中执行的总迭代次数。这个阶段运行210,000次迭代。
- seen samples(已见样本数): 1.94B
- 表示模型在训练过程中暴露的总样本数。模型看到了大约19.4亿个样本。
训练阶段:256 px T2I/V
- TP(张量并行度): 4
- 指训练过程中使用的张量并行度。张量并行度设置为4。
- CP(检查点并行度): 1
- 可能指的是检查点并行度。在这个阶段,没有应用检查点并行。
- bs/GPU(每个GPU的批量大小): 2
- 指每个GPU在一次前向/后向传递中处理的样本数量。每个GPU处理2个样本。
- #GPUs(GPU数量): 3072
- 用于训练的GPU总数。这个阶段使用了3072个GPU。
- global bs(全局批量大小): 1536
- 跨所有GPU的总批量大小。计算公式为
bs/GPU * #GPUs= 2 * 3072 = 1536。
- learning rate(学习率): 6e-5
- 确定每次迭代时向损失函数最小值移动的步长。学习率设置为0.00006。
- #iters(迭代次数): 123k
- 训练过程中执行的总迭代次数。这个阶段运行123,000次迭代。
- #seen samples(已见样本数): 173.6M
- 表示模型在训练过程中暴露的总样本数。模型看到了大约1.736亿个样本。
训练阶段:768 px T2I/V
- TP(张量并行度): 4
- 指训练过程中使用的张量并行度。张量并行度设置为4。
- CP(检查点并行度): 1 或 2
- 可能指的是检查点并行度。在这个阶段,检查点并行度根据配置为1或2。
- bs/GPU(每个GPU的批量大小): 1
- 指每个GPU在一次前向/后向传递中处理的样本数量。每个GPU处理1个样本。
- #GPUs(GPU数量): 6144 或 4096
- 用于训练的GPU总数。这个阶段使用了6144或4096个GPU,取决于配置。
- global bs(全局批量大小): 1536、768 或 512
- 跨所有GPU的总批量大小。计算公式为
bs/GPU * #GPUs。根据配置,它可以是1536、768或512。
- learning rate(学习率): 6e-5、3e-5、2e-5 或 1e-5
- 确定每次迭代时向损失函数最小值移动的步长。学习率在0.00006、0.00003、0.00002和0.00001之间变化。
- #iters(迭代次数): 19.6k、11k、15.9k 或 28k
- 训练过程中执行的总迭代次数。这个阶段运行19,600、11,000、15,900或28,000次迭代,取决于配置。
- #seen samples(已见样本数): 30.1M、16.9M、12.2M 或 14.6M
- 表示模型在训练过程中暴露的总样本数。模型看到了大约3.01亿、1.69亿、1.22亿或1.46亿个样本,取决于配置。
Note:联合训练时,文本-图片对数据和文本视频对的数据保持在1:10左右的比例。
3.3 Fine Tuning
为了保证生成结果的质量,finetuning的数据集规模可以较小,但是数据质量一定要有保障。因此finetuning的数据均由人为标注。
高质量的定义:良好的运镜、真实性、美学性、内容丰富、文本描述详细。
为了筛选高质量的数据集,Movie Gen使用连续的四个阶段对数据进行筛选:
1. 创建一个候选子集,对每个质量标准进行严格的限制,使用目标检测模型移除了只有小物体的视频。
2. 与Content Filtering一样,对第一阶段筛选后的视频进行重新采样,保证各个类别的视频均匀分布。
3. 人为找出具有电影质感的视频。
4. 人为对模型生成的提示词进行润色修改,同时加入详细的原数据:运镜、人物表情、物体和背景信息、具体的运动描述和光线信息。
| 模型架构 | 与预训练阶段保持一致 |
| 初始化 | 使用预训练后的checkpoint文件 |
| 节点数 | 64 |
| GPU数量 | 512 H100 GPUs (每个节点 8 个GPUs). |
| Batch Size | 相对较小(没有具体说明) |
| 动态学习率 | 余弦学习率调度器 (Loshchilov and Hutter, 2017). |
| 视频帧率 | 16秒长度的视频:16FPS;0.6–16秒长的视频:24FPS. |
| 生成视频长度 | 支持生成10-16秒的视频 |
5. Model Averaging:不同数据子集、不同超参数训练出来的模型各有所长,为了利用不同checkpoint模型的优势、提升模型泛化性Movie Gen对SFT阶段不同的模型参数进行了平均操作,类似于Llama 3。
HunyuanVideo: A Systematic Framework For Large Video Generative Models
3. Data Pre-porcessing
与Movie Gen一致,Hunyuan Viedoe使用了图像-视频联合训练的策略,将视频分为五类、图像分为两类,以满足不同训练需求。原始数据涵盖人物、动物、风景等多个领域,筛选时设定了最低时长、画质、构图、色彩等严格标准,优先选用高质量数据,显著提升了模型性能。
3.1 Data Filtering
1. 使用PySceneDetect把原始视频分割为单镜头拍摄的视频片段。
2. 使用OpenCV中的拉普拉斯算子找出视频中最“干净”的一帧作为视频开头。
3. 使用内部的VideoCLIP模型计算每个视频的embeddings,使用embeddings计算余弦距离,删去重复数据。使用K-Means算法对数据进行重新采样以保持各种类型数据的多样性。
4. 使用Dover模型筛选更为美观的视频片段。单独训练了一个用于筛选清晰度的视频。
5. 删去了完全禁止和动作幅度较小的视频。(estimated optical flow)
6. 使用PySceneDetect和Transnet v2获得场景边界信息
7. 使用OCR模型移除文字过多的视频片段
8. 使用目标检测模型移除敏感信息

SFT阶段,约有100万条数据,同样采用人为标注的数据进行微调。
3.2 Data Annotation
结构化说明文本:HunYuanVideo使用JSON来对图片信息进行说明。JSON数据包括:Short Description描述场景的主要内容、Dense Description详细、完整的描述、Background描述物体所在的背景、Style描述视频的风格、Shot Type描述视频的具体视角、Lighting描述视频的光线情况、Atmosphere描述视频氛围如Cozy、Tense等。
此外,HunYuanVideo扩展了JSON结构,以包含额外的元数据派生元素,包括源标签、质量标签以及来自图像和视频元信息的其他相关标签。
为了防止过拟合,HunYuanVideo通过精心设计的Dropout及排列和组合策略,根据这些多维度的描述信息来合成长度和模式各异的字幕,旨在提高生成模型的泛化能力。
HunYuanVideo训练了一个运镜分类器来预测14个不同的运镜类型,包括变焦放大、变焦缩小、向上平移、向下平移等。高置信度的分类结果将被添加至数据的JSON说明文本中。
通过上述两项工作的数据预处理过程,可以看出数据质量对模型的重要性。
相关文章:
跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)
Movie Gen:A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型,包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…...
【项目集成Husky】
项目集成Husky 安装初始化 Husky在.husky → pre-commit文件中添加想要执行的命令 安装 使用 Husky 可以帮助你在 Git 钩子中运行脚本,例如在提交代码前运行测试或格式化代码pnpm add --save-dev husky初始化 Husky npx husky init这会在项目根目录下创建一个 .hu…...
keil5如何添加.h 和.c文件,以及如何添加文件夹
1.简介 在hal库的编程中我们一般会生成如下的几个文件夹,在这几个文件夹内存储着各种外设所需要的函数接口.h文件,和实现函数具体功能的.c文件,但是有时我们想要创建自己的文件夹并在这些文件夹下面创造.h .c文件来实现某些功能,…...
2025-1-28-sklearn学习(47) (48) 万家灯火亮年至,一声烟花开新来。
文章目录 sklearn学习(47) & (48)sklearn学习(47) 把它们放在一起47.1 模型管道化47.2 用特征面进行人脸识别47.3 开放性问题: 股票市场结构 sklearn学习(48) 寻求帮助48.1 项目邮件列表48.2 机器学习从业者的 Q&A 社区 sklearn学习(47) & (48) 文章参考网站&…...
Flask数据的增删改查(CRUD)_flask删除数据自动更新
查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询,使用like,查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据,%任何数据 st…...
算法随笔_33: 132模式
上一篇:算法随笔_32: 移掉k位数字-CSDN博客 题目描述如下: 给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j…...
Linux内核中的页面错误处理机制与按需分页技术
在现代操作系统中,内存管理是核心功能之一,而页面错误(Page Fault)处理机制是内存管理的重要组成部分。当程序访问一个尚未映射到物理内存的虚拟地址时,CPU会触发页面错误异常,内核需要捕获并处理这种异常,以决定如何响应,例如加载缺失的页面、处理权限错误等。Linux内…...
【Git】使用笔记总结
目录 概述安装Git注册GitHub配置Git常用命令常见场景1. 修改文件2. 版本回退3. 分支管理 常见问题1. git add [中文文件夹] 无法显示中文问题2. git add [文件夹] 文件名中含有空格3. git add 触发 LF 回车换行警告4. git push 提示不存在 Origin 仓库5. Git与GitHub中默认分支…...
C语言中的存储类
C语言中的存储类 在C语言中,存储类是用于定义变量和函数的作用域、生命周期以及可见性的关键字。存储类决定了数据在内存中的存储位置以及它们在程序中的使用方式。本文将详细介绍C语言中的存储类,包括其类型、作用以及如何使用。 1. 存储类的类型 C语…...
DeepSeek 云端部署,释放无限 AI 潜力!
1.简介 目前,OpenAI、Anthropic、Google 等公司的大型语言模型(LLM)已广泛应用于商业和私人领域。自 ChatGPT 推出以来,与 AI 的对话变得司空见惯,对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…...
【Qt5】声明之后快速跳转
我在网上看到的方法是ctrlL(?不是很清楚,因为我跳转不成功!) 另外一种就是鼠标点击跳转的。 首先,声明私有成员函数 此时,一般步骤应该是在构造函数里面继续,写函数的框架什么的。于…...
flowable expression和json字符串中的双引号内容
前言 最近做项目,发现了一批特殊的数据,即特殊字符",本身输入双引号也不是什么特殊的字符,毕竟在存储时就是正常字符,只不过在编码的时候需要转义,转义符是\,然而转义符\也是特殊字符&…...
新一代搜索引擎,是 ES 的15倍?
Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…...
Pandas基础06(异常值的检测与过滤/抽样/常用聚合函数/数据聚合)
Pandas基础06 异常值的检测与过滤 在数据分析中,异常值(Outliers)是指与其他数据点显著不同的值。这些值可能由于数据录入错误、设备故障或极端情况而产生,因此在进行数据分析之前,需要对其进行检测与过滤。本文将介绍…...
事务01之事务机制
事务机制 文章目录 事务机制一:ACID1:什么是ACID2:MySQL是如何实现ACID的 二:MySQL事务机制综述1:手动管理事务2:事务回滚点3:事务问题和隔离机制(面试)3.1:事…...
Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)
前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?…...
@EventListener底层原理(超详细)| @TransactionalEventListener底层原理 | 事务同步
0. 举个栗子0.1. 事件监听方法0.2. 事件推送 1. EventListener注解2. EventListener标注的监听方法解析2.1. 事件监听方法处理器EventListenerMethodProcessors2.1.1. AbstractApplicationContext.invokeBeanFactoryPostProcessors2.1.2. AbstractApplicationContext.initAppli…...
NX/UG二次开发—CAM—快速查找程序参数名称
使用UF_PARAM_XXX读取或设置参数时,会发现程序中有一个INT类型参数param_index,这个就是对应程序中的参数,比如读取程序余量,则param_index = UF_PARAM_STOCK_PART,读取程序的加工坐标系则param_index = UF_PARAM_MCS等等。 你需要读取什么参数,只要只能在uf_param_indic…...
X86路由搭配rtl8367s交换机
x86软路由,买双网口就好。或者单网口主板,外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆,做bridge下载,速度忽高忽低。 今天交换机到货,poe供电,还是网管,支持Qvlan及IGMP Snooping…...
【C++语言】卡码网语言基础课系列----5. A+B问题VIII
文章目录 练习题目AB问题VIII具体代码实现 小白寄语诗词共勉 练习题目 AB问题VIII 题目描述: 你的任务是计算若干整数的和。 输入描述: 输入的第一行为一个整数N,接下来N行每行先输入一个整数M,然后在同一行内输入M个整数。 输出…...
【LLM-agent】(task1)简单客服和阅卷智能体
note 一个完整的agent有模型 (Model)、工具 (Tools)、编排层 (Orchestration Layer)一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:Role (角色) -> Profile(角色…...
CAP 定理的 P 是什么
分布式系统 CAP 定理 P 代表什么含义 作者之前在看 CAP 定理时抱有很大的疑惑,CAP 定理的定义是指在分布式系统中三者只能满足其二,也就是存在分布式 CA 系统的。作者在网络上查阅了很多关于 CAP 文章,虽然这些文章对于 P 的解释五花八门&am…...
RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结二、代码实现一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者图像序列中捕…...
ZZNUOJ(C/C++)基础练习1021——1030(详解版)
目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 (C语言版,三目运算)C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...
2025 年,链上固定收益领域迈向新时代
“基于期限的债券市场崛起与 Secured Finance 的坚定承诺” 2025年,传统资产——尤其是股票和债券——大规模涌入区块链的浪潮将创造历史。BlackRock 首席执行官 Larry Fink 近期在彭博直播中表示,代币化股票和债券将逐步融入链上生态,将进一…...
使用where子句筛选记录
默认情况下,SearchCursor将返回一个表或要素类的所有行.然而在很多情况下,常常需要某些条件来限制返回行数. 操作方法: 1.打开IDLE,加载先前编写的SearchCursor.py脚本 2.添加where子句,更新SearchCursor()函数,查找记录中有<>文本的<>字段 with arcpy.da.Searc…...
基于互联网+智慧水务信息化整体解决方案
智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术,对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…...
FIDL:Flutter与原生通讯的新姿势,不局限于基础数据类型
void initUser(User user); } 2、执行命令./gradlew assembleDebug,生成IUserServiceStub类和fidl.json文件 3、打开通道,向Flutter公开方法 FidlChannel.openChannel(getFlutterEngine().getDartExecutor(), new IUserServiceStub() { Override void…...
文件读写操作
写入文本文件 #include <iostream> #include <fstream>//ofstream类需要包含的头文件 using namespace std;void test01() {//1、包含头文件 fstream//2、创建流对象ofstream fout;/*3、指定打开方式:1.ios::out、ios::trunc 清除文件内容后打开2.ios:…...
cf1000(div.2)
Minimal Coprime最小公倍数 输入: 6 1 2 1 10 49 49 69 420 1 1 9982 44353 输出: 1 9 0 351 1 34371 代码...
