当前位置: 首页 > news >正文

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读

目录

一、概述

二、相关工作

三、前置知识

1、LVDM Introduction

2、LVDM Method

3、LVDM for Short Video Generation

4、Hierarchical LVDM for Long Video Generation

5、训练细节

6、推理过程

四、MotionCtrl

1、CMCM 

2、OMCM

3、训练策略

五、实验


一、概述

        MotionCtrl是一个统一和灵活的视频生成运动控制器可以独立控制相机运动和物体运动,解决了以往方法中要么只关注一种类型的运动,要么无法区分两者之间的差异性。

        以往的视频中的运动控制,如AnimateDiff、Gen-2、PikaLab主要通过独立的LoRA,或者引入额外的相机参数来触发相机运动控制。VideoComposer和DragNUWA补充了相机运动和物体运动两部分,但是缺乏明确的区别,无法实现精细多样化的运动控制。

        而MotionCtrl提供了三个优势:

(1)它可以有效且独立地控制相机和物体运动,实现细粒度调整和多样化的运动组合

(2)它使用相机姿态和轨迹作为运动条件,这不会影响物体的视觉外观

(3)它是一个相对通用的模型,可以适应各种相机姿态和轨迹,无需进一步微调

        精确的相机运动和物体运动控制存在两个问题:一考虑相机运动和物体运动的明显差异,由于相机运动和物体运动存在明显区别,相机运动是指整个场景在时间维度均进行全局变换,而物体运动涉及场景中特定对象在时间维度的移动,通常表示为物体相关的一组像素的轨迹。二由于现有数据集没有完整注释的视频片段,caption,相机姿态,物体运动轨迹。所以需要创建一个全面的数据集。

        是否可以先segment每一个物体,并对这一部分像素进行物体运动计算,在叠加到全局的运动轨迹上。

二、相关工作

        早期视频生成主要依赖GANs和VAEs,近期基本转变为扩散模型,或者依赖于已训练好的扩散模型。

        近期的可控视频生成领域,有一些方法参考特定模版学习运动,但受模版限制,另外通过引入额外的运动矢量来进行运动控制,以及通过基于初始图像和文本提示来生成视频,但不能精确分离相机运动和物体运动控制。

三、前置知识

1、LVDM Introduction

        LVDM应该是继VDM扩散模型第一次引入视频生成领域后,再次将隐式扩散模型引入视频生成,在此之前都是GANs的天下。

        LVDM通过提出视频潜在空间中操作的分层框架,可以使得模型生成超出训练长度的更长的视频,并且在短视频和长视频生成中领先当时的VDM和一众GANs模型,后续也应用到VideoCrafter和MotionCtrl模型中。

2、LVDM Method

        首先这个模型中可以分别实现无条件视频生成和有条件视频生成。

训练AE过程:

        首先使用一个轻量级的3D AutoEncoder来压缩视频,包括encoder和decoder,他们都是有多层3D 卷积构成。输入一段视频x_0 \in \mathbb{R} ^{H \times W \times L \times 3},先经过视频encoder得到潜在空间z_0=\varepsilon (x_0),其中z_0 \in \mathbb{R}^{h \times w \times l \times c} ,h=H/f_s,w=W/f_s,l=L/f_tf_s,f_t是空间和时间下采样因子。解码器D用于解码样本,(技术细节,为了确保自编码器是时间上等变的,所以所有3D 卷积都保证重复填充)。

        在训练过程中,单独训练AE模块,利用重建损失(MSE+LPIPS)和对抗性损失(消除像素级重建损失模糊)计算。

3、LVDM for Short Video Generation

          对于短视频的生成,就是类似VDM的结构。经过encoder后,特征不断加噪,并引入3Dunet中,然后最后一层进decoder。

3D U-Net architecture in VDM

4、Hierarchical LVDM for Long Video Generation

        上述框架用来生成短视频,长度受到训练所指定的frame决定,所以提出了一个分层的条件LVDM,通过自回归方式,依赖前一个token来生成下一个token,通过输入短视频,得到插帧的长视频。

        首先在通道维度添加了一个二进制掩码,来指定他是条件帧还是预测帧,也就是输入的短视频帧,还是预测的高斯噪音帧,并通过随机将不同二进制掩码设置为1或0,此时就得到不同的,这样可以训练扩散模型为无条件视频生成和有条件的视频预测。

        在这里要解释什么是条件帧,在论文中使用任意时间s,s是扩散时间步t内的一小部分时间,在训练中作为条件,z_0经过s时间的加噪后得到z_s,并与z_t根据掩码m进行加权,之后得到的特征输入到3D U-Net来计算噪声。

        具体来说,将二进制掩码m全都设置为0,那么覆盖在条件上就是无条件的扩散模型训练,当输入条件帧k帧,预测后面n-k帧,那么就是通过条件帧预测后面的帧,防止提前知道后面的帧。

        最后计算输入的\epsilon _t与预测的\tilde\epsilon _t的MSE Loss。

        分层LVDM的结构图如下,上面的解释应该都是Prediction 3D U-Net的解释。

        对于Interpolation 3D U-Net来说,改变是mask sampling部分,插值模型在每两个稀疏帧之间的中间帧将二进制掩码设置为0。

