一鍵Run帶你體驗擴散模型的魅力

华为云开发者联盟發表於2024-03-08

本文分享自華為雲社群《爆圈Sora橫空出世,AGI通用人工智慧時代真的要來了嗎?一鍵Run帶你體驗擴散模型的魅力!》,作者: 碼上開花_Lancer。

Sora這幾天的爆炸性新聞,讓所有人工智慧相關從業者及對應用感興趣的人群都感到沸騰,震撼到央視也在進行相關的討論,簡直可以和2023年初ChatGPT討論帶來的熱潮一般。所以它到底為什麼這麼火?

一鍵Run帶你體驗擴散模型的魅力

一、什麼是SORA?

Sora 是OpenAI最新發布的文字生成影片模型,不僅可以生成長達一分鐘的影片,且能完全遵照使用者的 Prompt 並保持視覺質量。

OpenAI 這個公司的格局非常大,他想要做 World Simulators(世界模擬器),做通用AGI,而不僅僅是文字或者影像影片領域的內容,他希望的是幫助人們解決需要現實世界互動的問題。單從OpenAI 釋出的sora模型的論文可以看出來:

一鍵Run帶你體驗擴散模型的魅力

圖片中文翻譯:

影片生成模型作為世界模擬器 我們探討了在影片資料上對生成模型進行大規模訓練。 具體來說,我們共同訓練了文字條件擴散模型,這些模型能夠處理不同時長、解析度和寬高比的影片和影像。 我們利用了一種變壓器架構,該架構能夠處理影片和影像潛在程式碼的空間時間塊。我們最大的模型,Sora,能夠生成一分鐘的高保真影片。 我們的結果表明,擴充套件影片生成模型是構建通用物理世界模擬器的有希望的道路。
在文生影片領域,Sora將帶來短影片的智慧化變革,打破當前內容平臺等額原有資料壁壘,短影片創作的生態護城河,同時Sora融入短影片工作流,極大的增強使用者的體驗,降低創作難度和成本,極大擴充創作者的能力邊界,激發短影片創作空間。

一鍵Run帶你體驗擴散模型的魅力

在影片創作領域,畫面的穩定性至關重要。如果要呈現出優質的效果,創作者需要具備高超的影片剪輯技能和相關基礎。然而,SORA這次的表現真是逆天!透過簡單的文字描述,它能生成畫面穩定、理解能力強的長影片。

SORA的技術思路與眾不同,完全碾壓了傳統方法。它不再僅關注二維畫素的變化,而是專注於語義理解的變化。從以往的影片畫面生成,轉變為故事邏輯的生成。這種創新思路讓人瞠目結舌,展示了技術的無限可能性

一鍵Run帶你體驗擴散模型的魅力

二、SORA背後原理的推測

根據OpenAI最新發布的技術報告,Sora背後的“text-to-video”模型基於Diffusion Transformer Model。這種模型結合了Transformer架構和擴散模型,用於生成影像、影片和其他資料。

實際上,Sora是一個基於Transformer的擴散模型。這類模型不僅在理論上具有創新性,而且在實際應用中也顯示出了強大的潛力。例如,DiT模型(Sora的基礎)和GenTron模型在影像和影片生成等領域都已經取得了巨大的成功,這些創新性的模型為我們展示了技術的無限可能性。目前Sora技術沒有公開,大家對它都有不同猜測。DIT提出人謝賽寧:

1)Sora應該是建立在DiT這個擴散Transformer之上的 。

2)Sora可能有大約30億個引數,(引用論文模型0.13B, 32X算力)。
3)訓練資料是Sora 成功的最關鍵因素。
4)主要的挑戰是如何解決錯誤累積問題並隨著時間的推移保持質量/一致 。

DiT模型:Meta提出的完全基於transformer架構的擴散模型,不僅將transformer成功應用在擴散模型,還探究了transformer架構在擴散模型上的scalability能力。

GenTron模型:一種基於Transformer的擴散模型,在針對SDXL的人類評估中,GenTron在視覺質量方面取得了51.1%的勝率(19.8%的平局率),在文字對齊方面取得了42.3%的勝率(42.9%的平局率)。

