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

news2024/11/15 7:23:26

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.coloradmin.cn/o/2153736.html

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

相关文章

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值,不停计数。计数值小于输出比较寄存器时输出一种电平,大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置,可以修改计数器计数的速度 再加上修改自动重装载值&…

Spring:统一结果私有属性造成的前端无法访问异常报错问题

用户未填写任何评价 1.问题复现 (1)看一段代码 controller: import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…

电脑网络怎么弄动态ip :步骤详解与优势探讨

在当今的数字化时代,网络连接已成为我们日常生活和工作中不可或缺的一部分。对于大多数用户而言,动态IP地址是一种便捷且常用的网络配置方式,它允许设备在每次连接到网络时自动获取一个新的IP地址。这种设置不仅简化了网络管理,还…

毕业论文写作3步搞定!分享5款AI写毕业论文的软件

毕业论文写作是一项既重要又具挑战性的任务,尤其对于即将毕业的学生来说。为了帮助大家更高效地完成这一过程,我将分享5款AI写毕业论文的软件,并重点推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款功能强大且全面的AI…

数据集 InterHand2.6M 双手交互 三维手势建模 >> DataBall

数据集 InterHand2.6M 双手交互 三维手势建模 人工智能 深度学习 >> DataBall 数据集 InterHand2.6M,双手/单手交互 ---------------------------------------------------------------------------------------------------------- Train set * Train (H):…

深耕电通二十年,崔光荣升电通中国首席执行官

电通今日宣布,任命拥有二十年深厚电通工作经验的杰出行业领袖崔光(Guang Cui)为电通中国首席执行官,该任命自2024年9月27日起生效。崔光自2004年加入电通以来,从策略规划岗位逐步成长为公司的核心领导者,这也是他职业生涯中的第9次…

MFC -文件类控件

前言 各位师傅大家好,我是qmx_07,今天给大家讲解MFC中的文件类 MFC文件类 在MFC中,CFILE 是基本的文件操作类,提供了读取、写入、打开、关闭等操作方法主要成员函数:Open(用于打开文件,设置模式 例如 只读 只写 读…

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

深入解析:HTTP 和 HTTPS 的区别

网络安全问题正变得日益重要,而 HTTP 与 HTTPS 对用户数据的保护十分关键。本文将深入探讨这两种协议的特点、工作原理,以及保证数据安全的 HTTPS 为何变得至关重要。 认识 HTTP 与 HTTPS HTTP 的工作原理 HTTP,全称超文本传输协议&#xf…

密码学---常见的其他密码

✨费纳姆密码:加解密都需要密钥,以二进制形式表示的密码。(密钥多是一次性的,称位一次性密码本) 加密过程: char_num {A: 1000001, B: 1000010, C: 1000011, D: 1000100,E: 1000101, F: 1000110, G: 100…

索引设计的5个原则

索引设计的5个原则 💖The Begin💖点点关注,收藏不迷路💖 索引是数据库优化的利器,但设计时要遵循几个核心原则: 高区分度:选择区分度高的列作为索引,避免低区分度列(如性…

基于SpringBoot+Vue的考研百科网站系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…

C#基础(15)选择排序

前言 上一节中我们已经学习了第一个算法:冒泡算法,相信你也有足够的自信继续学习更多的算法。 今天我们就来讲解又一个排序相关的算法:选择排序。 时间复杂度 在进行今天的排序算法讲解之前,我们先补充一个知识点&#xff1a…

借10万块,年化利息明明是3.8%,为啥就变成了2.07%?

今天咱们来聊一聊贷款的奥秘,特别是那个令人爱恨交织的年利率。听起来直观得很,3.8%就像是每年给银行支付贷款总额的3.8%作为利息,但实际上,这里面的学问挺深的。有时候,名义上的3.8%年化,最终一算&#xf…

MATLAB智能优化算法-学习笔记(3)——大规模邻域搜索算法求解旅行商问题【过程+代码】

一、问题描述 旅行商问题(TSP, Traveling Salesman Problem)是组合优化中的经典问题之一。给定一组城市和每对城市之间的距离,要求找到一条最短的路径,使旅行商从某个城市出发,访问每个城市一次并最终回到出发点。TSP问题广泛应用于物流配送、工厂调度、芯片制造等领域。…

RK3588/RK3588s运行yolov8达到27ms

前言 Hello,小伙伴们~~我最近做了一个比较有意思的东西,想起来也好久没有写博客了,就记录一下吧。希望和大家一起学习,一起进步! 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关…

DataGrip远程连接Hive

学会用datagrip远程操作hive 连接前提条件: 注意:mysql是否是开启状态 启动hadoop集群 start-all.sh 1、启动hiveserver2服务 nohup hiveserver2 >> /usr/local/soft/hive-3.1.3/hiveserver2.log 2>&1 & 2、beeline连接 beelin…

上海市高等学校信息技术水平考试 C程序设计(2021A场)全解

2e-1 为 1.0^(-1)*2 在顺序查找法中,如果要从n个学生中找到某个特定的学生信息,最坏的情况是这个学生是最后一个被比较的,这时需要比较n次。但是,如果学生是均匀分布的,那么平均来说,你会在列表的中间找到这…

stm32单片机个人学习笔记5(OLED调试工具)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

校园场景物体检测系统源码分享

校园场景物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…