当前位置: 首页 > news >正文

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频

  • 0. 内容简介
  • 1. 运行环境
  • 2. 模型下载
  • 3. 代码梳理
    • 3.1 修改yaml文件中的svd路径
    • 3.2 修改DeepFloyDataFiltering的vit路径
    • 3.3 修改open_clip的clip路径
    • 3.4 代码总体结构
  • 4. 资源消耗
  • 5. 效果预览

0. 内容简介

近期,stabilityAI发布了一个新的项目,是将图片作为基础,生成一个相关的小视频,其实也算是其之前研究内容的扩展。早在stable-diffusion的模型开源出来的时候,除了由prompt生成图片之外,也可以生成连续帧的短视频。

本文主要是体验一下stable-video-diffusion的使用,以及对其使用方法进行简单的介绍。具体原理相关内容并不是我的主要研究方法,也就不在此展开介绍了。

下面的这个小火箭就是项目的示例图片,生成视频之后,小火箭可以发射升空。

test_image

项目地址:
HF:https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt
git:https://github.com/Stability-AI/generative-models
论文地址:
https://stability.ai/research/stable-video-diffusion-scaling-latent-video-diffusion-models-to-large-datasets

观前提醒:此项目消耗显存较多,最好是48G以上,请根据实际情况判断是否继续尝试。

1. 运行环境

这里提供一下我的运行环境以供大家参考。

系统:CentOS 7
Python:3.10
驱动:470.63.01
CUDA:11.4
cudnn:8.5.0
torch:2.0.1+cu117
torchvision:0.15.2+cu117

其他模块参考https://github.com/Stability-AI/generative-models/blob/main/requirements/pt2.txt.

2. 模型下载

由于国内目前不能正常访问HF了,所以代码的一键运行可能会遇到网络连接的问题,于是可以考虑将模型先下载到本地,然后直接从本地读取模型。需要下载的模型包括:

  • laion/CLIP-ViT-H-14-laion2B-s32B-b79K
  • ViT-L/14
  • stable-video-diffusion-img2vid-xt

3. 代码梳理

代码主要参考官方git上的样例脚本:https://github.com/Stability-AI/generative-models/blob/main/scripts/sampling/simple_video_sample.py

3.1 修改yaml文件中的svd路径

模型的创建用到了yaml配置文件,所以需要把git中的svd_xt.yaml等yaml文件下载下来,并且将其中的模型地址ckpt_path,修改为第2部分中,从HF下载的stable-video-diffusion-img2vid-xt/svd_xt.safetensors的地址。

svd_xt_image_decoder.yaml同理。

3.2 修改DeepFloyDataFiltering的vit路径

注意运行脚本的import部分:

import math
import os
from glob import glob
from pathlib import Path
from typing import Optionalimport cv2
import numpy as np
import torch
from einops import rearrange, repeat
from fire import Fire
from omegaconf import OmegaConf
from PIL import Image
from torchvision.transforms import ToTensor# from scripts.util.detection.nsfw_and_watermark_dectection import \
#     DeepFloydDataFiltering
# from sgm.inference.helpers import embed_watermark
# from sgm.util import default, instantiate_from_config

找到其中的DeepFloyDataFiltering,将其中的路径修改为2中下载的ViT-L-14.pt的路径。

3.3 修改open_clip的clip路径

在python环境中,找到…lib/python3.10/site-packages/open_clip/factory.py,大约在210行的if model_cfg is None之后,添加:

if model_cfg is None:with open('.../CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_config.json', 'r') as f:model_cfg = json.load(f)['model_cfg']

其中的路径是2中下载的clip的路径。

3.4 代码总体结构

代码的运行就是参考https://github.com/Stability-AI/generative-models/blob/main/scripts/sampling/simple_video_sample.py的结构,我是在jupyter中执行的,下面给出我的代码的结构以供参考,所包含的函数和类只给出了名称,其具体内容均可在原项目的git中找到。

