VideoPoet: A Large Language Model for Zero-Shot Video Generation

videopoet 논문 리뷰
김호진's avatar
Jul 30, 2024
VideoPoet: A Large Language Model for Zero-Shot Video Generation
읽은 이유
AR로 Video 생성. 모든 생성 작업들에서 neural tokenizer를 활용한 auto-regressive가 1등을 먹을 수도 있지 않을까?
 
요약
단순히 AutoRegressive하게 했더니 좋았다가 아니라, token화 해서 생성하는 구조의 장점(특히 LLM과 지식을 공유할 수 있다는 점)에 대한 설명이 인상깊었다. 특히 video는 매우 높은 차원의 데이터인데 언급된대로 video tokenizer의 성능(성능 + compression)이 매우 중요할 것 같다. MAGVIT-v2를 읽어야 하는 부분.
직접 연구를 하기에는.. diffusion보다 computation이 많이 들어서 어렵다.
하지만 장기적으로는 결국 모든 모달리티가 동일한 차원에서 서로 얽히면서 학습되어야 궁극적으로 좋은 성능을 낼 수 있다고 생각하는데 그건 이런 token space로 보내서 처리하는 AR이 가장 가까운 것 같다. autoregressive는 reasoning 능력이 좋다. 이게 language를 넘어서 다른 모달에도 사용되어야 한다고 생각
 
 
Abstract
VideoPoet : 다양한 conditioning signal로 고품질의 비디오를 생성하는 모델
VideoPoet은 decoder-only transformer 구조를 사용하여 멀티모달 인풋을 다룬다(이미지, 비디오, 텍스트, 오디오).
학습 방법은 LLM을 따르며 두 단계 : pretraining, task-specific adaptation으로 이루어져 있다.
사전학습 동안 여러 모달리티 데이터를 가지고 autoregressive하게 학습한다. 사전학습된 모델은 다양한 종류의 비디오 생성 태스트에 적용된다.
현재 비디오 생성 SOTA결과를 보이며, 특히 모션에 관련해서 고성능을 보임. https://sites.research.google/videopoet/
 
 
LLM 형태를 비디오 생성에 적용하는 것의 장점은 현재 LLM 프레임워크를 활용하기가 좋다는 것이다. LLM 인프라를 재사용한다는건 발전시켜온 LLM의 최적화 방법들, model scaling 법칙, 효율화 등등을 다 그대로 사용할 수 있다는걸 의미한다. 그리고 여러 태스크들을 하나의 모델로 잘 처리하는 능력도. diffusion은 구조를 바꾸거나 adapter module을 추가해야한다.
notion image
 
사전학습은 single LLM으로 여러 모달리티로 여러 task를 학습하도록 한다(t2v, i2v, editing, v2v). text-to-video만 학습하지 않음
학습 데이터 분포 밖의 zero-shot video generation도 잘한다. 거기다, 학습하지 않은 task도 할 수 있다(여러 태스크를 연속해서 시켜서 새로운 editing도 할 수 있다.)
main contributions
  • LLM의 형태로 video generation, text-pair거나 아닌 비디오들의 tokenizer를 통해.
  • latent token space안에서 bidirectional transformer와 efficient windowed local attention을 통해서 비디오 super-resolution
  • Evaluation, SOTA 특히 realistic, intersting videos with motion(모션을 강조하네)
 
Diffusion은 특히 한번에 하나의 task만 학습하고, 추가적인 태스크는 추가 레이어 혹은 모듈을 통해서 이루어진다. 본 연구의 방법은 사전학습시 통합된 모델에 여러 태스크로 학습하여, 성능을 더 높일 수 있었다.(LLM 구조의 장점)
원래는 text-video pair만 사용해서 학습하는데 우리는 video만 있는 데이터도 썼다. LM이 쉽게 여러 종류의 태스크를 적용할 수 있는 만큼, task를 선택하는건 연구에서 중요한 일 중 하나다.
아래는 약간 LLM에서의 진리? tip들?
  • GPT3, PaLM 등을 보면 다양한 태스크로 학습하는게 scaling effect에 긍정적인 효과를 준다.
  • 다른 연구들에서는 masking 접근법이 의미있는 learning target이라고 한다.
  • 모델 크기가 커질수록, 학습 데이터도 커져야 한다.
videopoet은 비디오만 가지고 하는 학습 과제도 많다.
 
Model overview
1) modality-specific tokenizer 2) LM backbone 3) super resolution module으로 구성
notion image
 
