AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成

AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256~1024任意分辨率生成

  • 学习前言
  • 项目特点
  • 生成效果
  • 相关地址汇总
    • 源码下载地址
  • CogVideoX-Fun详解
    • 技术储备
      • Diffusion Transformer (DiT)
      • Stable Diffusion 3
      • EasyAnimate-I2V
    • 算法细节
      • 算法组成
      • InPaint模型
      • 基于Token长度的模型训练
      • Resize 3D Embedding
  • 项目使用
    • 项目启动
    • 文生视频
    • 图生视频
    • 视频生视频

学习前言

这段时间正在训练EasyAnimateV4.5,发现总有一些问题解决不了,开始怀疑是自己的训练框架有问题。

恰逢清华开源了CogVideoX,这是个很优秀的文生视频模型,可惜没有图生视频,还固定了分辨率,于是试着将CogVideo修改到我们的框架中,发现其实效果还不错。
在这里插入图片描述

项目特点

  • 支持 图 和 文 生视频;
  • 支持 首尾图 生成视频
  • 最大支持720p 49帧视频生成;
  • 无限长视频生成;
  • 数据处理到训练完整pipeline代码开源

生成效果

CogVideoX-Fun的生成效果如下,分别支持图生视频和文生视频。与EasyAnimate类似,通过图生视频的能力,我们还可以进行视频续写,生成无限长视频。

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

相关地址汇总

源码下载地址

https://github.com/aigc-apps/CogVideoX-Fun

感谢大家的关注。

CogVideoX-Fun详解

技术储备

Diffusion Transformer (DiT)

DiT基于扩散模型,所以不免包含不断去噪的过程,如果是图生图的话,还有不断加噪的过程,此时离不开DDPM那张老图,如下:
在这里插入图片描述
DiT相比于DDPM,使用了更快的采样器,也使用了更大的分辨率,与Stable Diffusion一样使用了隐空间的扩散,但可能更偏研究性质一些,没有使用非常大的数据集进行预训练,只使用了imagenet进行预训练。

与Stable Diffusion不同的是,DiT的网络结构完全由Transformer组成,没有Unet中大量的上下采样,结构更为简单清晰。

Stable Diffusion 3

在2024年3月,Stability AI发布了Stable Diffusion 3,Stable Diffusion 3一个模型系列,参数量从 800M 到 8B 不等。相比于过去的Stable Diffusion,Stable Diffusion 3的生图质量更高,且更符合人类偏好。

Stable Diffusion 3做了多改进,比如文本信息注入的方式,DiT模型在最初引入文本时,通常使用Cross Attention的方法结合文本信息,如Pixart-α、hunyuan DiT等。Stable Diffusion 3通过Self-Attention引入文本信息。相比于Cross Attention,使用Self-Attention引入文本信息不仅节省了Cross Attention的参数量,还节省了Cross Attention的计算量。

Stable Diffusion 3还引入了RMS-Norm。,在每一个attention运算之前,对Q和K进行了RMS-Norm归一化,用于增强模型训练的稳定性。

同时使用了更大的VQGAN,VQGAN压缩得到的特征维度从原来的4维提升到16维等。
在这里插入图片描述

EasyAnimate-I2V

请添加图片描述
在EasyAnimate中,需要重建的部分重建的参考图分别通过VAE进行编码,上图黑色的部分代表需要重建的部分,白色的部分代表首图,然后和随机初始化的latent进行concat,假设我们期待生成一个384x672x144的视频,此时的初始latent就是4x36x48x84,需要重建的部分重建的参考图编码后也是4x36x48x84,三个向量concat到一起后便是12x36x48x84,传入DiT模型中进行噪声预测。

这样模型就可以知道视频的哪些部分需要重建,通过inpaint的方式实现图生视频。

算法细节

算法组成

我们使用了CogVideoX作为基础模型,并在此基础上重新训练。

在CogVideoX-FUN中,我们基于CogVideoX在大约1.2m的数据上进行了训练,支持图片与视频预测,支持像素值从512x512x49、768x768x49、1024x1024x49与不同纵横比的视频生成。另外,我们支持图像到视频的生成与视频到视频的重建。

  • 引入InPaint模型,实现图生视频功能,可以通过首尾图指定视频生成。
  • 基于Token长度的模型训练。达成不同大小多分辨率在同一模型中的实现。

InPaint模型

在这里插入图片描述
我们以CogVideoX作为基础结构,参考EasyAnimate进行图生视频的模型训练。

在进行视频生成的时候,将参考视频使用VAE进行encode,上图黑色的部分代表需要重建的部分,白色的部分代表首图,与噪声Latents一起堆叠后输入到Transformer中进行视频生成。

我们对被Mask的区域进行3D Resize,直接Resize到需要重建的视频的画布大小。

然后将Latent、Encode后的参考视频、被Mask的区域,concat后输入到DiT中进行噪声预测。获得最终的视频。

基于Token长度的模型训练

