最新动态一致的文生视频大模型FancyVideo部署

news2025/1/22 18:01:28

FancyVideo是一个由360AI团队和中山大学联合开发并开源的视频生成模型。

FancyVideo的创新之处在于它能够实现帧特定的文本指导,使得生成的视频既动态又具有一致性。

FancyVideo模型通过精心设计的跨帧文本引导模块(Cross-frame Textual Guidance Module, CTGM)改进了现有的文本控制机制,以解决现有文本到视频(T2V)模型在生成具有连贯运动视频时面临的挑战。

CTGM包含三个子模块:时间信息注入器(Temporal Information Injector, TII)、时间亲和力细化器(Temporal Affinity Refiner, TAR)和时间特征增强器(Temporal Feature Booster, TFB),分别在交叉注意的开始、中间和结束时实现帧特定文本指导。

FancyVideo在EvalCrafter基准测试上取得了最先进的T2V生成结果,并能够合成动态和一致的视频。

github项目地址:https://github.com/360CVGroup/FancyVideo。

一、环境安装

1、python环境

建议安装python版本在3.10以上。

2、pip库安装

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 torchaudio==2.1.2 --extra-index-url https://download.pytorch.org/whl/cu118

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3、fancyvideo模型下载

git lfs install

git clone https://huggingface.co/qihoo360/FancyVideo

4、stable-diffusion-v1-5模型下载

git lfs install

git clone https://huggingface.co/runwayml/stable-diffusion-v1-5

、功能测试

1、运行测试

(1)python代码调用测试

import os
import argparse
import torch
import yaml
from skimage import img_as_ubyte
from fancyvideo.pipelines.fancyvideo_infer_pipeline import InferPipeline


def load_config(config_path):
    with open(config_path, "r") as fp:
        return yaml.safe_load(fp)


def load_prompts(prompt_path):
    with open(prompt_path, "r") as fp:
        return [line.strip() for line in fp.readlines()]


def check_and_create_folder(folder_path):
    if not os.path.exists(folder_path):
        os.makedirs(folder_path, exist_ok=True)


@torch.no_grad()
def process_prompt(infer_pipeline, prompt, reference_image_path, seed, video_length, resolution, use_noise_scheduler_snr, cond_fps, cond_motion_score, output_fps, dst_path):
    print(f"Processing prompt: {prompt}")

    reference_image, video, _ = infer_pipeline.t2v_process_one_prompt(
        prompt=prompt,
        reference_image_path=reference_image_path,
        seed=seed,
        video_length=video_length,
        resolution=resolution,
        use_noise_scheduler_snr=use_noise_scheduler_snr,
        fps=cond_fps,
        motion_score=cond_motion_score
    )
    
    frame_list = [img_as_ubyte(frame.cpu().permute(1, 2, 0).float().detach().numpy()) for frame in video]
    infer_pipeline.save_video(frame_list=frame_list, fps=output_fps, dst_path=dst_path)

    print(f"Saved video to: {dst_path}\n")


@torch.no_grad()
def main(args):
    # Load configurations
    config = load_config(args.config)
    model_config = config.get("model", {})
    infer_config = config.get("inference", {})

    # Initialize inference pipeline
    infer_pipeline = InferPipeline(
        text_to_video_mm_path=model_config.get("text_to_video_mm_path"),
        base_model_path=model_config.get("base_model_path"),
        res_adapter_type=model_config.get("res_adapter_type"),
        trained_keys=model_config.get("trained_keys"),
        model_path=model_config.get("model_path"),
        vae_type=model_config.get("vae_type"),
        use_fps_embedding=model_config.get("use_fps_embedding"),
        use_motion_embedding=model_config.get("use_motion_embedding"),
        common_positive_prompt=model_config.get("common_positive_prompt"),
        common_negative_prompt=model_config.get("common_negative_prompt"),
    )
    
    # Prepare inference parameters
    infer_mode = infer_config.get("infer_mode")
    resolution = infer_config.get("resolution")
    video_length = infer_config.get("video_length")
    output_fps = infer_config.get("output_fps")
    cond_fps = infer_config.get("cond_fps")
    cond_motion_score = infer_config.get("cond_motion_score")
    use_noise_scheduler_snr = infer_config.get("use_noise_scheduler_snr")
    seed = infer_config.get("seed")
    prompt_path = infer_config.get("prompt_path")
    reference_image_folder = infer_config.get("reference_image_folder")
    output_folder = infer_config.get("output_folder")
    check_and_create_folder(output_folder)

    # Load prompts
    prompts = load_prompts(prompt_path)

    # Process each prompt
    for i, prompt in enumerate(prompts):
        reference_image_path = f"{reference_image_folder}/{i}.png" if infer_mode == "i2v" else ""
        dst_path = f"{output_folder}/example_{i}.mp4"
        process_prompt(
            infer_pipeline, prompt, reference_image_path, seed, video_length, resolution, use_noise_scheduler_snr, cond_fps, cond_motion_score, output_fps, dst_path
        )


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--config", type=str, default="configs/inference/i2v.yaml", help="Path to the configuration file")
    args = parser.parse_args()
    main(args)

未完......

更多详细的欢迎关注:杰哥新技术

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

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

相关文章

数据结构里的栈和队列

