Latte:一个类似Sora的开源视频生成项目

前段时间OpenAI发布的Sora引起了巨大的轰动,最长可达1分钟的高清连贯视频生成能力秒杀了一众视频生成玩家。因为Sora没有公开发布,网上对Sora的解读翻来覆去就那么多,我也不想像复读机一样再重复一遍了。

本文给大家介绍一个类似Sora的视频生成项目:Latte。为什么说它类似Sora呢?这个项目的全称是:Latent Diffusion Transformer for Video Generation(用于视频生成的潜在扩散转换器),对Sora生成技术有所了解的同学看到 Diffusion 和 Transformer 这两个单词应该就明白我在说什么了,Sora也同样使用了这两种技术。而且 Sora 和 Latte 都声称参考了DiT(Scalable Diffusion Models with Transformers)项目,它们的技术路线应该都是差不多的。最重要的是 Latte 是开源的,可以自己部署着玩,这篇文章就给大家介绍下 Latte 的原理和使用方法。

对 Diffusion 和 Transformer 这两种技术完全没概念的同学可以看我之前写的一篇科普文章:AI视频生成的重大突破:OpenAI的梦幻制造机Sora

效果演示

下图是官网的文生视频效果展示。注意实际生成时也需要抽卡,有时候效果也是一言难尽。

Latte介绍

Latte(Latent Diffusion Transformer)是一种用于视频生成的创新模型。它首先通过预训练的变分自编码器(VAE)将输入视频编码为潜在空间中的特征,并从中提取出时空令牌(Token)。然后应用一系列 Transformer 块对这些令牌进行建模,以捕捉视频数据分布。由于视频具有复杂的时空信息且高分辨率帧内包含大量细节,Latte设计了四种不同的高效Transformer变体,这四种变围绕如何有效地利用Transformer网络捕获视频数据中的时空分布信息展开,各自探索了不同的空间-时间分解方法、信息融合策略以及计算效率优化方案。

  • 变体1:该变体的Transformer主干结构包括空间Transformer块和时间Transformer块。空间Transformer块专注于在同一时间索引下的视频令牌之间捕捉纯空间信息,通过关注相同时间步内的像素或区域之间的关联性来提取空间特征。而时间Transformer块则采用“交错融合”的方式处理跨时间维度的信息,以捕捉不同时间帧间的变化和动态内容。
  • 变体2:不同于变体1中的即时融合策略,变体2可能采用了“晚期融合”机制,即先独立处理空间和时间维度上的信息,在后续阶段再将两者合并,以另一种方式整合时空上下文。
  • 变体3:此变体主要聚焦于对Transformer内部多头注意力模块进行分解。它首先仅在空间维度上计算自注意力,随后再在时间维度上执行自注意力计算。这样设计的目的是让每个Transformer块能够先后分别从空间和时间角度理解输入序列,并最终综合捕获并建模视频的时空信息。
  • 变体4:变体4将多头注意力(MHA)分解为两个组件,利用不同的组件分别处理空间和时间维度上的令牌。在Transformer主干结构之后,通过采用标准线性解码器以及重塑操作,对视频令牌序列进行解码,从而得出预测噪声和预测协方差。。

在实际应用时,Latte首先将视频帧序列转换为一系列令牌,并利用上述某种变体中对应的 Transformer 结构对这些令牌进行编码和解码。具体来说,在生成阶段,模型会依据学习到的反向扩散过程,在潜在空间中逐步还原出低噪声的视频帧表示,并最终重构为连续且逼真的视频内容。

实验结果显示,Latte在FaceForensics、SkyTimelapse、UCF101和Taichi-HD这四个标准视频生成数据集上,Latte能够生成逼真的、具有连贯时序内容的视频,并在Fréchet视频距离(FVD)、Fréchet Inception Distance (FID)和Inception Score等指标上达到了最先进的性能水平。