我们收集了大约高质量的1.2m数据进行CogVideoX-Fun的训练。

在进行训练时,我们根据不同Token长度,对视频进行缩放后进行训练。整个训练过程分为三个阶段,每个阶段的13312(对应512x512x49的视频),29952(对应768x768x49的视频),53248(对应1024x1024x49的视频)。

以CogVideoX-Fun-2B为例子,其中:

  • 13312阶段,Batch size为128,训练步数为7k
  • 29952阶段,Batch size为256,训练步数为6.5k。
  • 53248阶段,Batch size为128,训练步数为5k。

训练时我们采用高低分辨率结合训练,因此模型支持从512到1280任意分辨率的视频生成,以13312 token长度为例:

  • 在512x512分辨率下,视频帧数为49;
  • 在768x768分辨率下,视频帧数为21;
  • 在1024x1024分辨率下,视频帧数为9;
    这些分辨率与对应长度混合训练,模型可以完成不同大小分辨率的视频生成。

Resize 3D Embedding

在适配CogVideoX-2B到CogVideoX-Fun框架的途中,发现源码是以截断的方式去得到3D Embedding的,这样的方式只能适配单一分辨率,当分辨率发生变化时,Embedding也应当发生变化。
在这里插入图片描述
参考Pixart-Sigma,我们采用positional embeddings Interpolation对3D embedding进行Resize,positional embeddings Interpolation相比于直接生成cos sin的embedding更易收敛。

项目使用

项目启动

推荐在docker中使用CogVideoX-Fun:

# pull image
docker pull mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:cogvideox_fun

# enter image
docker run -it -p 7860:7860 --network host --gpus all --security-opt seccomp:unconfined --shm-size 200g mybigpai-public-registry.cn-beijing.cr.aliyuncs.com/easycv/torch_cuda:cogvideox_fun

# clone code
git clone https://github.com/aigc-apps/CogVideoX-Fun.git

# enter CogVideoX-Fun's dir
cd CogVideoX-Fun

# download weights
mkdir models/Diffusion_Transformer
mkdir models/Personalized_Model

wget https://pai-aigc-photog.oss-cn-hangzhou.aliyuncs.com/cogvideox_fun/Diffusion_Transformer/CogVideoX-Fun-2b-InP.tar.gz -O models/Diffusion_Transformer/CogVideoX-Fun-2b-InP.tar.gz

cd models/Diffusion_Transformer/
tar -xvf CogVideoX-Fun-2b-InP.tar.gz
cd ../../

python app.py

到这里已经可以打开gradio网站了。

文生视频

首先进入gradio网站。选择对应的预训练模型,如"models/Diffusion_Transformer/EasyAnimateV3-XL-2-InP-512x512"。然后在下方填写提示词。
请添加图片描述
然后调整视频高宽和生成帧数,最后进行生成;

图生视频

请添加图片描述

图生视频与文生视频有两个不同点:

  • 1、需要指定参考图;
  • 2、指定与参考图类似的高宽;

CogVideoX-Fun的ui已经提供了自适应的按钮Resize to the Start Image,打开后可以自动根据输入的首图调整高宽。
在这里插入图片描述

视频生视频

视频生视频与文生视频有两个不同点:

  • 1、需要指定参考视频;
  • 2、指定与参考视频类似的高宽;

CogVideoX-Fun的ui已经提供了自适应的按钮Resize to the Start Image,打开后可以自动根据输入的视频调整高宽。
请添加图片描述

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

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

相关文章

计算机出现msvcp140.dll丢失的6种解决方法,亲测有效

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行,给用户带来困扰。本文将总结6种解决msvcp140.dll丢失的方法,帮助大家轻松解决这个问题。 一&…

随机梯度下降的学习

梯度下降(Gradient-Descent) 在机器学习的旅途中,不可避免需要与它打交道,那么该如何初步理解它的用途呢? 好的,想象你在一个山谷中,想要找到最低点(山谷的底部)。你现…

如何使用 Bittly 为基于 HTTP 的 API 快速创建 UI 操作界面

在开发 Web 应用或服务时,通常会提供不同数量的 API 接口给客户端或其他第三方使用, 当 API 数量达到一定数量的时候,在处理接口间的调用链以及参数关系时就会变得异常麻烦。 在这种情况下便可通过 Bittly 的面板功能将这些 API 结构进行组装…

电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

5G智能工厂与物联数字孪生平台的融合应用,不仅为电容器制造业注入了新的活力,更为整个制造业的数字化转型树立了新的标杆。电子元件制造过程中,数字孪生平台通过实时监测生产线的各个环节,实现了生产流程的可视化监控。管理人员可…

es的封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

java 获取集合a比集合b多出来的对象元素

