VidTok – универсальный и открытый видео токенизатор, демонстрирующий высокую производительность как в непрерывной, так и в дискретной токенизации.
Токенизация видео, преобразующая исходные данные в компактные латентные токены - важнейший шаг для задач генерации и понимания видео. VidTok предлагает ряд улучшений, которые позволяют ему превзойти существующие методы: модельную архитектуру, методы квантования и стратегии обучения.
В архитектуре VidTok пространственное и временное сэмплирование обрабатываются раздельно, используя 2D свертки для пространственных модулей и оператор AlphaBlender для временных, при этом сохраняя 3D свертки для слияния информации.
Для дискретной токенизации используется конечное скалярное квантование (FSQ), которое оптимизирует неявный кодовый словарь, улучшая стабильность обучения. Эффективность обучения достигается двухэтапной стратегией: предварительное обучение на видео с низким разрешением, а затем дообучение декодера на видео с высоким разрешением.
VidTok обучался на датасете видеоданных с разным разрешением (400 000 видео 480p и 10 000 видео 1080p). Производительность измерялась с использованием метрик PSNR, SSIM, LPIPS и FVD, результаты показали превосходство VidTok по сравнению с другими токенизаторами как в дискретной, так и в непрерывной токенизации.
При сравнении с MAGVIT-v2, OmniTokenizer, CV-VAE, Open-Sora и Cosmos-Tokenizer, VidTok достиг лучших показателей, с меньшим размером модели.
vidtok
- базовое название;kl
или fsq
- тип регуляризации и квантования латентного пространства;causal
или noncausal
- тип обработки временной информации (покадрово или все кадры сразу);488
или 41616
- компрессионное соотношение (VCR), которое определяет степень сжатия видео по времени, высоте и ширине. Например, 4x8x8 и 4x16x16;4chn
, 8chn
или 16chn
- количество каналов в латентном пространстве для непрерывных токенизаторов. Чем больше каналов - тем качественней видео;262144
, 32768
или 4096
- размер codebook для дискретных токенизаторов с использованием FSQ. Чем больше - тем точнее представлятся информация.# Clone repo
git clone https://github.com/microsoft/VidTok
cd VidTok
# Create conda env
conda env create -f environment.yaml
conda activate vidtok
# Inference
import torch
from scripts.inference_evaluate import load_model_from_config
cfg_path = "configs/vidtok_kl_causal_488_4chn.yaml"
ckpt_path = "checkpoints/vidtok_kl_causal_488_4chn.ckpt"
is_causal = True
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
# load pre-trained model
model = load_model_from_config(cfg_path, ckpt_path)
model.to(device).eval()
# random input
num_frames = 17 if is_causal else 16
x_input = (torch.rand(1, 3, num_frames, 256, 256) * 2 - 1).to(device) # [B, C, T, H, W], range -1~1
# model forward
_, x_recon, _ = model(x_input)
assert x_input.shape == x_recon.shape
@ai_machinelearning_big_data
#AI #ML #Microsoft #VidTok
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤7🔥4