多模態——使用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的地方以指導生成,但是在該項目中,暫時還沒找到文本編碼器。希望隨著技術的發展,通過文本來指導圖片生成視頻的,或利用部分關鍵幀來生成連續視頻的技術,可以早日成熟并普及。在今后的學習中,看到有趣的開源項目,我也會試著體驗并與大家分享。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux上安裝Redis

案例中Linux版本為CentOS7.9,安裝目錄為 /root/software/ 1、使用 wget 命令從官網下載安裝包 wget https://github.com/redis/redis/archive/7.2.3.tar.gz2、解壓縮 tar -xzf 7.2.3.tar.gz3、進入解壓后的目錄 cd redis-7.2.34、 編譯和安裝Redis make make i…

npm中,你不了解的.npmrc文件

原文鏈接:npm中,你不了解的.npmrc文件 寫在前面 對于寫JS的程序員來說,可能沒有人不知道npm,但是有些同學對他的配置文件(即.npmrc文件)并不了解。結合我的學習心得,寫一篇博客跟大家分享一些該配置文件的知識。 .np…

理解CLIP模型

1.簡介 學習深度學習必看CLIP!論文鏈接arxiv.org/pdf/2103.00020v1.pdf。 簡單來說就是傳統的分類任務被用來預測指定的類別,有監督訓練限制了模型的通用性和可用性,并且需要帶有標簽的數據來訓練,該篇論文就想直接從原始文本中…

Navicat 技術指引 | 適用于 GaussDB 的用戶權限設置

Navicat Premium(16.2.8 Windows版或以上) 已支持對 GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結構同步、協同合作、數據遷移等),這…

Spring 七大組件

文章目錄 Spring 七大組件 Spring 七大組件 核心容器(Spring core) 核心容器提供Spring框架的基本功能。Spring以bean的方式組織和管理Java應用中的各個組件及其關系。Spring使用BeanFactory來產生和管理Bean,它是工廠模式的實現。BeanFactory使用控制反轉(IOC)模式…

(Matalb分類預測)GA-BP遺傳算法優化BP神經網絡的多維分類預測

目錄 一、程序及算法內容介紹: 基本內容: 亮點與優勢: 二、實際運行效果: 三、部分代碼: 四、本文代碼數據說明手冊分享 一、程序及算法內容介紹: 基本內容: 本代碼基于Matalb平臺編譯&am…

Flink Flink中的分流

一、什么是分流 所謂“分流”,就是將一條數據流拆分成完全獨立的兩條、甚至多條流。也就是基于一個DataStream,定義一些篩選條件,將符合條件的數據揀選出來放到對應的流里。 二、基于filter算子的簡單實現分流 其實根據條件篩選數據的需求…

面了一個4年經驗的測試工程師,自動化都不會也要15k,我也是醉了····

📢專注于分享軟件測試干貨內容,歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!📢交流討論:歡迎加入我們一起學習!📢資源分享:耗時200小時精選的「軟件測試」資…

表單考勤簽到作業周期打卡打分評價評分小程序開源版開發

表單考勤簽到作業周期打卡打分評價評分小程序開源版開發 表單打卡評分 表單簽到功能:學生可以通過掃描二維碼或輸入簽到碼進行簽到,方便教師進行考勤管理。 考勤功能:可以記錄學生的出勤情況,并自動生成出勤率和缺勤次數等統計數…

本地緩存與分布式緩存

一、緩存的概念 在服務端編程當中,緩存主要是指將數據庫的數據加載到內存中,之后對該數據的訪問都在內存中完成,從而減少了對數據庫的訪問,解決了高并發場景中數據庫容易成為性能瓶頸的問題;以及基于內存的訪問速度高…

ruoyi-plus-vue部署

安裝虛擬機 部署文檔 安裝docker 安裝docker 安裝docker-compose 可能遇到的錯誤 Failed to deploy ruoyi/ruoyi-server:5.1.0 Dockerfile: ruoyi-admin/Dockerfile: Cant retrieve im age ID from build stream 安裝 vim 命令 yum install vim -y 修改文件 vim /etc/re…

flutter 無法從H5 WebView 訪問攝像頭和錄音權限

AndroidManifest.xml需要在 中添加以下權限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/> <uses-permission android:name"android.permission.CAMERA" /> <uses-permission android:name"android.per…

基于Springboot的冬奧會科普平臺(有報告),Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的冬奧會科普平臺&#xff08;有報告&#xff09;&#xff0c;Javaee項目&#xff0c;springboot項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層…

線性表之鏈式表

文章目錄 主要內容一.單鏈表1.頭插法建立單鏈表代碼如下&#xff08;示例&#xff09;: 2.尾插法建立單鏈表代碼如下&#xff08;示例&#xff09;: 3.按序號查找結點值代碼如下&#xff08;示例&#xff09;: 4.按值查找表結點代碼如下&#xff08;示例&#xff09;: 5.插入節…

ELK+kafka+filebeat企業內部日志分析系統

1、組件介紹 1、Elasticsearch&#xff1a; 是一個基于Lucene的搜索服務器。提供搜集、分析、存儲數據三大功能。它提供了一個分布式多用戶能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java開發的&#xff0c;并作為Apache許可條款下的開放源碼發布…

module ‘d2l.torch‘ has no attribute ‘train_ch3‘

解決方法&#xff1a; 方法1&#xff1a; 如果沒有安裝d2l&#xff0c;請安裝 詳細步驟見安裝d2l 方法2&#xff1a; 先卸載舊的版本 pip uninstall d2l再下載新的版本&#xff0c;需要以管理員身份運行下載指令 pip install d2l0.17.5 --user完美解決&#xff01; ????…

創新研報|企業如何在不確定時期突破至新高度?

報告下載地址&#xff1a; 創新研報&#xff5c;BCG 2023最創新企業研究-在不確定時期躍升新高度 創新從未如此重要&#xff0c;領先的企業創新者正在證明這一切。BCG&#xff08;于2005年首次發布年度創新報告&#xff0c;其中列出了全球創新高管最欽佩的50家企業&#xf…

2824. 統計和小于目標的下標對數目 --力扣 --JAVA

題目 給你一個下標從 0 開始長度為 n 的整數數組 nums 和一個整數 target &#xff0c;請你返回滿足 0 < i < j < n 且 nums[i] nums[j] < target 的下標對 (i, j) 的數目。 解題思路 對數組進行排序&#xff0c;可以利用List自帶的sort函數傳遞比較規則(代碼中的…

【MATLAB源碼-第88期】基于matlab的灰狼優化算法(GWO)的柵格路徑規劃,輸出做短路徑圖和適應度曲線

操作環境&#xff1a; MATLAB 2022a 1、算法描述 灰狼優化算法&#xff08;Grey Wolf Optimizer, GWO&#xff09;是一種模仿灰狼捕食行為的優化算法。灰狼是群居動物&#xff0c;有著嚴格的社會等級結構。在灰狼群體中&#xff0c;通常有三個等級&#xff1a;首領&#xff…

數據結構-歸并排序+計數排序

1.歸并排序 基本思想&#xff1a; 歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法的一個非常典型的應用。將已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每個子序列有序&#xff0c;再使子序列段間有序。若將兩個有序表合并成一個…