guoyww/animatediff-sparsectrl-scribble
AnimateDiff es un método que permite crear videos utilizando modelos existentes de Stable Diffusion de texto a imagen. Lo logra insertando capas de módulos de movimiento en un modelo congelado de texto a imagen y entrenándolo con videoclips para extraer un prior de movimiento. Estos módulos de movimiento se aplican después de los bloques de ResNet y Atención en el UNet de Stable Diffusion. Su propósito es introducir un movimiento coherente a través de los fotogramas de la imagen. Para soportar estos módulos, presentamos los conceptos de MotionAdapter y UNetMotionModel. Estos sirven como una manera conveniente de usar estos módulos de movimiento con los modelos existentes de Stable Diffusion. SparseControlNetModel es una implementación de ControlNet para AnimateDiff. ControlNet fue introducido en 'Adding Conditional Control to Text-to-Image Diffusion Models' por Lvmin Zhang, Anyi Rao y Maneesh Agrawala. La versión SparseCtrl de ControlNet fue introducida en 'SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models for achieving controlled generation in text-to-video diffusion models' por Yuwei Guo, Ceyuan Yang, Anyi Rao, Maneesh Agrawala, Dahua Lin y Bo Dai.
Como usar
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-scribble"
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")
pipe.fuse_lora(lora_scale=1.0)
prompt = "an aerial view of a cyberpunk city, night time, neon lights, masterpiece, high quality"
negative_prompt = "low quality, worst quality, letterboxed"
image_files = [
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-1.png",
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-2.png",
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-3.png"
]
condition_frame_indices = [0, 8, 15]
conditioning_frames = [load_image(img_file) for img_file in image_files]
video = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=25,
conditioning_frames=conditioning_frames,
controlnet_conditioning_scale=1.0,
controlnet_frame_indices=condition_frame_indices,
generator=torch.Generator().manual_seed(1337),
).frames[0]
export_to_gif(video, "output.gif")
Funcionalidades
- Creación de videos a partir de modelos de Stable Diffusion de texto a imagen.
- Inserción de capas de módulos de movimiento en el modelo.
- Entrenamiento en videoclips para extraer un prior de movimiento.
- Aplicación de módulos de movimiento después de los bloques de ResNet y Atención.
- Uso de MotionAdapter y UNetMotionModel para soportar los módulos de movimiento.
- Implementación de SparseControlNetModel como ControlNet para AnimateDiff.
Casos de uso
- Creación de videos con movimiento coherente a partir de imágenes generadas por modelos de texto a imagen de Stable Diffusion.
- Implementación de motion modules y ControlNet SparseCtrl para generar movimientos controlados en modelos de difusión de texto a video.