自助建网站系统源码,网站推广方案总结,个人网站可以做电商吗,网站平台推广有哪些多模态——使用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. 内容简介
近期#xff0c;… 多模态——使用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的使用以及对其使用方法进行简单的介绍。具体原理相关内容并不是我的主要研究方法也就不在此展开介绍了。
下面的这个小火箭就是项目的示例图片生成视频之后小火箭可以发射升空。 项目地址 HFhttps://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt githttps://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
Python3.10
驱动470.63.01
CUDA11.4
cudnn8.5.0
torch2.0.1cu117
torchvision0.15.2cu117其他模块参考https://github.com/Stability-AI/generative-models/blob/main/requirements/pt2.txt.
2. 模型下载
由于国内目前不能正常访问HF了所以代码的一键运行可能会遇到网络连接的问题于是可以考虑将模型先下载到本地然后直接从本地读取模型。需要下载的模型包括
laion/CLIP-ViT-H-14-laion2B-s32B-b79KViT-L/14stable-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. 效果预览
下面展示一下我用自己拍的照片的生成效果 381b3b2a5906da699b1271fc6695f89f c06e3a2fa85fb925e6a23fe9064cacc6 6a5943a31f38a8b87e54b0394ddf2d16 从效果来看在前几帧的生成效果通常比较好随着帧数的推移视频的部分内容可能会发生形变。尤其是在图三中随着西郊线小火车由远及近模型“脑补”出的列车部分开始变得不够真实。
经过我的一些测试如果输入的图片是街道以及行人车辆的话镜头会顺着街道移动行人和车辆也会移动如果输入图片是动物则需要动物主体的分辨率需要高否则动物主体可能形变失真如果是人像或静物则镜头一般只是左右晃动。
总的来说模型的效果是让人惊喜但可以预见的。尽管模型在生成所需step上与之前的工作相比有了很大的改善但整个生成过程仍然需要较大的显存消耗。
与此同时图像生成类任务应该是有可以输入prompt的地方以指导生成但是在该项目中暂时还没找到文本编码器。希望随着技术的发展通过文本来指导图片生成视频的或利用部分关键帧来生成连续视频的技术可以早日成熟并普及。在今后的学习中看到有趣的开源项目我也会试着体验并与大家分享。