MotionCtrl: A Unified and Flexible Motion Controller for Video Generation

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation

  • 这篇论文是基于VideoCrafter的,而VideoCrafter是基于LVDM的

  • 关于LVDM可以看https://blog.csdn.net/Are_you_ready/article/details/136615853

  • 2023年12月6日发表在arxiv

  • 这篇论文讨论了一种先进的技术,用于控制视频生成中的相机和物体运动。主要内容包括:

    • 综合框架:论文提出了一个统一且灵活的运动控制框架,用于视频内容生成。
    • 控制功能:该框架能够控制相机和物体的运动,包括方向、速度和轨迹。
    • 技术应用:适用于各种视频制作场景,如电影制作、游戏开发等。

Abstract

  • 在视频中,运动主要包括由相机运动引起的相机运动和由物体运动引起的物体运动。对这两种运动的精确控制对于视频生成至关重要。然而,现有的工作要么主要关注一种类型的运动,要么没有明确地区分两者,从而限制了其控制能力和多样性。
  • 因此,本文提出了一种统一的、灵活的运动控制器MotionCtrl,用于视频生成,旨在有效且独立地控制相机和物体运动
    • 我们仔细设计了MotionCtrl的架构和训练策略,同时考虑了相机运动、物体运动和不完善训练数据的固有属性
    • 与以前的方法相比,MotionCtrl具有以下三个主要优点:
      1. 它可以有效且独立地控制相机运动和物体运动,从而实现更精细的运动控制,并促进两种类型运动的灵活和多样化组合
      2. 其运动条件由相机姿态和轨迹确定,这些姿态和轨迹与外观无关,并且对生成视频中物体的外观或形状的影响最小
      3. 它是一种相对通用的模型,一旦训练过,就可以适应各种相机姿态和轨迹,即MotionCtrl可以控制各种摄像机运动和轨迹,无需对每个摄像机或对象运动进行精细调整。

Introduction

  • 在视频中,主要有两种类型的运动:由相机运动引起的全局运动由物体运动引起的局部运动
  • 相机运动是指整个场景在时间维度上的全局变换,通常通过一段时间内的相机姿态序列来表示。
  • 相比之下,物体运动涉及场景中特定物体的时间运动,通常表示为与物体相关联的一组像素的轨迹

MotionCtrl的两个模块

  • 首先,我们根据相机运动和物体运动的属性,构建了MotionCtrl的两个模块:相机运动控制模块(CMCM–Camera Motion Control Module)和物体运动控制模块(OMCM–Object Motion Control Module)。这两个模块与现有的视频生成模型协同工作
  • 在这项工作中,我们采用了VideoCrafter1 [5],这是LVDM [9]的改进版本,作为视频生成模型,并在整篇论文中将其称为LVDM(VideoCrafter[5],该模型在结构上类似于LVDM[9]。为了清晰起见,我们将本文中使用的视频模型称为LVDM)
    • CMCM:通过其时间变换器将一系列相机姿态按时间顺序融合到LVDM中,使生成的视频的全球运动符合给定的相机姿态
    • OMCM:将物体运动的信息空间融合到LVDM的卷积层中,以指示每个生成帧中物体的空间位置

训练MotionCtrl

  • 训练MotionCtrl需要带有完整注释的视频片段,包括标题、相机姿态和物体运动轨迹,这些目前不可用且难以构建
  • 我们可以独立训练CMCM和OMCM这两个模块
    • 从而将数据集简化为一个具有标题和相机姿态注释的视频数据集。我们首先引入了一个增强版的Realestate10k数据集,该数据集利用Blip2 [13]为Realestate10k [33]中的每个样本生成标题。这个具有标题和相机姿态注释的视频数据集被用来训练CMCM模块
    • 以及另一个具有标题和物体运动轨迹注释的视频数据集。我们使用ParticleSfM [31]中提出的运动分割算法合成的物体运动轨迹来增强WebVid [3]中的视频。因此,我们可以获得一个增强版的WebVid数据集来训练OMCM模块
  • 由于独立的适配器式训练策略和冻结的预训练LVDM,我们可以使用相机和物体运动中的一种或结合两种运动来控制视频生成,从而实现精细和灵活的运动控制。

