Tune-A-Video: ajuste único de modelos de difusão de imagem para geração de texto para vídeo
pip install -r requirements.txt
[Difusão Estável] A Difusão Estável é um modelo de difusão de texto para imagem latente capaz de gerar imagens fotorrealistas a partir de qualquer entrada de texto. Os modelos de difusão estável pré-treinados podem ser baixados do Hugging Face (por exemplo, Difusão Estável v1-4, v2-1). Você também pode usar modelos de difusão estável ajustados e treinados em diferentes estilos (por exemplo, Modern Disney, Redshift, etc.).
[DreamBooth] DreamBooth é um método para personalizar modelos de texto para imagem, como Stable Diffusion, com apenas algumas imagens (3 a 5 imagens) de um assunto. Ajustar um vídeo nos modelos DreamBooth permite a geração personalizada de texto para vídeo de um assunto específico. Existem alguns modelos públicos de DreamBooth disponíveis no Hugging Face (por exemplo, mr-potato-head). Você também pode treinar seu próprio modelo DreamBooth seguindo este exemplo de treinamento.
Para ajustar os modelos de difusão de texto para imagem para geração de texto para vídeo, execute este comando:
accelerate launch train_tuneavideo.py --config= " configs/man-skiing.yaml "
Assim que o treinamento estiver concluído, execute a inferência:
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" )
Vídeo de entrada | Vídeo de saída | |
"Um homem está esquiando" | "Mulher Maravilha, está esquiando" | "Uma garotinha está esquiando" |
"Um coelho está comendo uma melancia" | "Um gato está comendo uma melancia na mesa" | "Um cachorrinho está comendo um cheeseburger em cima da mesa, estilo cômico" |
"Um carro jipe está se movendo na estrada" | "Um carro está se movendo na estrada, estilo desenho animado" | "Um carro está se movendo na neve" |