import math
import os
from glob import glob
from pathlib import Path
from typing import Optionalimport cv2
import numpy as np
import torch
from einops import rearrange, repeat
from fire import Fire
from omegaconf import OmegaConf
from PIL import Image
from torchvision.transforms import ToTensor# from scripts.util.detection.nsfw_and_watermark_dectection import \
#     DeepFloydDataFiltering
from sgm.inference.helpers import embed_watermark
from sgm.util import default, instantiate_from_configimport clip
import torchvision.transforms as Tos.environ['CUDA_VISIBLE_DEVICES'] = '0'# 注意这里的路径,是配置文件yaml所在的目录,我直接把yaml放在同级目录了
RESOURCES_ROOT = './'def load_model_weights(path: str):def load_img(path: str) -> torch.Tensor:# 注意将self.clip_model, _ = clip.load中的路径修改为下载的ViT-L-14.pt路径
class DeepFloydDataFiltering(object):def predict_proba(X, weights, biases):def get_unique_embedder_keys_from_conditioner(conditioner):def clip_process_images(images: torch.Tensor) -> torch.Tensor:def get_batch(keys, value_dict, N, T, device):def load_model(...# 在这个方法里修改输入图像的路径
def sample(...# 执行:可以不用Fire,直接调用即可
sample()

所有的方法均可在项目的git中找到,找不到的话可以直接在git搜索对应的函数名。

4. 资源消耗

官方提供的样例图片,尺寸为(1024, 576),在所有参数均选择默认的情况下,占用显存约为60G。

当我使用的图片为手机原图时,程序很容易就OOM了,所以对于一般手机的相片,可以将尺寸压缩到(960, 720),显存消耗就大概维持在60G。

图片的裁剪主要用到PIL模块,非常方便:
(1) 加载图片:

from PIL import Image
img = Image.open("image.png")

(2) 裁剪图片:

img = img.crop((left, top, right, bot))

(3) 缩放图片:

img = img.resize((960, 720))

需要注意的是,此项目似乎并不能使用cpu进行计算,也不能将device设置成’cuda:0’的方法来指定显卡,但是可以利用os.environ[‘CUDA_VISIBLE_DEVICES’] = '0’的方法来指定显卡。

关于图片的帧数,目前还没有进一步实验,猜测应该是代码中的num_frames参数来控制。

5. 效果预览

下面展示一下我用自己拍的照片的生成效果:
图1

381b3b2a5906da699b1271fc6695f89f

图2

c06e3a2fa85fb925e6a23fe9064cacc6

图3

6a5943a31f38a8b87e54b0394ddf2d16

从效果来看,在前几帧的生成效果通常比较好,随着帧数的推移,视频的部分内容可能会发生形变。尤其是在图三中,随着西郊线小火车由远及近,模型“脑补”出的列车部分开始变得不够真实。

经过我的一些测试,如果输入的图片是街道,以及行人车辆的话,镜头会顺着街道移动,行人和车辆也会移动;如果输入图片是动物,则需要动物主体的分辨率需要高,否则动物主体可能形变失真,如果是人像或静物,则镜头一般只是左右晃动。

总的来说,模型的效果是让人惊喜,但可以预见的。尽管模型在生成所需step上与之前的工作相比,有了很大的改善,但整个生成过程仍然需要较大的显存消耗。

与此同时,图像生成类任务应该是有可以输入prompt的地方以指导生成,但是在该项目中,暂时还没找到文本编码器。希望随着技术的发展,通过文本来指导图片生成视频的,或利用部分关键帧来生成连续视频的技术,可以早日成熟并普及。在今后的学习中,看到有趣的开源项目,我也会试着体验并与大家分享。

相关文章:

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期,…...

springboot(ssm网络相册 在线相册管理系统Java(codeLW)

springboot(ssm网络相册 在线相册管理系统Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&#xff09…...

邮箱发送短信的多种方式

第一种&#xff1a;邮箱验证方法&#xff1a; 导入依赖&#xff1a; <!-- mail依赖&#xff08;发送短信的依赖&#xff09; --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> &l…...

R语言——taxize(第五部分)

taxize&#xff08;第五部分&#xff09; 3. taxize 文档中译3.71. nbn_synonyms&#xff08;从 NBN 返回具有给定 id 的分类群名称的所有同义词&#xff09;3.72. ncbi_children&#xff08;在 NCBI 中搜索类群的子类群&#xff09;3.73. ncbi_downstream&#xff08;检索 NCB…...

负载均衡lvs

简介 ipvsadm 是 Linux 内核中的 IP 虚拟服务器&#xff08;IPVS&#xff09;管理工具。IPVS是 Linux 内核提供的一种负载均衡解决方案&#xff0c;它允许将入站的网络流量分发到多个后端服务器&#xff0c;以实现负载均衡和高可用性。IPVS通过在内核中维护一个虚拟服务器表&a…...

【腾讯云云上实验室】探索向量数据库背后的安全监控机制

当今数字化时代&#xff0c;数据安全成为了企业和个人最为关注的重要议题之一。随着数据规模的不断增长和数据应用的广泛普及&#xff0c;如何保护数据的安全性和隐私性成为了迫切的需求。 今天&#xff0c;我将带领大家一起探索腾讯云云上实验室所推出的向量数据库&#xff0c…...

阅读笔记——《Removing RLHF Protections in GPT-4 via Fine-Tuning》

【参考文献】Zhan Q, Fang R, Bindu R, et al. Removing RLHF Protections in GPT-4 via Fine-Tuning[J]. arXiv preprint arXiv:2311.05553, 2023.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 一、介绍 二、背景 三、方法…...

electron实现截图的功能

Electron是一种跨平台的桌面应用程序开发框架&#xff0c;可以使用HTML、CSS和JavaScript等Web技术构建桌面应用程序。下面是一种使用Electron实现截图的简单方法&#xff1a; 安装Electron和截图库 首先&#xff0c;需要安装Electron和一个截图库&#xff0c;例如electron-sc…...

11、动态数码管显示

数码管驱动方式 1、单片机直接扫描&#xff1a;硬件设备简单&#xff0c;但会消耗大量的单片机CPU时间 2、专用驱动芯片&#xff1a;内部自带显存、扫描电路&#xff0c;单片机只需告诉他显示什么即可 #include <REGX52.H> //数组代表显示亮灯的内容0、1、2、3、4、5、…...

Linux的基本指令(三)

目录 前言 echo指令&#xff08;简述&#xff09; Linux的设计理念 输出重定向操作符 > 追加输出重定向操作符 >> 输入重定向操作符 < 补充知识 学前补充 more指令 less指令 head指令 tail指令 查看文件中间的内容 利用输出重定向实现 利用管道“ |…...

使用python 实现华为设备的SFTP文件传输

实验目的&#xff1a; 公司有一台CE12800的设备&#xff0c;管理地址位172.16.1.2&#xff0c;现在需要编写自动化脚本&#xff0c;通过SFTP实现简单的上传下载操作。 实验拓扑&#xff1a; 实验步骤&#xff1a; 步骤1&#xff1a;将本地电脑和ensp的设备进行桥接&#xff…...

高防cdn防护原理是什么,是否可以防护服务器吗

随着互联网业务的迅速发展&#xff0c;网络安全问题日益凸显。在这样的背景下&#xff0c;高防CDN作为一种有效的网络安全解决方案&#xff0c;受到了越来越多的关注。那么高防CDN的防护原理是什么呢?接下来就跟小德一起深入了解下吧! 1. 高防CDN的基本概念 我们要明确什么是…...

SELinux零知识学习三十五、SELinux策略语言之角色和用户(6)

接前一篇文章:SELinux零知识学习三十四、SELinux策略语言之角色和用户(5) 三、SELinux策略语言之角色和用户 SELinux提供了一种依赖于类型强制(类型增强,TE)的基于角色的访问控制(Role-Based Access Control),角色用于组域类型和限制域类型与用户之间的关系,SELinux…...

初学Flink 学后总结

最近开始学习Flink,一边学习一边记录,以下是基于【尚硅谷】Flink1.13实战教程总结的笔记,方便后面温习 目录 初始 Flink 一:基础概念 1.Flink是什么 2.Flink主要应用场景...

CSS新手入门笔记整理:CSS基本介绍

CSS&#xff0c;指的是“Cascading Style Sheet&#xff08;层叠样式表&#xff09;”&#xff0c;用于控制网页外观。 CSS引入方式 外部样式表 独立建立一个.CSS文件&#xff0c;在HTML中使用 link标签 来引用CSS文件。link标签放置在head标签内部。 语法 <link rel&qu…...

【华为OD】B\C卷真题 100%通过:需要打开多少监控器 C/C++实现

【华为OD】B\C卷真题 100%通过&#xff1a;需要打开多少监控器 C/C实现 目录 题目描述&#xff1a; 示例1 代码实现&#xff1a; 题目描述&#xff1a; 某长方形停车场&#xff0c;每个车位上方都有对应监控器&#xff0c;当且仅当在当前车位或者前后左右四个方向任意一个…...

HarmonyOS开发(七):构建丰富页面

1、组件状态管理 1.1、概述 在应用中&#xff0c;界面一般都是动态的。界面会根据不同状态展示不一样的效果。 ArkUI作为一种声明式UI&#xff0c;具有状态驱动UI更新的特点&#xff0c;当用户进行界面交互或有外部事件引起状态改变时&#xff0c;状态的变会会触发组件的自动…...

LuatOS-SOC接口文档(air780E)--rsa - RSA加密解密

示例 -- 请在电脑上生成私钥和公钥, 当前最高支持4096bit, 一般来说2048bit就够用了 -- openssl genrsa -out privkey.pem 2048 -- openssl rsa -in privkey.pem -pubout -out public.pem -- privkey.pem 是私钥, public.pem 是公钥 -- 私钥用于 加密 和 签名, 通常保密, 放在…...

简易版王者荣耀

所有包和类 GameFrame类 package newKingOfHonor;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;im…...

功能测试进阶建议,学习思路讲解

1. 深入了解测试理论&#xff1a; 了解测试的原理、方法和最佳实践&#xff0c;包括黑盒测试、白盒测试、灰盒测试等。可以阅读相关的书籍或参加在线课程。 2. 学习相关测试工具&#xff1a; 掌握常用的测试工具&#xff0c;如缺陷发现工具、性能测试工具、安全测试工具等。可以…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...