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

news2024/12/26 14:17:14

《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_download

model_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_video

torch.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 path
    model_name="pyramid_flux"  ,     # set to pyramid_flux or pyramid_mmdit
    model_dtype=model_dtype,  # Use bf16
    model_variant='diffusion_transformer_384p',  # Pass the variant directory name
    cpu_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 = 640
    height = 384
    with 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: 10s
            guidance_scale=7.0,         # The guidance for the first frame, set it to 7 for 384p variant
            video_guidance_scale=5.0,   # The guidance for the other video latent
            output_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_video

torch.cuda.set_device(0)
model_dtype, torch_dtype = 'bf16', torch.bfloat16   # Use bf16 (not support fp16 yet)

model = PyramidDiTForVideoGeneration(
    'PATH',                                         # The downloaded checkpoint dir
    model_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 = 768

with 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: 10s
        guidance_scale=7.0,         # The guidance for the first frame, set it to 7 for 384p variant
        video_guidance_scale=5.0,   # The guidance for the other video latent
        output_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.coloradmin.cn/o/2265878.html

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

相关文章

ESP32_H2(IDF)学习系列-ADC模数转换(连续转换)

一、简介(节选手册) 资料参考https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32h2/api-reference/peripherals/adc_calibration.html 1 概述 ESP32-H2 搭载了以下模拟外设: • 一个 12 位逐次逼近型模拟数字转换器 (SAR ADC)&…

“信任构建”:网上购物商城的用户评价与信誉系统

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架…

数据分析的分类和EDIT思维框架

为了服务于企业不同层次的决策,商业数据分析过程需要提供相应的数据科学产出物。 一般而言,数据分析需要经历从需求层、数据层、分析层到输出层四个阶段。 第一个阶段是需求层——确定目标,具体目标需要依据具体的层次进行分析&#xff1a…

使用 Conda 环境创建 Docker 镜像的完整指南

使用 Conda 环境创建 Docker 镜像的完整指南 在现代开发中,容器化已经成为管理和部署复杂软件环境的首选方式。对于基于 Conda 的 Python 环境,如何将本地环境高效地迁移到 Docker 镜像中是一项常见但关键的任务。本文提供了两种方法,分别是基…

HTML-CSS(day01)

W3C标准: W3C( World Wide Web Consortium,万维网联盟) W3C是万维网联盟,这个组成是用来定义标准的。他们规定了一个网页是由三部分组成,分别是: 三个组成部分:(1&…

HTTP,续~

文章目录 前提摘要给HTTP完整的一生请求行栗子 请求头部空行请求体 代码实现 前提摘要 上一章地址,点击浏览 给HTTP完整的一生 一个完整的HTTP请求至少需要以下几个部分 … 一、请求行. 二、请求头部. 三、空行. 四、请求体. … 请求行 结构 > 请求方式 请求U…

在kali Linux虚拟机上,运行“binwalk -e 文件名”命令会报错

文章目录 报错解决方法 报错 Extractor Exception: Binwalk extraction uses many third party utilities, which may not be secure. If you wish to have extraction utilities executed as the current user, use ‘–run-asroot’ (binwalk itself must be run as root). …

(Arxiv-2024)CLOVer:跨层正交向量自适应

CLOVer:跨层正交向量自适应 Paper 是北京大学发表在Arxiv 2024的工作 Paper Title:CLOVer: Cross-Layer Orthonormal Vectors Adaption Code地址 ABSTRACT 为了将一个预训练的大型模型适配到下游任务中,通过在其原始潜在空间内利用基向量的线…

下划线表示任意单个字符引发的bug

遇到一个奇葩的bug!!! 功能是模糊搜索:列表中有一条数据“IMSCM-CM_PMS_ORDER” 使用“IMSCM_”(这里是下划线,数据为中划线)进行搜索,竟然可以搜索出这条数据!&#x…

前端编程图表化助手!Echarts入门

Echarts-一个基于javaScript的开源可视化图表库 在日常编程中,我们经常会用到类似饼图、柱状图等,而在网页中使用原生html和css很难做到类似效果。那么作为前端工程师,我们如何做出来一份好看而且实用的图标呢? 那么接下来&…

【论文阅读笔记】IC-Light

SCALING IN-THE-WILD TRAINING FOR DIFFUSION-BASED ILLUMINATION HARMONIZATION AND EDITING BY IMPOSING CONSISTENT LIGHT TRANSPORT 通过施加一致的光线传输来扩展基于扩散模型的真实场景光照协调与编辑训练 前言摘要引言相关工作基于学习的基于扩散模型的外观和光照操纵光…

开发微信小程序的过程与心得

起因 作为家长,我近期参与了学校的护学岗工作。在这个过程中,我发现需要使用水印相机来记录护学活动,但市面上大多数水印相机应用都要求开通会员才能使用完整功能。作为一名程序员,我决定利用自己的技术背景,开发一个…

前端样式练手:阴阳图+时钟的组合

开篇 今天的小作品是突然脑子灵光一闪写出来的&#xff0c;代码不多&#xff0c;就不过多赘述了。 代码实现 <template><div class"clock-container"><!-- 八卦图 --><!-- <div class"bagua"><divv-for"(trigram, ind…

LabVIEW软件项目设计方案如何制定

制定LabVIEW软件项目设计方案需要综合考虑需求分析、架构设计、功能模块划分和时间预算等多个方面&#xff0c;确保项目开发过程高效、可控且最终满足目标要求。以下是一个详细的制定流程&#xff1a; ​ 1. 需求分析 目标定义&#xff1a;明确项目的目标&#xff0c;例如数据采…

IMX芯片启动方式

一、启动方式选择 a)概述 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次…

Pyside6 在 pycharm 中的配置

打开文件->设置 找到 工具->外部工具 点击 号 创建一个外部工具 QtDesigner 名称:QtDesigner 程序&#xff1a;D:\miniconda\envs\ergoAI-qt\Lib\site-packages\PySide6\designer.exe 实参&#xff1a;$FileName$ 工作目录&#xff1a;$FileDir$ PyUIC 名称&#xf…

Elasticsearch:什么是提示工程 - prompt engineering?

提示工程流程定义 提示工程是一种工程技术&#xff0c;用于设计生成式 AI 工具&#xff08;generative AI tools&#xff09;的输入&#xff0c;以调整大型语言模型并优化输出。 提示&#xff08;prompts&#xff09;被称为输入&#xff0c;而由生成性 AI 工具生成的答案是输…

金融租赁系统的发展与全球化战略实施探讨

内容概要 金融租赁系统的演变并非一帆风顺&#xff0c;像一场跌宕起伏的电影。首先&#xff0c;咱们得看看它的起源及现状。随着经济的快速发展&#xff0c;金融租赁逐渐作为一种灵活的融资手段崭露头角。在中国市场中&#xff0c;企业对设备和技术更新换代的需求日益迫切&…

1.flask介绍、入门、基本用法

flask与djiango的区别 djiango是一个大而全的框架。 djiango内部为我们提供了非常多的组件: orm/session/cookie/admin/form/modelform/路由/视图/模板/中间件/分页/auth/contenttype/缓存/信号/多数据库连接 flask 是一个轻量级的框架&#xff0c;本身没有什么太多的功能&a…

【vue2父组件调用子组件方法之slot的使用】

父组件调用子组件方法之slot的使用 具体功能需求&#xff1a; 一个页面&#xff0c;点击按钮&#xff0c;打开一个弹窗。弹窗有自定义表单和公共表单&#xff0c;提交的时候要获取两个表单的数据以及复显表单数据 为什么使用插槽了&#xff0c;因为我需要在弹窗中复用公共表单…