🚀 扩散器(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")
示例效果展示
穿黑色衣服的男人特写面部照片,夜晚的城市街道,散景效果,背景中有烟花
|
|