此外,Latte还被扩展到文本到视频生成任务(T2V),其表现与当前的T2V模型相当。不过可能模型训练的数据还不够,生成的视频效果还有很大提升空间。

使用Latte

这里主要介绍使用Latte进行推理的方法,有两种方式,一是直接使用我制作的AutoDL镜像,二是手动一步步安装。注意Latte预训练的模型只能生成2秒的视频,更长的视频需要自己训练模型,训练视频模型比较耗费资源,需要的直接看Github上的说明就行了:GitHub - Vchitect/Latte: Latte: Latent Diffusion Transformer for Video Generation.。

使用AutoDL镜像

AutoDL访问地址:https://www.autodl.com,AutoDL的注册和使用方法可以看这篇文章:

1、创建服务器实例时镜像选择:Vchitect/Latte/yinghuoai-latte 的最新版本。我已经在3090、4090、3080*2等显卡型号上测试通过,其它型号可能问题也不大。

2、打开服务器实例的 JupyterLab,进入操作环境。

操作环境如下图所示,左侧是文件及目录,我编写了一个生成器的页面,可以在其中直接执行相关视频生成命令,目前可以生成四种固定类型的视频,以及通过文本自由生成视频。

3、点击选中下方的代码单元格后,再点击菜单栏中的“箭头按钮”即可执行对应的生成任务。

注意需要先执行“初始化”命令,后边的视频生成任务随便执行。

任务执行进度如下,执行可能较慢,请耐心等待!

日志中显示了生成的视频位置。

可在左侧目录中找到,然后在对应的文件上右键下载。

手动安装

手动安装步骤比较多,请大家跟紧了。

安装conda

因为需要安装大量的python包,为了方便,我们这里使用conda包管理,没安装的同学先安装:Installing Miniconda — Anaconda documentation

如果已经安装过,可以通过命令升级到最新版本:

conda update -n base -c defaults conda

下载Latte

代码地址:GitHub - maxin-cn/Latte: The official implementation of Latte: Latent Diffusion Transformer for Video Generation.

通过git安装的方法:

git clone https://github.com/maxin-cn/Latte.git

修改依赖包的版本

Latte对python和相关包的版本依赖比较重,实测需要调整下官方提供的环境依赖文件。

在Latte根目录中找到 environment.yml 文件,完整修改如下:

name: latte
channels:- pytorch- nvidia
dependencies:- python = 3.10.8- pytorch = 2.0.0- torchvision- pytorch-cuda=11.7- pip- pip:- timm- diffusers[torch]==0.24.0- accelerate- tensorboard- einops- transformers- av- scikit-image- decord- pandas- imageio-ffmpeg

修改的就是下图中这三个:

创建Python虚拟环境

使用下边的命令,实测还需要再补充安装一些python包。

# 进入Latte目录
cd Latte
# 清理latte虚拟环境
conda remove --name latte --all
# 创建latte虚拟环境
conda env create -f environment.yml
# 激活latte虚拟环境
source activate latte# 在latte虚拟环境中补充安装一些python包
pip install omegaconf
pip install SentencePiece
pip install beautifulsoup4
pip install ftfy
pip install codewithgpu

下载预训练模型

预训练模型是Latte官方提前训练好的模型,我们可以直接使用。

建议从huggingface下载:

https://huggingface.co/maxin-cn/Latte/tree/main

或者从这个国内镜像站:

maxin-cn/Latte · HF Mirror

生成视频

Latte项目中内置了几个脚本,可以帮我们快速生成视频。

sample 目录下这几个sh文件就是,可以在shell或者命令行程序中执行它们。

我们看一个 t2v.sh:

export CUDA_VISIBLE_DEVICES=5
python sample/sample_t2v.py --config configs/t2v/t2v_sample.yaml

这里首先通过export设置使用哪个显卡,如果只有1个,请设置为0。

