Tune-A-Video: One-Shot-Tuning von Bilddiffusionsmodellen für die Text-zu-Video-Generierung
pip install -r requirements.txt
[Stabile Diffusion] Stable Diffusion ist ein latentes Text-zu-Bild-Diffusionsmodell, das bei jeder Texteingabe fotorealistische Bilder erzeugen kann. Die vorab trainierten Stable Diffusion-Modelle können von Hugging Face heruntergeladen werden (z. B. Stable Diffusion v1-4, v2-1). Sie können auch fein abgestimmte Stable Diffusion-Modelle verwenden, die auf verschiedene Stile trainiert wurden (z. B. Modern Disney, Redshift usw.).
[DreamBooth] DreamBooth ist eine Methode zur Personalisierung von Text-zu-Bild-Modellen wie Stable Diffusion anhand nur weniger Bilder (3–5 Bilder) eines Motivs. Die Optimierung eines Videos auf DreamBooth-Modellen ermöglicht die personalisierte Text-zu-Video-Erzeugung eines bestimmten Themas. Auf Hugging Face sind einige öffentliche DreamBooth-Modelle verfügbar (z. B. mr-potato-head). Sie können anhand dieses Trainingsbeispiels auch Ihr eigenes DreamBooth-Modell trainieren.
Führen Sie diesen Befehl aus, um die Text-zu-Bild-Diffusionsmodelle für die Text-zu-Video-Generierung zu optimieren:
accelerate launch train_tuneavideo.py --config= " configs/man-skiing.yaml "
Sobald das Training abgeschlossen ist, führen Sie die Inferenz aus:
from tuneavideo . pipelines . pipeline_tuneavideo import TuneAVideoPipeline
from tuneavideo . models . unet import UNet3DConditionModel
from tuneavideo . util import save_videos_grid
import torch
pretrained_model_path = "./checkpoints/stable-diffusion-v1-4"
my_model_path = "./outputs/man-skiing"
unet = UNet3DConditionModel . from_pretrained ( my_model_path , subfolder = 'unet' , torch_dtype = torch . float16 ). to ( 'cuda' )
pipe = TuneAVideoPipeline . from_pretrained ( pretrained_model_path , unet = unet , torch_dtype = torch . float16 ). to ( "cuda" )
pipe . enable_xformers_memory_efficient_attention ()
pipe . enable_vae_slicing ()
prompt = "spider man is skiing"
ddim_inv_latent = torch . load ( f" { my_model_path } /inv_latents/ddim_latent-500.pt" ). to ( torch . float16 )
video = pipe ( prompt , latents = ddim_inv_latent , video_length = 24 , height = 512 , width = 512 , num_inference_steps = 50 , guidance_scale = 12.5 ). videos
save_videos_grid ( video , f"./ { prompt } .gif" )
Eingabevideo | Video ausgeben | |
„Ein Mann fährt Ski“ | „Wonder Woman, fährt Ski“ | „Ein kleines Mädchen fährt Ski“ |
„Ein Kaninchen frisst eine Wassermelone“ | „Eine Katze frisst eine Wassermelone auf dem Tisch“ | „Ein Welpe isst einen Cheeseburger auf dem Tisch, im Comic-Stil“ |
„Ein Jeep-Auto fährt auf der Straße“ | „Ein Auto fährt auf der Straße, Cartoon-Stil“ | „Ein Auto bewegt sich auf dem Schnee“ |