贡献

  • 本文的主要贡献可以总结如下:
    • 我们引入了MotionCtrl,这是一种统一且灵活的视频生成运动控制器,旨在独立且有效地控制生成视频中的相机运动和物体运动,实现更精细和多样化的运动控制。
    • 我们根据相机运动、物体运动的固有属性以及不完美的训练数据,精心设计了MotionCtrl的架构和训练策略,有效地实现了视频生成中的精细运动控制。
    • 我们进行了广泛的实验,从定性和定量两个方面证明了MotionCtrl优于之前的相关方法。

相关工作

  • 一些努力旨在实现更通用的运动控制。例如,VideoComposer [25]通过额外的运动向量引入了运动控制,DragNUWA [28]提出了在初始图像、提供的轨迹和文本提示的条件下的视频生成。然而,这些方法中的运动控制相对广泛,无法在视频中精细地分离相机和物体运动。

  • 与这些工作不同,我们提出了MotionCtrl,这是一个统一且灵活的运动控制器,可以使用相机姿态和物体轨迹或结合这两种指导来控制生成的视频的运动。它为视频生成提供了更精细和灵活的控制。

方法

  • 考虑到相机运动的全局属性和物体运动的局部属性,CMCM与LVDM中的时间变换器进行交互,而OMCM与LVDM中的卷积层进行空间合作
  • 此外,我们采用多个训练步骤使MotionCtrl适应缺乏高质量视频剪辑、标题、摄像机姿态和物体运动轨迹的训练数据的情况

CMCM

  • 将CMCM模块插入到Temporal Transformer中,只插入到它的后两个全连接层和注意力层,这应该是因为相机运动和时间密切相关

OMCM

  • 将OMCM模块插入到卷积层,这应该是因为它与物体密切相关

训练策略与数据集构建

  • 为了通过文本提示生成视频并实现相机和物体运动的控制,训练数据集中的视频剪辑必须包含标题、摄像机姿态和物体运动轨迹的注释,然而,目前没有这样的综合细节的数据集可用
  • 为了解决这一挑战,我们提出了多步骤训练策略,并使用针对其特定运动控制需求的独特增广数据集对所提出的相机运动控制模块(CMCM)和物体运动控制模块(OMCM)进行训练。
    • 多步骤训练也就是因为一步训练的数据集没有,就先训练CMCM,训练完后,将其冻结,然后训练OMCM
CMCM
  • 学习相机运动控制模块(CMCM)需要一个包含带有标题、摄像机姿态但不包含物体运动轨迹的视频剪辑的训练数据集
  • 我们选择使用Realestate10K数据集 [33],在移除了无效的视频链接后,提供了62,992个视频剪辑,并伴随着各种摄像机姿态
    • 使用 这个数据集存在的两个问题:
      • 数据集的场景多样性有限,主要来自房地产视频
      • 它缺乏T2V模型所需的标题
    • 第一个问题解决方案:
      • 我们专门设计了CMCM模块,仅训练LVDM中的时间变换器的几个额外的MLP层和第二个自注意力模块,同时冻结所有其他参数,CMCM的训练主要集中在学习全局运动上,很少影响生成视频的内容
      • 我们使用Blip2 [13],一个图像描述算法,为Realestate10K中的每个视频剪辑生成标题
OMCM
  • 学习物体运动控制模块(OMCM)需要一个包含相应标题和物体运动轨迹的视频剪辑的数据集
  • 目前,还没有大规模的数据集将视频文本对与物体轨迹结合起来。为了解决这个问题,我们使用ParticleSfM [31]来生成物体运动轨迹,使用WebVid数据集 [3],该数据集广泛用于T2V生成
    • 尽管ParticleSfM很有效,但它并不高效,需要大约2分钟来处理一个32帧的视频
    • 为了解决密集轨迹的问题,我们使用从密集轨迹中采样的稀疏轨迹来训练OMCM。这些稀疏轨迹过于分散,不利于有效学习,因此我们使用高斯滤波器对其进行细化。
      • 在训练过程中,我们从合成的轨迹中随机选择n∈[1, N]轨迹(其中N是每个视频的最大轨迹数)
    • 在训练过程中,我们首先使用密集轨迹对OMCM进行训练,然后使用稀疏轨迹对其进行微调。
  • 在这个训练阶段,我们采用了已经与CMCM进行微调的LVDM模型。我们只训练OMCM层,而整个基础模型和CMCM保持冻结
  • 这种策略保证了OMCM在有限的数据集上增加了物体运动控制能力,同时最小化了对LVDM和CMCM的影响