然后就是运行python程序生成视频的命令,注意后边的配置文件,官方也提供了示例,就在config目录下,需要根据实际情况进行修改。

  • ckpt:使用的模型文件路径,请修改“/path/to”为上一步下载模型的本地保存目录。
  • save_img_path:视频保存路径。
  • pretrained_model_path:文本生成视频专用的一些模型,请修改“/path/to”为上一步下载模型的本地保存目录。

其它参数基本不需要调整了,当然可以改改试试。


以上就是本文的主要内容了,如有兴趣欢迎讨论交流。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最简单的基于 FFmpeg 的 AVDevice 例子(屏幕录制)

最简单的基于 FFmpeg 的 AVDevice 例子(屏幕录制) 最简单的基于 FFmpeg 的 AVDevice 例子(屏幕录制)简介libavdevice 使用抓屏方法gdigrabdshow 源程序结果工程文件下载参考链接 最简单的基于 FFmpeg 的 AVDevice 例子&#xff08…

ASUS华硕天选2锐龙版笔记本电脑FA506ICB/FA706IC原装出厂Windows11系统,预装OEM系统恢复安装开箱状态

链接:https://pan.baidu.com/s/122iHHEOtNUu4azhVPnxNuA?pwdsqk7 提取码:sqk7 适用型号: FA506IM、FA506IE、FA506IC、FA506IHR FA506IR、FA506IHRB、FA506ICB、FA506IEB FA706IM、FA706IE、FA706IC、FA706IHR FA706IR、FA706IHRB、F…

CSS的浮动属性,微信web开发

面试前的准备 在这部分,我将详细讲解面试前我们需要做哪些方面的工作,以保证我们在面试过程中更加顺利。 准备一份漂亮的简历 一份漂亮的简历就是你进入大厂的敲门砖。 网上有很多教程教大家如何写出一份漂亮的简历,这里我就不做重复劳动了…

开源模型应用落地-工具使用篇-Ollama(六)

一、前言 在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,都想尝试一下。但是,实际上要入门AI技术的门槛非常高。除了需要高端设备,还需要面临复杂的部署和安装过程,这让很多人望而却步。不过,随着…

LiveNVR监控流媒体Onvif/RTSP功能-视频广场点击在线或离线时展示状态记录快速查看通道离线原因

LiveNVR视频广场点击在线或离线时展示状态记录快速查看通道离线原因 1、状态记录1.1、点击在线查看1.2、点击离线查看 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、状态记录 1.1、点击在线查看 可以点击视频广场页面中, 在线 两个字查看状态记录 1.2、点击离线查…

Thinkphp5.1中,将数组赋值给js使用

一、例如Thinkphp5.1中的的代码是这样的 $data [status > 1,msg > 加载成功,data > [id > 1,username > 小洪帽,] ];$this->assign(data,$data);二、JS代码接收PHP中的数组 注意 <> 符号是不需要放引号的。 let arr <?json_encode($data)?>…

【Godot4自学手册】第二十节增加游戏的打击感,镜头震颤、冻结帧和死亡特效

这节我主要学习增加游戏的打击感。我们通过镜头震颤、冻结帧、增加攻击点特效&#xff0c;增加死亡。开始了。 一、添加攻击点特效 增加攻击点特效就是&#xff0c;在攻击敌人时&#xff0c;会在敌人受击点显示一个受击动画。 1.添加动画。 第一步先做个受击点动画。切换到…

交叉编译qt5.14.2

qt源码下载地址&#xff1a;qt-everywhere-src-5.14.2.tar.xz 1.修改qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-arm-gnueabi-g/qmake.conf文件&#xff1a; # # qmake configuration for building with arm-linux-gnueabi-g #MAKEFILE_GENERATOR UNIX CONFIG …

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…

STM32CubeIDE基础学习-基础外设初始化配置

STM32CubeIDE基础学习-基础外设初始化配置步骤 前言 前面的文章介绍了基础工程的创建步骤&#xff0c;这篇文章就接着在基础工程的基础上来配置相关外设了&#xff0c;下面以STM32F103C8T6的主芯片为例进行简单配置。 基础工程创建步骤回顾 具体的配置步骤流程如下&#xff1…