DiT模型
Scalable Diffusion Models with Transformers ---- 基於transformer的擴散模型,稱為Diffusion Transformers(DiTs) ,Diffusion Transformer Model(DiT)的設計空間、擴充套件行為、網路複雜度和樣本質量之間的關係。這些研究結果表明,透過簡單地擴充套件DiT並使用高容量的骨幹網路,可以在類條件256x256 ImageNet生成基準測試中實現最新的2.27 FID。與畫素空間擴散模型相比,DiTs在使用的Gflops只是其一小部分,因此具有較高的計算效率。此外,DiTs還可以應用於畫素空間,使得影像生成流程成為混合方法,使用現成的卷積VAEs和基於transformer的DDPMs。

擴散模型中引入了transformer類的標準設計,以取代傳統的U-Net設計,從而提供了一種新的架構選擇。

引入了潛在擴散模型(LDMs),透過將影像壓縮為較小的空間表示,並在這些表示上訓練擴散模型,從而解決了在高解析度畫素空間中直接訓練擴散模型的計算問題。

一鍵Run帶你體驗擴散模型的魅力

那對於我們開發者使用者想要強烈體驗文生影片的樂趣,那裡可以體驗呢?今天給大家介紹下Stable Video Diffusion (SVD),一起在華為雲一鍵Run體驗其中的樂趣:

三、Stable Video Diffusion (SVD) 擴散模型的影像生成影片的體驗

1. 案例簡介

Stable Video Diffusion (SVD) 是一種擴散模型,它將靜止影像作為條件幀,並從中生成影片。

🔹 本案例需使用 Pytorch-1.8 GPU-V100 及以上規格執行

🔹 點選Run in ModelArts,將會進入到ModelArts CodeLab中,這時需要你登入華為雲賬號,如果沒有賬號,則需要註冊一個,且要進行實名認證,參考《ModelArts準備工作_簡易版》 即可完成賬號註冊和實名認證。 登入之後,等待片刻,即可進入到CodeLab的執行環境

🔹 出現 Out Of Memory ,請檢查是否為您的引數配置過高導致,修改引數配置,重啟kernel或更換更高規格資源進行規避❗❗❗

2. 下載程式碼和模型

