最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》

论文地址:2410.05954icon-default.png?t=O83Ahttps://arxiv.org/pdf/2410.05954

项目地址:

jy0205/Pyramid-Flow: 用于高效视频生成建模的金字塔流匹配代码icon-default.png?t=O83Ahttps://github.com/jy0205/Pyramid-Flow

论文提出了一种新的视频生成模型,通过金字塔流匹配算法(Pyramidal Flow Matching),有效降低了视频生成的计算复杂度。该方法通过在不同分辨率的金字塔阶段之间进行流匹配,实现了从噪声到数据的生成过程,并通过单一的Diffusion Transformer(DiT)进行端到端优化。

摘要详述

论文提出了一种高效的视频生成建模方法,称为金字塔流匹配,旨在通过降低计算复杂度来优化视频生成过程。该方法避免了直接在全分辨率下进行训练,而是将视频生成过程分解为多个在不同分辨率下运行的金字塔阶段,仅在最终阶段达到全分辨率。这种方法的主要优势包括:

  1. 连续性:不同金字塔阶段的生成轨迹相互链接,后续阶段继续从前一阶段生成,避免了每个阶段从纯噪声重新生成的需要。

  2. 统一模型:与为每个图像金字塔使用独立模型不同,金字塔流匹配算法将它们集成到一个统一的模型中,通过端到端优化实现更优雅的实现,并大幅加快训练速度。

在全分辨率下,在非常嘈杂的潜在值上花费大量计算。(b) 我们的方法利用流动匹配的 f 灵活性在不同分辨率的潜在变量之间进行插值。这允许以更好的计算效率同时生成和解压缩视觉内容。请注意,黑色箭头表示降噪轨迹,蓝色箭头表示时间条件。

方法详述

空间金字塔图示。(a) 金字塔流分为多个阶段,每个阶段都从像素化和嘈杂的起点到无像素化和更清晰的结果。(b) 在推理过程中,我们在跨阶段的跳跃点添加校正噪声,以确保概率的连续性

1. 金字塔流匹配 (Pyramidal Flow Matching)

论文提出了一个新颖的视频生成框架,称为金字塔流匹配,它通过将视频生成轨迹重新解释为不同尺度的压缩表示的金字塔阶段来解决视频生成中的高时空复杂性问题。具体来说,该方法只在最终阶段以全分辨率运行,而在早期阶段则在更低分辨率下运行,从而减少冗余计算。

  • 流的构建:在金字塔流中,每个阶段都从带有噪声的像素化(压缩)潜在表示开始,到无像素化(解压缩)且更清晰的潜在表示结束。通过这种方式,只有最后一个阶段在全分辨率下执行,而大多数阶段在更低分辨率下执行,减少了计算量。

  • 统一训练:为了统一不同阶段的建模,论文通过在不同噪声水平和分辨率之间进行插值来构建概率路径。这允许从低分辨率的噪声潜在表示生成更清晰、细节更丰富的高分辨率结果。

  • 推理中的重噪声:在推理过程中,需要在不同分辨率的金字塔阶段之间的跳跃点仔细处理,以确保概率路径的连续性。为此,论文提出了一种添加校正高斯噪声的方法,以匹配不同阶段之间的分布。

2. 空间金字塔 (Spatial Pyramid)

  • 流的分段:空间金字塔流被分为多个阶段,每个阶段从像素化且带噪声的起点到无像素化且更清晰的结果。每个阶段的流遵循类似的公式,插值在像素化(压缩)和更带噪声的潜在表示与无像素化(解压缩)且更清晰的潜在表示之间。

  • 训练和推理:在训练阶段,通过插值不同分辨率的潜在表示来构建金字塔流。在推理阶段,每个阶段的输出通过添加校正高斯噪声重新噪声化,以维持连续性。

3. 时间金字塔 (Temporal Pyramid)

  • 视频的时间复杂性:视频因其时间长度而呈现显著的挑战。现有的全序列扩散方法同时生成所有视频帧,限制了固定长度的生成。与之相对,自回归视频生成范式支持在推理期间灵活长度的生成。

  • 压缩历史条件:考虑到全分辨率历史条件中的高冗余,论文提出使用压缩的、低分辨率的历史进行自回归视频生成。这显著减少了视频生成预训练的计算和内存开销。