【Linux】访问文件的本质|文件描述符|文件重定向

文章目录 文件的结构文件描述符标准输入输出文件描述符的规则 文件重定向输出重定向(对应符号>)echo的输出重定向 输入重定向&#xff08;对应符号<&#xff09;追加重定向&#xff08;对应符号‘>>’&#xff09;实现文件重定向的函数dup2()参数测试 前言&#xf…

could not publish server configuration for tomcat at localhost

1&#xff0c;报错信息如图&#xff1a; 2&#xff0c;找到servers双击&#xff0c;选择Modules&#xff0c;如果有两个webModules ,remove一个&#xff0c; 3&#xff0c;如果重启还是报错&#xff0c;干脆两个都remove&#xff0c;双击tomcat服务add And Remove重新添加

【Python】深度学习基础知识——梯度下降详解和示例

尽管梯度下降&#xff08;gradient descent&#xff09;很少直接用于深度学习&#xff0c;但它是随机梯度下降算法的基础&#xff0c;也是很多问题的来源&#xff0c;如由于学习率过大&#xff0c;优化问题可能会发散&#xff0c;这种现象早已在梯度下降中出现。本文通过原理和…

Docker知识点总结

二、Docker基本命令&#xff1a; Docker支持CentOs 6 及以后的版本; CentOs7系统可以直接通过yum进行安装&#xff0c;安装前可以 1、查看一下系统是否已经安装了Docker: yum list installed | grep docker 2、安装docker&#xff1a; yum install docker -y -y 表示自动确认…

flutter旋转动画,算法题+JVM+自定义View

在很多的博客或者书上&#xff0c;说有三种&#xff0c;除了上述的两种以外&#xff0c;还有一种是实现Callable接口。但是这种并不是&#xff0c;因为&#xff0c;我们检查JDK中Thread的源码&#xff0c;看它的注释&#xff1a; There are two ways to create a new thread o…

Linux操作系统的vim常用命令和vim 键盘图

在vi编辑器的命令模式下&#xff0c;命令的组成格式是&#xff1a;nnc。其中&#xff0c;字符c是命令&#xff0c;nn是整数值&#xff0c;它表示该命令将重复执行nn次&#xff0c;如果不给出重复次数的nn值&#xff0c;则命令将只执行一次。例如&#xff0c;在命令模式下按j键表…

Fuyu-8B A Multimodal Architecture for AI Agents

Fuyu-8B: A Multimodal Architecture for AI Agents Blog: https://www.adept.ai/blog/fuyu-8b TL; DR&#xff1a;无视觉编码器和 adapter&#xff0c;纯解码器结构的多模态大模型。 Adept 是一家做 Copilot 创业的公司&#xff0c;要想高效地帮助用户&#xff0c;必须要准确…

【Linux网络】再谈 “协议“

目录 再谈 "协议" 结构化数据的传输 序列化和反序列化 网络版计算器 封装套接字操作 服务端代码 服务进程执行例程 启动网络版服务端 协议定制 客户端代码 代码测试 使用JSON进行序列化与反序列化 我们程序员写的一个个解决我们实际问题&#xff0c;满…

新品发布会媒体邀请,邀约记者现场报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 新品发布会媒体邀请及记者现场报道邀约流程&#xff1a; 一、策划准备 明确新品发布会时间、地点和主题。 制定媒体邀请计划&#xff0c;确定目标媒体。 二、邀请媒体 向目标媒体发送…

CSS的三种定位,响应式web开发项目教程

标准文档流 文档流&#xff1a;指的是元素排版布局过程中 戳这里领取完整开源项目&#xff1a;【一线大厂前端面试题解析核心总结学习笔记Web真实项目实战最新讲解视频】 &#xff0c;元素会默认自动从左往右&#xff0c;从上往下的流式排列方式。并最终窗体自上而下分成一行行…