实验

  • 我们的MotionCtrl基于LVDM [9]和训练权重由VideoCraft1 [5]提供

    • 它在分辨率为256 × 256的16帧序列上进行训练
    • 我们将最大轨迹数N设置为8
    • CMCM和OMCM都使用Adam优化器 [12]进行优化,批量大小为128,学习率为1×10 −4,在8个NVIDIA Tesla V100 GPU上进行训练
    • CMCM需要大约50,000次迭代才能收敛。OMCM首先在密集轨迹上进行20,000次迭代训练,然后使用稀疏轨迹进行额外的20,000次微调。
  • 我们将它与两种领先的方法进行了比较:AnimateDiff [8]和VideoComposer [25]

    • AnimateDiff使用8个独立的LoRA [11]模型来控制视频中的8个基本相机运动,例如平移和缩放
    • VideoComposer使用运动向量来操纵视频运动,没有区分摄像机和物体的运动
    • 虽然DragNUWA [28]与我们的研究相关,但其代码未公开,因此无法进行直接比较
      • 此外,DragNUWA仅通过从光学流中提取的轨迹来学习运动控制,无法精细地区分前景物体和背景的运动,限制了其精确控制摄像机和物体运动的能力
  • 摄像机和物体运动的结合。MotionCtrl不仅可以在单个视频中独立控制摄像机和物体的运动,还可以对两者进行集成控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448854.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

seo js转码工具

js转码工具作用 用于把js加密 如果不想让别人看到自己的js 代码就可以使用这个方法 js工具网址 https://tool.chinaz.com/js.aspx 效果

J.K.罗琳创作的《神奇动物》系列电影赏析

故事情节 《神奇动物在哪里》: 这部电影讲述了纽特斯卡曼德来到纽约的故事,他是一位收集和研究魔法动物的巫师。在纽约,他的一只神奇生物逃脱,并引发了一系列麻烦。与此同时,纽约巫师社会面临着黑暗力量的威胁&#x…

超大规模-近场

这里先了解基站到用户的,无RIS的近场模型 超大规模智能反射面辅助的近场移动通信研究 (论文题目) (期刊)无线电通信技术 系统:BS-RIS-UE,两个阶段都是近场 模型:球面波传播模型&…

在dpvs上实现ICMP的源进源出

目录 1. 缘起2. 源码分析3. 让ICMP也走源进源出1. 缘起 在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图: 具体来说,…

USB协议学习(三)大容量存储设备SCSI协议分析

笔者来简单介绍一下SCSI得协议命令 1、SCSI协议认识 SCSI:Small Computer System Interface,用于计算机外部设备得接口标准,定义了与外部设备得一套协议。SCSI标准协议族支持很多钟SCSI设备,像盘,打印机,扫…

论企业安全漏洞扫描的重要性

前言 随着信息技术的迅猛发展和互联网的广泛普及,网络安全问题日益凸显。在这个数字化的世界里,无论是企业还是个人,都面临着前所未有的安全威胁。安全漏洞,作为这些威胁的源头,常常被忽视或无法及时发现。 而安全漏洞…

提示并输入一个字符串,统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C++风格字符串完成

#include <iostream> #include <array> using namespace std;int main() {cout<<"请输入一个字符串"<<endl;//array<string,100> str;string str;getline(cin,str);int daxie0,xiaoxie0,num0,space0,other0;int lenstr.size();;for(in…

植物病害识别:YOLO水稻病害识别数据集(11000多张,yolo标注)

YOLO水稻病害识别数据集&#xff0c;包含叶斑病&#xff0c;褐斑病&#xff0c;细菌性枯萎病&#xff0c;东格鲁病毒病4个常见病害类别&#xff0c;共11000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c…

Flink 性能优化总结(反压优化篇)

反压的理解 Flink 中每个节点间的数据都以阻塞队列的方式传输&#xff0c;下游来不及消费导致队列被占满后&#xff0c;上游的生产也会被阻塞&#xff0c;最终导致数据源的摄入被阻塞。简单来说就是系统接收数据的速率远高于它处理数据的速率。 反压如果不能得到正确的处理&am…