图 3:时间金字塔图示。(a) 在每个金字塔阶段,生成都以压缩的、低分辨率的历史记录为条件,以提高自回归模型的训练效率,如行所示。(b) 设计了一种兼容的位置编码方案,该方案在空间金字塔中外推,但在时间金字塔中插值,以允许条件的空间对齐

实验

 

 复现

复现了两种模式,一种为web ui 一种为推理,

1、下载及环境安装

git clone https://github.com/jy0205/Pyramid-Flow
cd Pyramid-Flow# create env using conda
conda create -n pyramid python==3.8.10
conda activate pyramid
pip install -r requirements.txt

其实环境不一定一模一样,我用的之前的环境,但是diffusion 和transformer最好和requirement一样,如果出现找不到pyramid模块之类的报错,检查版本。

2、下载权重

新建一个py文件

from huggingface_hub import snapshot_downloadmodel_path = 'PATH'   # The local directory to save downloaded checkpoint
snapshot_download("rain1011/pyramid-flow-miniflux", local_dir=model_path, local_dir_use_symlinks=False, repo_type='model')

修改model

3、web UI

调整app 内 model_path 变量,为上一步的model_path。注意目前使用的pyramid_flux而不是pyramid_mmdit

python app.py

根据弹出的页面,简单移动,大家可以自行尝试调参。

4、本地推理

新建test.py ,复制下面代码,修改model_path,本地gpu 内存24g,如果内存小,跑再下面那个代码,卸载到cpu 的版本.两个都是384p版本,差不多本地要两分钟左右生成5s。A800需要50s左右。3090生成768p极慢,不推荐。

import torch
from PIL import Image
from pyramid_dit import PyramidDiTForVideoGeneration
from diffusers.utils import load_image, export_to_videotorch.cuda.set_device(0)model_dtype, torch_dtype = 'bf16', torch.bfloat16   # Use bf16 (not support fp16 yet)model_path = ***model = PyramidDiTForVideoGeneration(model_path,                # Pass the base model pathmodel_name="pyramid_flux"  ,     # set to pyramid_flux or pyramid_mmditmodel_dtype=model_dtype,  # Use bf16model_variant='diffusion_transformer_384p',  # Pass the variant directory namecpu_offloading=True,  # Pass the CPU offloading flag
)model.vae.enable_tiling()
model.vae.to("cuda")
model.dit.to("cuda")
model.text_encoder.to("cuda")
from tqdm import tqdm
# if you're not using sequential offloading bellow uncomment the lines above ^
# model.enable_sequential_cpu_offload()
import json
prompts = []
with open(r"D:\T2V\KandinskyVideo-main\Qwen-Audio-main\prompts_dict_new.json", 'r', encoding='utf-8') as f:datas = json.load(f)for timestamp, data in datas.items():prompts.append(data)print(prompts)for i, prompt in tqdm(enumerate(prompts)):width = 640height = 384with torch.no_grad(), torch.cuda.amp.autocast(enabled=True, dtype=torch_dtype):frames = model.generate(prompt=prompt,num_inference_steps=[20, 20, 20],video_num_inference_steps=[10, 10, 10],height=height,     width=width,temp=16,                    # temp=16: 5s, temp=31: 10sguidance_scale=7.0,         # The guidance for the first frame, set it to 7 for 384p variantvideo_guidance_scale=5.0,   # The guidance for the other video latentoutput_type="pil",save_memory=True,           # If you have enough GPU memory, set it to `False` to improve vae decoding speed)export_to_video(frames, f"./demo/2/{i}.mp4", fps=24)# prompt = "A wide shot of the sunflower field at sunset. The sky is now a deep orange and pink, with the sun setting behind the horizon. The sunflower petals are still swaying in the breeze, but the children have disappeared. A single butterfly lands on a sunflower, its wings shimmering in the warm light. The air is filled with the sound of crickets chirping."# # used for 384p model variant# width = 640# height = 384
# # used for 768p model variant
# # width = 1280
# # height = 768

cpu版本
 

import torch
from PIL import Image
from pyramid_dit import PyramidDiTForVideoGeneration
from diffusers.utils import load_image, export_to_videotorch.cuda.set_device(0)
model_dtype, torch_dtype = 'bf16', torch.bfloat16   # Use bf16 (not support fp16 yet)model = PyramidDiTForVideoGeneration('PATH',                                         # The downloaded checkpoint dirmodel_name="pyramid_flux",model_dtype=model_dtype,model_variant='diffusion_transformer_384p',
)model.vae.enable_tiling()
# model.vae.to("cuda")
# model.dit.to("cuda")
# model.text_encoder.to("cuda")# if you're not using sequential offloading bellow uncomment the lines above ^
model.enable_sequential_cpu_offload()prompt = "A movie trailer featuring the adventures of the 30 year old space man wearing a red wool knitted motorcycle helmet, blue sky, salt desert, cinematic style, shot on 35mm film, vivid colors"# used for 384p model variant
width = 640
height = 384# used for 768p model variant
# width = 1280
# height = 768with torch.no_grad(), torch.cuda.amp.autocast(enabled=True, dtype=torch_dtype):frames = model.generate(prompt=prompt,num_inference_steps=[20, 20, 20],video_num_inference_steps=[10, 10, 10],height=height,     width=width,temp=16,                    # temp=16: 5s, temp=31: 10sguidance_scale=7.0,         # The guidance for the first frame, set it to 7 for 384p variantvideo_guidance_scale=5.0,   # The guidance for the other video latentoutput_type="pil",save_memory=True,           # If you have enough GPU memory, set it to `False` to improve vae decoding speed)export_to_video(frames, "./text_to_video_sample.mp4", fps=24)

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

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

