AIdeaLab VideoJP

aidealab
Texto a video

Modelo japonés de generación de vídeo a partir de texto, basado en una arquitectura CogVideoX de 2.000 millones de parámetros y entrenado con el objetivo Rectified Flow. Acepta instrucciones directamente en japonés e inglés y prioriza datos visuales con permisos de aprendizaje, como Pixabay y FineVideo. Fue desarrollado por AIdeaLab con apoyo de GENIAC, NEDO y METI, y se distribuye bajo la licencia Apache 2.0.

Como usar

Instala primero las dependencias:

pip install transformers diffusers

Ejemplo completo proporcionado en la ficha del modelo para generar un vídeo MP4 con CUDA:

from diffusers.utils import export_to_video
import tqdm
from torchvision.transforms import ToPILImage
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from diffusers import CogVideoXTransformer3DModel, AutoencoderKLCogVideoX

prompt="チューリップや菜の花、色とりどりの花が果てしなく続く畑を埋め尽くし、まるでパッチワークのようにカラフルに彩る。朝の柔らかな光が花びらを透かし、淡いグラデーションが映える。風に揺れる花々をスローモーションで捉え、花びらが優雅に舞う姿を映画のような演出で撮影。背景には遠くに連なる山並みや青い空、浮かぶ白い雲が立体感を引き立てる。"
device="cuda"
shape=(1,48//4,16,256//8,256//8)
sample_N=25
torch_dtype=torch.bfloat16
eps=1
cfg=2.5

tokenizer = AutoTokenizer.from_pretrained("llm-jp/llm-jp-3-1.8b")
text_encoder = AutoModelForCausalLM.from_pretrained(
    "llm-jp/llm-jp-3-1.8b",
    torch_dtype=torch_dtype
)
text_encoder=text_encoder.to(device)

text_inputs = tokenizer(
    prompt,
    padding="max_length",
    max_length=512,
    truncation=True,
    add_special_tokens=True,
    return_tensors="pt",
)
text_input_ids = text_inputs.input_ids
prompt_embeds = text_encoder(
    text_input_ids.to(device),
    output_hidden_states=True,
    attention_mask=text_inputs.attention_mask.to(device)
).hidden_states[-1]
prompt_embeds = prompt_embeds.to(dtype=torch_dtype, device=device)

null_text_inputs = tokenizer(
    "",
    padding="max_length",
    max_length=512,
    truncation=True,
    add_special_tokens=True,
    return_tensors="pt",
)
null_text_input_ids = null_text_inputs.input_ids
null_prompt_embeds = text_encoder(
    null_text_input_ids.to(device),
    output_hidden_states=True,
    attention_mask=null_text_inputs.attention_mask.to(device)
).hidden_states[-1]
null_prompt_embeds = null_prompt_embeds.to(dtype=torch_dtype, device=device)

# Free VRAM
del text_encoder

transformer = CogVideoXTransformer3DModel.from_pretrained(
    "aidealab/AIdeaLab-VideoJP",
    torch_dtype=torch_dtype
)
transformer=transformer.to(device)

vae = AutoencoderKLCogVideoX.from_pretrained(
    "THUDM/CogVideoX-2b",
    subfolder="vae"
)
vae=vae.to(dtype=torch_dtype, device=device)
vae.enable_slicing()
vae.enable_tiling()

# euler discreate sampler with cfg
z0 = torch.randn(shape, device=device)
latents = z0.detach().clone().to(torch_dtype)
dt = 1.0 / sample_N

with torch.no_grad():
    for i in tqdm.tqdm(range(sample_N)):
        num_t = i / sample_N
        t = torch.ones(shape[0], device=device) * num_t
        psudo_t=(1000-eps)*(1-t)+eps
        positive_conditional = transformer(
            hidden_states=latents,
            timestep=psudo_t,
            encoder_hidden_states=prompt_embeds,
            image_rotary_emb=None
        )
        null_conditional = transformer(
            hidden_states=latents,
            timestep=psudo_t,
            encoder_hidden_states=null_prompt_embeds,
            image_rotary_emb=None
        )
        pred = null_conditional.sample+cfg*(positive_conditional.sample-null_conditional.sample)
        latents = latents.detach().clone() + dt * pred.detach().clone()

# Free VRAM
del transformer

latents = latents / vae.config.scaling_factor
latents = latents.permute(0, 2, 1, 3, 4)
x=vae.decode(latents).sample
x = x / 2 + 0.5
x = x.clamp(0,1)
x=x.permute(0, 2, 1, 3, 4).to(torch.float32)
print(x.shape)
x=[ToPILImage()(frame) for frame in x[0]]
export_to_video(x,"output.mp4",fps=24)

El ejemplo utiliza CUDA, BF16, el codificador de texto llm-jp/llm-jp-3-1.8b y el VAE de THUDM/CogVideoX-2b. Produce output.mp4 a 24 fotogramas por segundo. La ficha pide manejar con cautela el contenido generado y excluye expresamente la creación de información falsa o engañosa.

Funcionalidades

Generación de vídeo a partir de instrucciones de texto.
Comprensión directa de prompts en japonés e inglés.
Arquitectura Transformer basada en CogVideoX con objetivo Rectified Flow.
Modelo de aproximadamente 2.000 millones de parámetros en formato Safetensors y precisión BF16.
Uso principal de imágenes con permisos de aprendizaje, incluidas fuentes CC BY y CC0.
Diseñado para reducir el riesgo de reproducir exactamente imágenes del conjunto de entrenamiento.
Compatible con investigación, ajuste adicional mediante LoRA y combinación con otros modelos.
No está desplegado actualmente mediante ningún proveedor de inferencia de Hugging Face.
Limitación declarada: no puede generar anime.

Casos de uso

Creación asistida de ilustraciones, manga y material visual, teniendo en cuenta que el modelo declara no poder generar anime.
Generación de contenido audiovisual para proyectos comerciales y no comerciales.
Servicios comerciales de generación de contenido visual.
Expresión artística personal mediante prompts en japonés o inglés.
Investigación y evaluación del rendimiento con métricas como FID.
Ajuste adicional mediante LoRA y experimentación con fusiones de modelos.
Proyectos de fin de estudios en escuelas de arte, formación profesional y universidades.
Demostraciones educativas sobre el estado actual de la generación de vídeo con IA.
Prototipado de secuencias visuales al comunicarse con creadores durante un encargo.