guoyww/animatediff-sparsectrl-rgb
AnimateDiff es un método que te permite crear videos utilizando modelos de Stable Diffusion de texto a imagen preexistentes. Lo logra insertando capas de módulos de movimiento en un modelo de texto a imagen congelado y entrenándolo en clips de video para extraer un precedente de movimiento. Estos módulos de movimiento se aplican después de los bloques ResNet y de Atención en el UNet de Stable Diffusion. Su propósito es introducir movimiento coherente a través de los fotogramas de la imagen. Para apoyar estos módulos, introducimos los conceptos de MotionAdapter y UNetMotionModel, que sirven como una forma conveniente de usar estos módulos de movimiento con los modelos de Stable Diffusion existentes. 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 para lograr una generación controlada en modelos de difusión de texto a video 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-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")
Funcionalidades
- Crea videos utilizando modelos de Stable Diffusion de texto a imagen preexistentes.
- Inserta módulos de movimiento en un modelo congelado de texto a imagen.
- Entrena el modelo en clips de video.
- Aplica módulos de movimiento después de los bloques ResNet y de Atención en el UNet de Stable Diffusion.
- Introduce movimientos coherentes a través de los fotogramas de la imagen.
- Soporte de MotionAdapter y UNetMotionModel para usar con modelos de Stable Diffusion existentes.
- Implementación de SparseControlNetModel para AnimateDiff.
Casos de uso
- Generación de videos a partir de descripciones de texto.
- Controlado por texto para cambios específicos en el video generado.
- Utilización con modelos de Stable Diffusion existentes para introducir movimiento coherente en videos.
- Creación de contenido animado para medios y entretenimiento.