5、训练细节

        我们分别使用8和4的空间和时间下采样因子。我们首先训练一个3D AE,然后固定其权重,然后开始在短视频片段上训练无条件LVDM。之后,从无条件模型中分别微调Prediction 3D U-Net和Interpolation 3D U-Net。

6、推理过程

        首先输入条件利用短视频模型部分,得到短视频片段,之后再利用分层长视频模型部分,经过短视频加噪多轮丢入Prediction 3D U-Net,之后再将潜在空间丢入 Interpolation 3D U-Net,得到连续的潜在空间信息,最后接VideoDecoder输出连续视频帧。

四、MotionCtrl

        MotionCtrl框架扩展了LVDM中的去噪U-Net结构,并加入了相机运动控制模块CMCM和物体运动控制模块OMCM。其中CMCM模块通过将RT连接到Temporal Transformer部分的第二个自注意力机制(Temporal Transformer部分由两个自注意力模块构成),也就是Temporal Transformer部分的输入,并应用定制的轻量级全连接层来提取LVDM的相机姿态序列进行后续处理,OMCMC利用卷积层和降采样从Trajs中获得多尺度特征,并在空间通道上整合到LVDM的卷积层中,来指导物体的运动。

        另外直接给定一个文本提示,经过CLIP后转变为视频的5通道格式,引导LVDM从提示相对应的噪声中生成视频,这样相机姿态控制的RT引入时间层,控制相机移动,物体的运动由Trajs控制,引入卷积层。下图(a)中马沿着设定的轨迹移动,背景向着相机移动的反方向(向左)移动。

1、CMCM 

        CMCM(Camera Motion Control Module)相机运动控制模块。首先取一组相机姿态RT=\left \{ RT_0,RT_1,...RT_{L-1} \right \},其中由于旋转矩阵3*3,平移矩阵3*1,所以flatten后总维度就是3*3+3*1=12维,这也就是RT \in \boldsymbol{\mathbb{R}}^{L \times 12}

        另外U-Net每一个时间模块的第一个自注意力机制的输出就是y_t,之后看上面(b)图CMCM解释,经过rearrange+concat,然后接FC+Att2,得到输出。

2、OMCM

        OMCM(Object Motion Control Module)对象运动控制模块。

        轨迹解释:通过Trajs轨迹来控制生成的视频的物体运动,一般来说一个轨迹表示为一系列空间位置的序列\left \{ (x_0,y_0),(x_1,y_1),...,(x_{L-1},y_{L-1}) \right \},其中而x \in[0 ,\hat{W}],y \in[0 ,\hat{H}],表示x和y在轨迹图的尺寸范围内。另外为了表示速度,引入了u和v来表示两个方向的速度,因为帧与帧之间的时间固定,所以速度就表示为位移/帧时间,Trajs \in \mathbb{R}^{L \times \hat H \times \hat W \times 2}

        对于OMCM模块的解释:由多个卷积+降采样组成,并将这里面的特征输入到U-Net下采样层,以平衡生成视频的量化和物体运动控制能力。

3、训练策略

        为了通过文本提示生成视频时实现相机和物体运动的控制,训练数据集需要字幕、相机姿态、物体运动轨迹等。目前没有这么完整的数据集,所以引入了一种多步骤的训练策略。

        训练CMCM模块,只需要一个包含字幕和相机姿态标注的视频片段的训练数据集。采用了Realestate10K数据集,但存在场景多样性有限和缺乏字幕的问题。

        解决方法:

(1)采用了CMCM模块,冻结LVDM的大部分参数,但保留temporal transformer的第二个自注意力模块可训练,来保证原有LVDM的生成质量。由于temporal transformer主要集中于全局运动的学习,所以Realestate10K发散性小,不会影响LVDM的生成质量。

Ablation of Camera Motion Control