public class OrderListEntity {/*** deprecated 对象集合的处理* param aData 集合a* param bData 集合b* return 返回集合a比集合b多出来的部分, 通过id判断*/public static List<OrderListEntity> AHasMoreThanBData(List<OrderListEntity> aData, List<Ord…

AI日常绘画【国庆海报】:盛世迎华诞,Flux国庆节海报制作教程

大家好我是安琪&#xff01;&#xff01;&#xff01; 马上就要到祖国母亲的节日了&#xff0c;想想心里都美滋滋的&#xff0c;终于可以放松一下了。相信AI绘画关于国庆主题肯定也会精彩纷呈吧&#xff0c;今天和大家分享几组关于国庆海报的制作教程。 本文使用基于Flux的相关…

西安交大曹相湧、孟德宇教授团队最新成果┆HSIGene: 一个用于高光谱图像生成的基础模型(含详细视频解读)

目录 论文简介 1. 团队介绍 2. 研究背景及主要贡献 3. 方法 4. 实验及结果 5. 总结与展望 6. 论文介绍视频 参考文献 论文简介 本推文详细介绍了一篇西安交通大学孟德宇教授与曹相湧副教授团队最新论文《HSIGene: A Foundation Model For Hyperspectral Image Gener…

微信小程序报名表怎么弄_轻松打造高效便捷的互动新体验

在当今数字化时代&#xff0c;便捷与高效成为了我们日常生活中不可或缺的一部分。无论是企业活动、社团招新&#xff0c;还是日常办公统计&#xff0c;一个优秀的报名工具都能极大地提升我们的工作效率和用户体验。今天&#xff0c;就让我们一起探索如何通过微信小程序报名表&a…

Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长

作者&#xff1a;Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域&#xff0c;众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly&#xff0c;作为应对这些挑战的全方位解决方案&#xff0c;其中创新性的 Quest&#xff08;任务…

如何确定SAP 某些凭证或者单号的号码编码范围的 OBJECT 是什么?

在SAP的运维或者项目实施中&#xff0c;有时会如何确定SAP 某些凭证或者单号的号码 OBJECT 是什么&#xff1f; 一般一下常用的可以通过事务代码 例如&#xff1a; XDN1 Create Number Ranges for Customer Accounts&#xff0c;定义客户编码FBN1查看维护会计凭证号范围 我…

Java开发:文件上传和下载

一、文件上传 使用MultipartFile 类型接收参数&#xff1b; 调用上传有两种方式&#xff1a; 方式一&#xff1a;使用curl命令 curl -F "file/data/filename.txt" http://localhost:8080/upload --verbose方式二&#xff1a;使用html&#xff0c;写一个form表单&…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21 1. AIvril: AI-Driven RTL Generation With Verification In-The-Loop Authors: Mubashir ul Islam, Humza Sami, Pierre-Emmanuel Gaillardon, and Valerio Tenace AIVRIL: 人工智能驱动的RTL生成与验证内…

问题:机器字长为n位的二进制数可以用补码来表示()个不同的有符号定点整数。

一、概念 概念&#xff1a;无论原码、反码、补码&#xff0c;n位二进制数可以表示2^n个数值 二、从范围证明 有符号的情况下&#xff0c;表格如下&#xff1a; 其中&#xff0c;原码、反码含有-0、0 &#xff0c; 而补码不划分0 由此&#xff0c;可知&#xff1a; ① 原码…

Pygame中Sprite实现逃亡游戏3

在《Pygame中Sprite实现逃亡游戏2》中实现了飞龙和飞火的显示。接下来实现玩家跳跃效果&#xff0c;如图1所示。 图1 玩家跳跃效果 1 按键响应 当玩家按下键盘中空格按键后&#xff0c;游戏中的玩家就会跳跃&#xff0c;用于躲避飞火。在while True循环判断按键的代码中&…

使用SoapUI、Postman工具调用Webservice方法

SoapUI工具更适合调用Webservice使用。 1.使用SoapUI工具调用Webservice 创建“New SOAP Project” 自行定义一个项目名称&#xff0c;输入wsdl地址&#xff1a; 在左侧列表找到方法名&#xff0c;双击“Request 1”, 在请求数据中&#xff0c;添加对应的参数&#xff0c;然…

ESP8266/01s模块烧录MQTT AT固件篇

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) 地址&#xff1a; &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 乐鑫ESP8266/安信可…

Linux-L12-更改文件的拥有者

更改文件的拥有者 背景改变单个文件的拥有者改变目录及其子目录和文件的拥有者&#xff1a;改变文件的拥有组&#xff1a;同时改变文件的拥有者和拥有组&#xff1a;使用引用文件的拥有者和组 背景 文件被更改了无法访问&#xff0c;总是显示access deny… 在Linux系统中&…

await命令使用注意点

第一点&#xff0c;前面已经说过&#xff0c;await 命令后面的 Promise 对象&#xff0c;运行结果可能是 rejected&#xff0c;所以最好把 await 命令放在 try...catch 代码块中 第二点&#xff0c;多个 await 命令后面的异步操作&#xff0c;如果不存在继发关系&#xff0c;最…