软件测试面试需要准备什么?面试有什么技巧?看完面试轻松解决

前言 无论是在校招还是社会企业招聘中&#xff0c;应聘者总是要经过层层的考核才能被聘用。然而&#xff0c;在招聘时&#xff0c;设置的编程以及非技术面试问题&#xff0c;真的有必要吗&#xff1f;如此就能考核出一位开发者的真实水平&#xff1f; 说到底就是考验你的技术以…

分享10个ai人工智能ppt生成软件,一键轻松搞定PPT制作!

ai 人工智能发展至今&#xff0c;已经诞生了各式各样的 AI 软件&#xff0c;最常见的如 AI 写作软件、AI 绘画软件、AI 人工智能 ppt 生成器、AI 人工智能抠图软件等等。对每天要面对各类文档、演示文稿&#xff08;PPT&#xff09;的职场人来说&#xff0c;最被需要的 AI 软件…

javascript:void(0);用法及常见问题解析

在Web开发中&#xff0c;javascript:void(0);是一个经常被用到的代码片段&#xff0c;特别是在一些老式的网页中。这个代码片段的作用是执行一个空操作&#xff08;null operation&#xff09;&#xff0c;即不执行任何操作。它的主要用途是在JavaScript代码中创建一个空链接&a…

AHU 汇编 实验二

一、实验名称&#xff1a;实验二 不同寻址方式的灵活运用 二、实验内容&#xff1a;定义数组a[6]&#xff0c;用多种寻址方式访问对应元素&#xff0c;实现&#xff08;a[0]a[1]&#xff09;*(a[2]-a[3])/a[4],将结果保存在内存a[5]中&#xff0c;用debug查询结果。 实验过程&a…

代码随想录算法训练营第四十六天| 139.单词拆分、背包总结

文章目录 1.单词拆分[2.背包总结] 1.单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1…

c++ 开发环境 LNK1104: 无法打开文件“carve.lib” 已解决

别人分享&#xff0c; 和自己最近遇到问题一摸一样。以为没什么用的静态资源&#xff0c;结果 无法编译。 昨天安装配置了&#xff0c;结果今天早上打开电脑&#xff0c;所以dll的工程全部报错&#xff1a; 1>------ 已启动全部重新生成: 项目: Dll_test, 配置: Debug x64…

nginx禁止国外ip访问

1.安装geoip2扩展依赖 yum install libmaxminddb-devel -y 2.下载ngx_http_geoip2_module模块 https://github.com/leev/ngx_http_geoip2_module.git 3.编译安装 ./configure --add-module/datasdb/ngx_http_geoip2_module-3.4 4.下载最新数据库文件 模块安装成功后,还要…

LLM 推理优化

LLM 推理服务重点关注两个指标&#xff1a;吞吐量和时延&#xff1a; 吞吐量&#xff1a;主要从系统的角度来看&#xff0c;即系统在单位时间内能处理的 tokens 数量。计算方法为系统处理完成的 tokens个数除以对应耗时&#xff0c;其中 tokens 个数一般指输入序列和输出序列长…

CVE-2021-31440:eBPF verifier __reg_combine_64_into_32 边界更新错误

文章目录 前言漏洞分析构造 vuln reg 漏洞利用漏洞修复参考 前言 影响版本&#xff1a;Linux 5.7 ~ 5.11.20 8.8 编译选项&#xff1a;CONFIG_BPF_SYSCALL&#xff0c;config 所有带 BPF 字样的编译选项。General setup —> Choose SLAB allocator (SLUB (Unqueued Allocat…

C#请假与加班案例

请假余额表示一年当中可以请几天假。输入请假天数&#xff0c;点击请假按钮则减少假期余额。如果请假天数大于当前假期余额&#xff0c;则提示“假期余额不足”。输入加班天数&#xff0c;点击加班按钮则增加假期余额。 private void button1_Click(object sender, EventArgs e…

./ 相对路径与node程序的启动目录有关

node:internal/fs/sync:78 return binding.openSync( ^ Error: ENOENT: no such file or directory, open D:\前端的学习之路\项目\codeHub\keys\private_key.pem at Object.open (node:internal/fs/sync:78:18) at Object.openSync (node:fs:565:…