[Github]
[arXiv](Current version v1)
Abstract
AnimateDiff에서 정확환 외관 및 모션 제어 능력을 향상한 AnimateZero 제안
Preliminaries: AnimateDiff
사전 훈련된 T2I 확산 모델에 모션 모듈을 추가하여 비디오 데이터에서 훈련한다.
Self-attention의 입력 Zin = {z1, ..., zf}에 위치 임베딩 p를 더하여 일반적인 self-attention을 수행한다.
(아래첨자 = token index, 윗첨자 = frame positional index)
Method
AnimateZero는 공간적 제어와 시간적 제어로 나뉜다.
Spatial Appearance Control
먼저 AnimateDiff의 T2I 모델에서 이미지 I1를 생성하고 그 중간 latent를 이용한다.
각 단계에서 video latent의 첫 번째 프레임을 zt1로 교체한 뒤, 공간적 self-attention에서 모든 프레임이 첫 번째 프레임의 K, V를 공유한다. (이 '공유'가 '대체'인지 'concat'인지는 안 나와있는데 참조 논문 찾아본 바로는 '대체'가 맞는 듯?)
Temporal Consistency Control
시간적 일관성을 보장하기 위한 Positional-Corrected Window Attention 제안.
From Global Attention to Window Attention
일반적인 attention은 첫 번째 프레임의 의미에 대한 정렬이 부족하다.
따라서 K, V의 길이는 유지하되 이전 프레임과만 attention을 하도록 하고 부족한 프레임 길이는 첫 번째 프레임으로 채운다.
Correct Position Embedding Makes Better Results
근데 생각해보면 복사된 첫 번째 프레임의 K, V는 모두 같은 위치 인코딩을 가지고 있으므로 같은 결과값이 나오고, 사실상 복사를 한 의미가 없다.
따라서 다음과 같이 Q는 무조건 최대 프레임 인덱스로 인코딩하고 K, V는 그냥 순서대로 위치를 인코딩한다.
제안된 window attention은 시간적 일관성을 향상하지만 global attention은 포기할 수 없는 품질의 강점이 있다.
따라서 U-Net의 인코더 모션 모듈에는 window attention을, 디코더 모션 모듈에는 global attention을 사용한다.
(개인적으로 당연하지만서도 엄청 스마트한 판단이라고 생각한다. 인코더는 낮은 주파수만 남기고 디코더는 높은 주파수를 생성하니까)
추가적으로 Time-Travel Sampling Strategy를 사용하여 더 부드러운 결과를 생성한다.
Time-Travel Sampling은 일정한 timestep마다 해당 step을 반복적으로 수행하는 것이다.
Experiments