栈的笑话 程序员A对程序员B说:“你知道为什么程序员喜欢栈吗?” 程序员B疑惑地问:“为什么?” 程序员A回答:“因为它没有bug(bug的谐音在英语中也是‘虫子’的意思,而栈的英文是stack&#x…

Elasticsearch:一次生产集群 ES Watcher 失效的深度排查与分析 - 全过程剖析与解决方案

作者:尚雷,TechTalk 技术交流社区创办者 一次生产集群 ES Watcher 失效的深度排查与分析 全过程剖析与解决方案​​ 一、Elasticsearch Watcher 介绍 1.1 Watcher 概念概述 Watcher 是 Elasticsearch 提供的一项监控和告警服务,允许用户定义…

Mybatis 快速入门(maven)

文章目录 需求建表新建了数据库但是navicat界面没有显示 新建maven项目 注意导入依赖 总结 黑马学习笔记 需求 建表 注意:设置字符集 减少出错 drop database mybatis; create database mybatis charset utf8; use mybatis;drop table if exists tb_user;create…

【IDEA】自定义注解

1.给Java类加上注解 包含一个代码片段,可以在 #parse 指令的帮助下将其包含在 文件模板(Templates 标签页)中。 此内置模板是可编辑的。 除了静态文本、代码和注释外,您还可以使用预定义变量,这些变量随后将像宏一样被…

Android 如何实现搜索功能:本地搜索?数据模型如何设计?数据如何展示和保存?

目录 效果图为什么需要搜索功能如何设计搜索本地的功能,如何维护呢?总结 一、效果图 二、为什么需要搜索功能 找一个选项,需要花非常多的时间,并且每次都需要指导客户在哪里,现在只要让他们搜索一下就可以。这也是模…

react hooks--useMemo

概述 相当于计算属性!!! useMemo实际的目的也是为了进行性能的优化。 ◼ 如何进行性能的优化呢?  useMemo返回的也是一个 memoized(记忆的) 值;  在依赖不变的情况下,多次定义的时候,返回的值是相同…

HarmonyOS Next开发----使用XComponent自定义绘制

XComponent组件作为一种绘制组件,通常用于满足用户复杂的自定义绘制需求,其主要有两种类型"surface和component。对于surface类型可以将相关数据传入XComponent单独拥有的NativeWindow来渲染画面。 由于上层UI是采用arkTS开发,那么想要…

Nexpose 6.6.269 发布下载,新增功能概览

Nexpose 6.6.269 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 11, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

【Python爬虫系列】_024.MySQL数据库

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

六、JSON

文章目录 1. 什么是JSON1.1 JSON 在 JavaScript 中的使用1.1.1 json 的定义1.1.2 json 的访问1.1.3 json 的两个常用方法 1.2、JSON 在 java 中的使用1.2.1、javaBean 和 json 的互转1.2.2、List 和 json 的互转1.2.3、map 和 json 的互转 1. 什么是JSON 1.1 JSON 在 JavaScrip…

8.1差分边缘检测

基本概念 差分边缘检测是一种图像处理技术,用于检测图像中的边缘。边缘是指图像中灰度值发生显著变化的区域。差分边缘检测通常通过计算图像的梯度来实现,梯度反映了灰度值的变化率。在OpenCV中,可以使用不同的算子来检测不同方向的边缘&…

PDP 和 ICE 图的终极指南

部分依赖图和单独条件期望图背后的直觉、数学和代码(R 和 Python) PDP 和 ICE 图都可以帮助我们了解我们的模型如何做出预测。 使用个人显示面板我们可以将模型特征和目标变量之间的关系可视化。它们可以告诉我们某种关系是线性的、非线性的还是没有关系。 同样,当特征之间…

006.MySQL_查询数据

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

FPGA随记-二进制转格雷码

反射二进制码(RBC),也称为反射二进制(RB)或格雷码(Gray code),得名于Frank Gray,是二进制数制的一种排列方式,使得连续两个值之间仅有一个比特(二…

EmguCV学习笔记 VB.Net 12.1 二维码解析

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

算法.图论-建图/拓扑排序及其拓展

文章目录 建图的三种方式邻接矩阵邻接表链式前向星 拓扑排序拓扑排序基础原理介绍拓扑排序步骤解析拓扑排序模板leetcode-课程表 拓扑排序拓展食物链计数喧闹与富有并行课程 建图的三种方式 我们建图的三种方式分别是邻接矩阵, 邻接矩阵, 链式前向星 邻接矩阵 假设我们的点的…

自定义复杂AntV/G6案例

一、效果图 二、源码 /** * * Author: me * CreatDate: 2024-08-22 * * Description: 复杂G6案例 * */ <template><div class"moreG6-wapper"><div id"graphContainer" ref"graphRef" class"graph-content"></d…

计算机毕业设计污染物文献共享数据库管理系统网站开发与实现

计算机毕业设计&#xff1a;污染物文献共享数据库管理系统网站开发与实现 1. 项目背景 随着环境问题日益严峻&#xff0c;对污染物的研究变得尤为重要。然而&#xff0c;在学术界和工业界之间存在着信息孤岛现象&#xff0c;即大量的研究成果被分散在不同的数据…

[Redis][String][上]详细讲解

目录 0.前言1.常见命令1.SET2.GET3.MSET && MGET4.SETNX && SETXX 2.计数命令1.INCR2.INCRBY3.DECR4.DECYBY5.INCRBYFLOAT6.注意 0.前言 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; Redis中所有的键的类型都是字符串类…

【Elasticsearch系列十四】Elasticsearch

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…