🚀 擴散器(Diffusers)
AnimateDiff 是一種利用現有的穩定擴散文本到圖像模型來創建視頻的方法,為文本到視頻的生成提供了新的解決方案。
🚀 快速開始
AnimateDiff 是一種能夠藉助現有的穩定擴散(Stable Diffusion)文本到圖像模型來創建視頻的方法。
它通過在凍結的文本到圖像模型中插入運動模塊層,並在視頻片段上對其進行訓練以提取運動先驗,從而實現這一功能。這些運動模塊被應用於穩定擴散 UNet 中的殘差網絡(ResNet)和注意力模塊(Attention)之後,其目的是在圖像幀之間引入連貫的運動。為了支持這些模塊,我們引入了運動適配器(MotionAdapter)和 UNet 運動模型(UNetMotionModel)的概念,它們為在現有的穩定擴散模型中使用這些運動模塊提供了便利的方式。
稀疏控制網絡模型(SparseControlNetModel)是針對 AnimateDiff 實現的控制網絡(ControlNet)。
控制網絡由張呂敏、饒安逸和阿格拉瓦拉(Maneesh Agrawala)在論文 為文本到圖像擴散模型添加條件控制 中提出。
稀疏控制網絡(SparseCtrl)版本的控制網絡由郭宇偉、楊策源、饒安逸、阿格拉瓦拉(Maneesh Agrawala)、林達華和戴博在論文 SparseCtrl:為文本到視頻擴散模型添加稀疏控制 中提出,用於在文本到視頻擴散模型中實現可控生成。
✨ 主要特性
- 利用現有模型:藉助已有的穩定擴散文本到圖像模型創建視頻,節省訓練成本。
- 運動模塊:通過插入運動模塊層並訓練提取運動先驗,實現圖像幀間的連貫運動。
- 稀疏控制網絡:SparseControlNetModel 為 AnimateDiff 提供可控生成能力。
💻 使用示例
基礎用法
以下示例展示瞭如何在現有的穩定擴散文本到圖像模型中使用運動模塊和稀疏控制網絡:
import torch
from diffusers import AnimateDiffSparseControlNetPipeline
from diffusers.models import AutoencoderKL, MotionAdapter, SparseControlNetModel
from diffusers.schedulers import DPMSolverMultistepScheduler
from diffusers.utils import export_to_gif, load_image
model_id = "SG161222/Realistic_Vision_V5.1_noVAE"
motion_adapter_id = "guoyww/animatediff-motion-adapter-v1-5-3"
controlnet_id = "guoyww/animatediff-sparsectrl-rgb"
lora_adapter_id = "guoyww/animatediff-motion-lora-v1-5-3"
vae_id = "stabilityai/sd-vae-ft-mse"
device = "cuda"
motion_adapter = MotionAdapter.from_pretrained(motion_adapter_id, torch_dtype=torch.float16).to(device)
controlnet = SparseControlNetModel.from_pretrained(controlnet_id, torch_dtype=torch.float16).to(device)
vae = AutoencoderKL.from_pretrained(vae_id, torch_dtype=torch.float16).to(device)
scheduler = DPMSolverMultistepScheduler.from_pretrained(
model_id,
subfolder="scheduler",
beta_schedule="linear",
algorithm_type="dpmsolver++",
use_karras_sigmas=True,
)
pipe = AnimateDiffSparseControlNetPipeline.from_pretrained(
model_id,
motion_adapter=motion_adapter,
controlnet=controlnet,
vae=vae,
scheduler=scheduler,
torch_dtype=torch.float16,
).to(device)
pipe.load_lora_weights(lora_adapter_id, adapter_name="motion_lora")
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-firework.png")
video = pipe(
prompt="closeup face photo of man in black clothes, night city street, bokeh, fireworks in background",
negative_prompt="low quality, worst quality",
num_inference_steps=25,
conditioning_frames=image,
controlnet_frame_indices=[0],
controlnet_conditioning_scale=1.0,
generator=torch.Generator().manual_seed(42),
).frames[0]
export_to_gif(video, "output.gif")
示例效果展示
穿黑色衣服的男人特寫面部照片,夜晚的城市街道,散景效果,背景中有煙花
|
|