相关文章

P7——pytorch马铃薯病害识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 1.检查GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, data…

2021-04-08 VSC++: 降序折半查找。

void 降序折半查找(int* a, int aa, int aaa) {//缘由https://bbs.csdn.net/topics/399166569int aaaa aaa / 2; bool k 0;if (a[0] aa){cout << 0, cout << ends << "查找&#xff1a;" << aa << endl;k 1;return;}else if (a[aa…

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 &#x1f505;STS30-DIS-B &#x1f319;引脚分配 &#x1f319;通信 &#x1f319;时钟拉伸&#xff08;Clock Stretching&#xff09; &#x1f319;单次触发模式 &#x1f319;温度数据转…

关于Edge浏览器的设置

这里记录几条个人比较习惯的使用浏览器方式的设置&#xff0c;主要是edge浏览器 1. 黑背景色 修改整个浏览器的背景色为黑色&#xff0c;而不是主题&#xff0c;只有边框颜色改变地址栏输入edge://flags/#enable-force-dark&#xff0c;将Default 改为 Enabled&#xff1b;如…

给bmp和png,设置BLENDFUNCTION的AlphaFormat不同参数的效果

BLENDFUNCTION是AlphaBlend用控制透明效果的重要参数。 选择一个32位的png图片&#xff0c;设置AlphaFormat 为 AC_SRC_ALPHA&#xff0c;效果如上图。 选择一个32位的png图片&#xff0c;设置AlphaFormat 为 0&#xff0c;效果如上图。 选择一个24位的bmp图片&#xff0c;设置…

Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为&#xff1a;…

智驾感知「大破局」!新一轮混战开启

随着智能驾驶搭载率的攀升&#xff0c;舱外传感器赛道迎来新变局。 一方面&#xff0c;从近几年智驾传感器的配置变化来看&#xff0c;摄像头的主导地位显而易见。 12月10-12日&#xff0c;由德赛西威总冠名的2024&#xff08;第八届&#xff09;高工智能汽车年会暨年度金球奖…

Hive其四,Hive的数据导出,案例展示,表类型介绍

目录 一、Hive的数据导出 1&#xff09;导出数据到本地目录 2&#xff09;导出到hdfs的目录下 3&#xff09;直接将结果导出到本地文件中 二、一个案例 三、表类型 1、表类型介绍 2、内部表和外部表转换 3、两种表的区别 4、练习 一、Hive的数据导出 数据导出的分类&…

基于WEB的房屋出租管理系统设计

摘 要 随着城市化程度的推进&#xff0c;越来越多的人涌入城市&#xff0c;同时也带来的旺盛的租房需求&#xff0c;传统的房屋出租管理依赖人 工记录的方式难以满足人们对房屋出租管理的需求。因此&#xff0c;本文根据房屋出租信息化的需求设计一款基于房屋出租 的管理系统。…

操作系统(26)数据一致性控制

前言 操作系统数据一致性控制是确保在计算机系统中&#xff0c;数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代&#xff0c;操作系统作为计算机系统的核心&#xff0c;负责管理和协调各种资源&#xff0c;以确保计算机…

C语言项目 天天酷跑(上篇)

前言 这里讲述这个天天酷跑是怎么实现的&#xff0c;我会在天天酷跑的下篇添加源代码&#xff0c;这里会讲述天天酷跑这个项目是如何实现的每一个思路&#xff0c;都是作者自己学习于别人的代码而创作的项目和思路&#xff0c;这个代码和网上有些许不一样&#xff0c;因为掺杂了…

Docker数据库的主从复制

有很多种方式,我这里使用的是docker镜像配置两个mysql容器做主从复制,一个做主服务器&#xff0c;另一个做从服务器&#xff0c;前提是有docker。 创建容器: 第一个容器: mkdir mysql cd mysql docker run -id \ -p 3307:3306 \ --namels \ -v /root/mysql/conf:/etc/mysql/co…

CH32V307VCT6---工程template创建

一、硬件&#xff1a;沁恒官网申请的CH32V307VCT6开发板 二、开发环境&#xff1a;Mounriver 三、最终效果 1.PB9连接LED1&#xff0c;使其闪烁 2.OLED屏幕显示&#xff1a;软件IIC&#xff0c;PB10----SDA&#xff0c;PB11---SCL 3.工程链接&#xff1a;CH32V307VCT6 lo…

mac中idea菜单工具栏没有git图标了

1.右击菜单工具栏 2.选中VCS&#xff0c;点击添加 3.搜索你要的工具&#xff0c;选中点击确定就添加了 4.回到上面一个界面&#xff0c;选中你要放到工具栏的工具&#xff0c;点击应用就好了 5.修改图标&#xff0c;快捷键或者右击选中编辑图标 6.选择你要的图标就好了

使用 Python 创建多栏 Word 文档 – 详解

目录 引言 一、工具与安装 二、Python 在 Word 中创建简单的多栏布局 三、Python 在 Word 文档的栏间添加分隔线 四、Python 从Word文档的指定位置开启多栏设置 五、Python 为多栏 Word 文档的各栏添加页码 引言 在文档设计中&#xff0c;排版不仅决定了内容的呈现方式&…

JZ31 栈的压入、弹出序列

题目来源&#xff1a;栈的压入、弹出序列_牛客题霸_牛客网 题目&#xff1a;如下 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xf…

Spring源码_05_IOC容器启动细节

前面几章&#xff0c;大致讲了Spring的IOC容器的大致过程和原理&#xff0c;以及重要的容器和beanFactory的继承关系&#xff0c;为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的&#xff0c;接下来的每一章都是从总体脉络中&#xff0c; 去研究之前没看的一些重要…

【Linux】进程间通信 -> 匿名管道命名管道

进程间通信的目的 数据传输&#xff1a;一个进程许需要将它的数据发送给另外一个进程。资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它们发生了某种事件&#xff08;如进程终止时要通知父进程…

大模型-使用Ollama+Dify在本地搭建一个专属于自己的聊天助手与知识库

大模型-使用OllamaDify在本地搭建一个专属于自己的知识库 1、本地安装Dify2、本地安装Ollama并解决跨越问题3、使用Dify搭建聊天助手4、使用Dify搭建本地知识库 1、本地安装Dify 参考往期博客&#xff1a;https://guoqingru.blog.csdn.net/article/details/144683767 2、本地…

黑盒测试/白盒测试知识总结

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 对于很多刚开始学习软件测试的小伙伴来说&#xff0c;如果能尽早将黑盒、白盒测试弄明白&#xff0c;掌握两种测试的结论和基本原理&#xff0c;将对自己后期的学习…