(2)对于字幕的问题,利用Blip2,为Realestate10K数据集生成字幕。

        训练OMCM模块,需要一个包含字幕和物体运动轨迹的视频剪辑数据集,但暂无有效的开源数据集。所以利用ParicleSfM来合成WebVid数据集中的物体运动轨迹,WebVid是一个配有字幕的大型视频数据集,用于T2V工作。ParicleSfM包含一个基于轨迹的运动分割模块,可以用于过滤出动态场景中影响相机轨迹产生的动态轨迹,利用这一模块合成了大约24.3w个视频运动物体轨迹。

        由于这个轨迹比较密集,所以做了后处理,随机采样(稀疏化)+高斯滤波(避免稀疏轨迹分散而无法有效训练)

         在OMCM训练过程中,LVDM和CMCM都提前进行了训练,并且冻结,之后训练OMCM。

五、实验

        该模块训练在16帧的序列,分辨率为256*256,模型建立在LVDM或者VideoCrafter1框架上。

        在模型评估过程中,对简单的轨迹(放大、缩小、平移、顺时针、逆时针)和复杂轨迹都进行了评估。

        另外对于相机运动轨迹部分,在复杂动作下(上图b),如果采用VideoComposer提取运动矢量模拟参考视频的相机运动,密集的运动矢量将无意间捕捉到物体的形状,比如训练数据集中Frame12中门的轮廓(b图一行第五个)会导致VideoComposer的埃菲尔铁塔生成出现几何错误(b图二行第五个),而MotionCtrl通过旋转平移矩阵引导,运动轨迹更加接近参考视频。 

        评估指标:FID(视觉质量)、FVD(时间一致性)、CLIPsim (与文本的语义相似度),CamMC(预测相机轨迹与GT之间的欧氏距离),ObjMC(预测目标轨迹与GT之间的欧氏距离)

        AnimateDiff、VideoCompose、MotionCtrl的量化比较。

       

        给定轨迹下的比较,VideoComposer还是存在偏差。(第四帧)

        在OMCM下对于是否采用密集轨迹、还是直接采用稀疏轨迹,或者密集轨迹下采样稀疏轨迹的比较。 

        对于目标如果出现多个的情况,也可以通过多个目标轨迹处理。

 

参考项目:MotionCtrl

相关文章:

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读

目录 一、概述 二、相关工作 三、前置知识 1、LVDM Introduction 2、LVDM Method 3、LVDM for Short Video Generation 4、Hierarchical LVDM for Long Video Generation 5、训练细节 6、推理过程 四、MotionCtrl 1、CMCM 2、OMCM 3、训练策略 五、实验 一、概述…...

LINUX线程操作

文章目录 线程的定义LINUX中的线程模型一对一模型多对一模型多对多模型 线程实现原理线程的状态新建状态(New)就绪状态(Runnable)运行状态(Running)阻塞状态(Blocked)死亡状态&#…...

在Lua中,Metatable元表如何操作?

Lua中的Metatable(元表)是一个强大的特性,它允许我们改变表(table)的行为。下面是对Lua中的Metatable元表的详细介绍,包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表,它用于…...

4D LUT: Learnable Context-Aware 4D LookupTable for Image Enhancement

摘要:图像增强旨在通过修饰色彩和色调来提高照片的审美视觉质量,是专业数码摄影的必备技术。 近年来,基于深度学习的图像增强算法取得了可喜的性能并越来越受欢迎。 然而,典型的努力尝试为所有像素的颜色转换构建统一的增强器。 它…...

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)

瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp) RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装 libdrmlibdrm-2.4.89 make 方式编译(cannot find -lcairo, 不推荐)下载源码编译编译错误: multiple definition of `nouveau debug‘错误cannot find -lcairo:…...

使用SuperMap制作地形图的详细教程

一、数据准备 本示例以山东为例,演示如何通过SuperMap iDesktopX制作一个好看的地形图。所有数据均来源于互联网公开数据,如有自己项目真实数据,可直接跳过数据下载进入下一步。 本示例所需数据包括: 数据类别 数据类型 DEM数据…...

PHP Array:精通数组操作

PHP Array:精通数组操作 PHP,作为一门流行的服务器端编程语言,提供了强大的数组处理能力。数组是PHP中非常灵活和强大的数据结构,它可以存储多个相同类型的值。在PHP中,数组不仅可以存储数字,还可以存储字…...

【使用命令配置java环境变量永久生效与脚本切换jdk版本】

java配置环境变量命令与脚本切换jdk版本 新建用户环境变量永久生效 setx JAVA8_HOME "D:\Java\jdk8" setx JAVA17_HOME "d:\Java\jdk-17" setx JAVA_HOME %JAVA8_HOME% setx CLASSPATH ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;"…...

STM32-笔记32-ESP8266作为服务端

esp8266作为服务器的时候,这时候网络助手以客户端的模式连接到esp8266,其中IP地址写的是esp8266作为服务器时的IP地址,可以使用ATCIFSR查询esp8266的ip地址,端口号默认写333。 当esp8266作为服务器的时候,需要完成哪些…...

RAG(Retrieval-Augmented Generation,检索增强生成)流程

目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...

【Python学习(六)——While、for、循环控制、指数爆炸】

Python学习(六)——While、for、循环控制、指数爆炸 本文介绍了While、for、循环控制、指数爆炸,仅作为本人学习时记录,感兴趣的初学者可以一起看看,欢迎评论区讨论,一起加油鸭~~~ 心中默念:Py…...

解释一下:运放的输入失调电流

输入失调电流 首先看基础部分:这就是同相比例放大器 按照理论计算,输入VIN=0时,输出VOUT应为0,对吧 仿真与理论差距较大,有200多毫伏的偏差,这就是输入偏置电流IBIAS引起的,接着看它的定义 同向和反向输入电流的平均值,也就是Ib1、Ib2求平均,即(Ib1+Ib2)/2 按照下面…...

力扣hot100——二分查找

35. 搜索插入位置 class Solution { public:int searchInsert(vector<int>& a, int x) {if (a[0] > x) return 0;int l 0, r a.size() - 1;while (l < r) {int mid (l r 1) / 2;if (a[mid] < x) l mid;else r mid - 1;}if (a[l] x) return l;else …...

PHP 使用集合 处理复杂数据 提升开发效率

在 PHP 中&#xff0c;集合&#xff08;Collections&#xff09;通常是通过数组或专门的集合类来实现的。 集合&#xff08;Collection&#xff09;是一种高级的数据结构&#xff0c;可以提供比普通数组更强大的操作和功能&#xff0c;特别是当你需要更复杂的数据处理时。 La…...

Unity 对Sprite或者UI使用模板测试扣洞

新建两个材质球&#xff1a; 选择如下材质 设置如下参数&#xff1a; 扣洞图片或者扣洞UI的材质球 Sprite或者UI的材质球 新建一个单独Hole的canvas&#xff0c;将SortOrder设置为0&#xff0c;并将原UI的canvans的SortOrder设置为1 对2DSprite则需要调整下方的参数 hole的O…...

unity学习3:如何从github下载开源的unity项目

目录 1 网上别人提供的一些github的unity项目 2 如何下载github上的开源项目呢&#xff1f; 2.1.0 下载工具 2.1.1 下载方法1 2.1.2 下载方法2&#xff08;适合内部项目&#xff09; 2.1.3 第1个项目 和第4项目 的比较 第1个项目 第2个项目 第3个项目 2.1.4 下载方法…...

PHP后执行php.exe -v命令报错并给出解决方案

文章目录 一、执行php.exe -v命令报错解决方案 一、执行php.exe -v命令报错 -PHP Warning: ‘C:\windows\SYSTEM32\VCRUNTIME140.dll’ 14.38 is not compatible with this PHP build linked with 14.41 in Unknown on line 0 解决方案 当使用PHP8.4.1时遇到VCRUNTIME140.dll…...

CDP集群安全指南-动态数据加密

[〇]关于本文 集群的动态数据加密主要指的是加密通过网络协议传输的数据&#xff0c;防止数据在传输的过程中被窃取。由于大数据涉及的主机及服务众多。你需要更具集群的实际环境来评估需要为哪些环节实施动态加密。 这里介绍一种通过Cloudera Manager 的Auto-TLS功能来为整个…...

【shell编程】报错信息:Undefined Variable(包含6种解决方法)

大家好&#xff0c;我是摇光~ 当Shell脚本报错“Undefined Variable”时&#xff0c;是未定义变量的意思。 以下是对每个可能原因及其对应详细解决方案的详细解释&#xff1a; 原因1&#xff1a;拼写错误 原因&#xff1a; 脚本中变量名的拼写在使用和定义时不一致。例如&…...

Dubbo扩展点加载机制

加载机制中已经存在的一些关键注解&#xff0c;如SPI、©Adaptive> ©Activateo然后介绍整个加载机制中最核心的ExtensionLoader的工作流程及实现原理。最后介绍扩展中使用的类动态编译的实 现原理。 Java SPI Java 5 中的服务提供商https://docs.oracle.com/jav…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...