tokenizer는 데이터(이미지, 비디오, 오디오)를 통합된 vocab의 discrete token으로 바꾼다. visual, audio token들은 숫자들의 시퀀스로 flat된다. 그리고 텍스트랑 함께 사용.
 
Tokenization
  • joint image and video : MAGVIT-v2(읽어야겠다.)
  • audio : SoundStream
두 vocab은 concat되어 통합된 vocab이 된다.
Visual tokenizer가 매우 중요함! 이게 종종 비디오 생성 성능의 한계를 결정한다. MAGVIT-v2는 성능도 좋고 compresiion도 좋다.
magvit2는 17프레임, 2.125초(8 fps), 128*128 resolution 비디오를 (5, 16, 16) shape의 latent로 만든다 - flatten하면 integer 1280개의 시퀀스가 됨.
vocab size는 2의 18승.
SoundStream - RVQ를 쓰고, 2.125초를 106 frame으로 만든다. RVQ는 어떻게 flatten할지 방법이 여러개인데 그냥 lower-to-higher으로 나열해서 쓴다.
vocab size는 4096, code dim은 1024.
Text - T5XL 쓴다.
LM backbone, 디코더 only,
 
notion image
Super-Resolution
AR은 시퀀스가 길수록 어려워지는데 높은 화질의 비디오를 만들려면 computation이 커질 뿐만 아니라 시퀀스도 길어져서 더욱 어렵다.
그래서 custom spatial SR(non-AR)을 LM의 Output인 token space위에 사용했다. 3개의 축으로 self-attention local window가 적용되는 3 layer transformer를 사용함.
 
vocab 사이즈가 너무 큰데 그럼 262144 중 하나를 classification하는 task가 된다(다음 토큰을 예측하는). 그래서 MAGVIT2의 방법을 사용해서 512-way classification task로 만든다.
위에서 낮은 해상도 토큰은 원본 비디오에 bicubic downsample을 하고 나온 token 값에 노이즈를 씌워서 만든다.
inference때는 텍스트와 LR 토큰에 classifier free guidance도 적용함(그럼 이걸 위해 학습시 컨디션 N% dropout을 해야한다)
 
지금 학습하는게 어떤 태스크인지는, task special token을 따로 만들어서 그걸 사용.
  1. Unconditioned video generation(그냥 SSL)
  1. Text-to-video
  1. Next video prediction
  1. Image-to-video
  1. inpainting, outpainting(아웃 페인팅이랑 next video랑 뭐가 다르지?)
  1. Video stylization(optical flow, depth, text information 사용)
  1. audio-to-video
  1. video-to-audio
  1. audio video continuation
텍스트도 생성해낼 수 있지만 그건 상관없다.
모든 태스크에 다른 태스크 토큰을 쓰지 않음. 출력값이 같은 경우에는(1, 2, 4) 같은 태스크 토큰을 쓰고 입력값만 다르다.
이미지는 그냥 비디오로 보고 처리하도록 했다(1프레임의 비디오) 이게 좋았음
 
학습
다양한 길이의 비디오를 학습하기 위해 Alternating Gradient Descent라는 방법을 썼다. AGD format에 맞게 태스크를 디자인해서, 거의 0%에 가깝게 패딩이 적용되도록했다.(이것도 중요한 작업이네)
같은 시퀀스 길이를 가진 데이터-task들끼리 묶어서 처리하는 방법. 왜 원래 이렇게 안했지?
pretrain 후 적은 고퀄리티 데이터로 finetuning했다.
 
Task analysis
300M짜리 모델을 써서 다양한 사전학습 태스크들을 분석했다. 요즘 이렇게 작은 모델로 사전/사후 분석부터 하고 진행을 많이 하는 듯한데
notion image
태스크도 다양하고 metric도 다양해서 딱 비교는 어렵다. 근데 만약 최종적으로 사용하는건 text-to-video만 이라고 하자. 그래도 전체 사전학습 태스크를 써야하나? → 보면 모든걸 다 쓰는게 종합적으로 좋다. T2V만 봤을 때 ALL이 best는 아니지만.. 전체 태스크 학습을 합친 iteration 양이 같도록 설정했기 때문에, 단순히 t2v로 학습하는 횟수가 적어서일 수 있다.
 
notion image
 
속도 - 1초당 5초 소요(생성 + decoding + SR)
notion image
notion image
성능만 놓고 보는건 적합하지 않을 수 있지만, temporal consistency를 제외하고는 대부분 이겼다. 특히 모션은 크게 이김. 근데 Lumiere 왜이렇게 잘하지
 
 
 
 
 
 
 
 
Share article
Subscribe to our newsletter

Kim Hojin