!git clone https://github.com/Stability-AI/generative-models.git
Cloning into 'generative-models'...
​
remote: Enumerating objects: 860, done.•[K
​
remote: Counting objects: 100% (489/489), done.•[K
​
remote: Compressing objects: 100% (222/222), done.•[K
​
remote: Total 860 (delta 368), reused 267 (delta 267), pack-reused 371•[K
​
Receiving objects: 100% (860/860), 42.67 MiB | 462.00 KiB/s, done.
​
Resolving deltas: 100% (445/445), done.
import moxing as mox
mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/Stable_Video_Diffusion/file/modify_file/generative-models/sgm/modules/encoders','generative-models/sgm/modules/encoders')
mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/Stable_Video_Diffusion/file/models','generative-models/models')
mox.file.copy_parallel(,'obs://modelarts-labs-bj4-v2/case_zoo/Stable_Video_Diffusion/file/checkpoints','generative-models/checkpoints')
INFO:root:Using MoXing-v2.1.0.5d9c87c8-5d9c87c8
​
INFO:root:Using OBS-Python-SDK-3.20.9.1

3. 配置執行環境

本案例依賴Python3.10.10及以上環境,因此我們首先建立虛擬環境:

!/home/ma-user/anaconda3/bin/conda create -n python-3.10.10 python=3.10.10 -y --override-channels --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
!/home/ma-user/anaconda3/envs/python-3.10.10/bin/pip install ipykernel
/home/ma-user/anaconda3/lib/python3.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.12) or chardet (3.0.4) doesn't match a supported version!
​
  RequestsDependencyWarning)
​
Collecting package metadata (current_repodata.json): done
​
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
​
Collecting package metadata (repodata.json): done
​
Solving environment: done
import json
import os
​
data = {
   "display_name": "python-3.10.10",
   "env": {
      "PATH": "/home/ma-user/anaconda3/envs/python-3.10.10/bin:/home/ma-user/anaconda3/envs/python-3.7.10/bin:/modelarts/authoring/notebook-conda/bin:/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/ma-user/modelarts/ma-cli/bin:/home/ma-user/modelarts/ma-cli/bin:/home/ma-user/anaconda3/envs/PyTorch-1.8/bin"
   },
   "language": "python",
   "argv": [
      "/home/ma-user/anaconda3/envs/python-3.10.10/bin/python",
      "-m",
      "ipykernel",
      "-f",
      "{connection_file}"
   ]
}
​
if not os.path.exists("/home/ma-user/anaconda3/share/jupyter/kernels/python-3.10.10/"):
    os.mkdir("/home/ma-user/anaconda3/share/jupyter/kernels/python-3.10.10/")
​
with open('/home/ma-user/anaconda3/share/jupyter/kernels/python-3.10.10/kernel.json', 'w') as f:
    json.dump(data, f, indent=4)

建立完成後,稍等片刻,或重新整理頁面,點選右上角kernel選擇python-3.10.10 一鍵Run帶你體驗擴散模型的魅力

!pip install torch==2.0.1 torchvision==0.15.2
!pip install MoviePy
Looking in indexes: http://repo.myhuaweicloud.com/repository/pypi/simple
​
Collecting torch==2.0.1
​
  Downloading http://repo.myhuaweicloud.com/repository/pypi/packages/8c/4d/17e07377c9c3d1a0c4eb3fde1c7c16b5a0ce6133ddbabc08ceef6b7f2645/torch-2.0.1-cp310-cp310-manylinux1_x86_64.whl (619.9 MB)
​
•[2K     •[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━•[0m •[32m619.9/619.9 MB•[0m •[31m5.6 MB/s•[0m eta •[36m0:00:00•[0m00:01•[0m00:01•[0m
​
......
    Uninstalling decorator-5.1.1:
​
      Successfully uninstalled decorator-5.1.1
​
Successfully installed MoviePy-1.0.3 decorator-4.4.2 imageio-2.34.0 imageio_ffmpeg-0.4.9 proglog-0.1.10 tqdm-4.66.2
%cd generative-models
/home/ma-user/work/stable-video-diffusion/generative-models
/home/ma-user/anaconda3/envs/python-3.10.10/lib/python3.10/site-packages/IPython/core/magics/osm.py:417: UserWarning: using dhist requires you to install the `pickleshare` library.
​
  self.shell.db['dhist'] = compress_dhist(dhist)[-100:]
!pip install -r requirements/pt2.txt
Looking in indexes: http://repo.myhuaweicloud.com/repository/pypi/simple
​
Collecting clip@ git+https://github.com/openai/CLIP.git (from -r requirements/pt2.txt (line 3))
​
  Cloning https://github.com/openai/CLIP.git to /tmp/pip-install-_vzv4vq_/clip_4273bc4d2cba4d6486a222a5093fbe4b
​
 conda3/envs/python-3.10.10/lib/python3.10/site-packages (from -r requirements/pt2.txt (line 32)) (4.66.2)
​
Collecting transformers==4.19.1 (from -r requirements/pt2.txt (line 33))
​
 
      Successfully uninstalled urllib3-2.2.1
​
Successfully installed PyWavelets-1.5.0 aiohttp-3.9.3 aiosignal-1.3.1 altair-5.2.0 antlr4-python3-runtime-4.9.3 appdirs-1.4.4 async-timeout-4.0.3 attrs-23.2.0 black-23.7.0 blinker-1.7.0 braceexpand-0.1.7 cachetools-5.3.2 chardet-5.1.0 click-8.1.7 clip-1.0 contourpy-1.2.0 cycler-0.12.1 docker-pycreds-0.4.0 einops-0.7.0 fairscale-0.4.13 fire-0.5.0 fonttools-4.49.0 frozenlist-1.4.1 fsspec-2024.2.0 ftfy-6.1.3 gitdb-4.0.11 gitpython-3.1.42 huggingface-hub-0.20.3 importlib-metadata-7.0.1 invisible-watermark-0.2.0 jsonschema-4.21.1 jsonschema-specifications-2023.12.1 kiwisolver-1.4.5 kornia-0.6.9 lightning-utilities-0.10.1 markdown-it-py-3.0.0 matplotlib-3.8.3 mdurl-0.1.2 multidict-6.0.5 mypy-extensions-1.0.0 natsort-8.4.0 ninja-1.11.1.1 omegaconf-2.3.0 open-clip-torch-2.24.0 opencv-python-4.6.0.66 pandas-2.2.0 pathspec-0.12.1 protobuf-3.20.3 pudb-2024.1 pyarrow-15.0.0 pydeck-0.8.1b0 pyparsing-3.1.1 pytorch-lightning-2.0.1 pytz-2024.1 pyyaml-6.0.1 referencing-0.33.0 regex-2023.12.25 rich-13.7.0 rpds-py-0.18.0 safetensors-0.4.2 scipy-1.12.0 sentencepiece-0.2.0 sentry-sdk-1.40.5 setproctitle-1.3.3 smmap-5.0.1 streamlit-1.31.1 streamlit-keyup-0.2.0 tenacity-8.2.3 tensorboardx-2.6 termcolor-2.4.0 timm-0.9.16 tokenizers-0.12.1 toml-0.10.2 tomli-2.0.1 toolz-0.12.1 torchaudio-2.0.2 torchdata-0.6.1 torchmetrics-1.3.1 transformers-4.19.1 tzdata-2024.1 tzlocal-5.2 urllib3-1.26.18 urwid-2.6.4 urwid-readline-0.13 validators-0.22.0 wandb-0.16.3 watchdog-4.0.0 webdataset-0.2.86 xformers-0.0.22 yarl-1.9.4 zipp-3.17.0
!pip install .
Looking in indexes: http://repo.myhuaweicloud.com/repository/pypi/simple
​
Processing /home/ma-user/work/stable-video-diffusion/generative-models
​
  Installing build dependencies ... •[?25ldone
​
•[?25h  Getting requirements to build wheel ... •[?25ldone
​
•[?25h  Preparing metadata (pyproject.toml) ... •[?25ldone
​
•[?25hBuilding wheels for collected packages: sgm
​
  Building wheel for sgm (pyproject.toml) ... •[?25ldone
​
•[?25h  Created wheel for sgm: filename=sgm-0.1.0-py3-none-any.whl size=127368 sha256=0f9ff6913b03b2e0354cd1962ecb2fc03df36dea90d14b27dc46620e6eafc9a0
​
  Stored in directory: /home/ma-user/.cache/pip/wheels/a9/b8/f4/e84140beaf1762b37f5268788964d58d91394ee17de04b3f9a
​
Successfully built sgm
​
Installing collected packages: sgm
​
Successfully installed sgm-0.1.0

4. 生成影片

影片預設生成到outputs資料夾內

!python scripts/sampling/simple_video_sample.py --decoding_t 1 --input_path 'assets/test_image.png'
/home/ma-user/work/stable-video-diffusion/generative-models
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
VideoTransformerBlock is using checkpointing
​
Initialized embedder #0: FrozenOpenCLIPImagePredictionEmbedder with 683800065 params. Trainable: False
​
Initialized embedder #1: ConcatTimestepEmbedderND with 0 params. Trainable: False
​
Initialized embedder #2: ConcatTimestepEmbedderND with 0 params. Trainable: False
​
Initialized embedder #3: VideoPredictionEmbedderWithEncoder with 83653863 params. Trainable: False
​
Initialized embedder #4: ConcatTimestepEmbedderND with 0 params. Trainable: False
​
Restored from checkpoints/svd.safetensors with 0 missing and 0 unexpected keys
​
100%|███████████████████████████████████████| 890M/890M [00:50<00:00, 18.5MiB/s]
​
/home/ma-user/anaconda3/envs/python-3.10.10/lib/python3.10/site-packages/torch/utils/checkpoint.py:31: UserWarning: None of the inputs have requires_grad=True. Gradients will be None
​
  warnings.warn("None of the inputs have requires_grad=True. Gradients will be None")
#將影片檔案轉成動圖顯示
from moviepy.editor import *
 
# 指定輸入影片路徑
video_path = "outputs/simple_video_sample/svd/000000.mp4"
 
# 載入影片
clip = VideoFileClip(video_path)
 
# 設定儲存GIF的引數(如解析度、持續時間等)
output_file = "output_animation.gif"
fps = 10 # GIF每秒顯示的幀數
 
# 生成並儲存GIF
clip.write_gif(output_file, fps=fps)
MoviePy - Building file output_animation.gif with imageio.
from IPython.display import Image
Image(open('output_animation.gif','rb').read())

大家趕緊來體驗文生影片的樂趣吧!

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章