Intro
최근 video diffusion 모델은 쉽게 접근 가능해졌는데, 이런 모델은 비디오 생성할때 카메라 포즈를 정밀하게 제어하는 기능을 제공하지 않아서, 사용자가 제어하는데 한계가 있었음. 이 문제를 해결하기 위해 CamCO가 도입되었다. CamCo는 image-video 생성 과정에서 세밀한 카메라 포즈 제어를 가능하게 한다.
CamCO는 pretrained된 image-video 생성기에 Plücker 좌표를 사용해 정확하게 parametereized 된 camera 포즈 입력을 제공한다. 비디오의 3d consistency를 향상시키기 위해 각 attention block에 epipolar 제약을 추가한 epipolar attention module을 통합했고, structure-from-motion 알고리즘응ㄹ 통해 카메라 포즈가 포함된 실제 video 데이터로 camco를 파인튜닝 시켜 object 움직임을 더 잘 합성할 수 있게 했다.
기존의 초기 방법들은 고정된 수의 카테고리를 사용하여 카메라 경로를 표현했다. 이러한 접근 방식은 카메라 모션을 제어하는 데 한계가 있었다. 구체적으로, 카메라 모션을 몇 가지 사전에 정의된 카테고리로 나누어 표현하기 때문에 세밀한 제어가 어려웠음. 예를 들어, 카메라가 왼쪽에서 오른쪽으로 이동하거나, 위에서 아래로 이동하는 등의 특정한 움직임을 미리 정해진 범주 내에서만 표현할 수 있었다
이러한 초기 방법들은 LoRA(Low-Rank Adaptation)를 사용하여 카메라 정보를 융합하고, 특정 카테고리의 카메라 모션에 속하는 비디오를 생성하는 방식으로 작동했다. 이 방법은 카메라 모션을 대략적으로 제어할 수 있지만, 세부적인 움직임을 표현하는 데에는 한계가 있었음
카메라 모션의 granuality를 개선하기 위해, 어댑터 레이어를 사용하여 정규화된 카메라 extrinsic matrices를 수용하는 방법이 제안되었다. 어댑터 레이어는 기존의 모델에 추가되어, 카메라 extrinsic matrices (카메라의 위치와 방향 정보)를 입력받아 이를 바탕으로 비디오를 생성한다. 이 접근 방식은 기존보다 더 정밀한 제어를 가능하게 하지만, 여전히 one dimension numeric value를 사용하여 카메라 포즈를 표현하기 때문에 복잡한 카메라 모션을 제어하는 데 한계가 있었음.
즉, one dimension numeric value는 카메라의 위치와 방향을 단순하게 표현하는 방식이기 때문에, 카메라가 복잡한 경로를 따라 움직일 때 이를 정확하게 제어하는 데 어려움을 겪게 된다. 복잡한 카메라 모션은 여러 차원의 정보를 필요로 하며, 이를 단순히 1dimension을 표현하는데 한계가 있었음.
이러한 문제를 해결하기 위해 CamCo가 도입되었다. CamCo는 Plücker 좌표를 사용하여 카메라 포즈를 표현한다. Plücker 좌표는 카메라의 내부(렌즈 정보)와 외부(위치 및 방향) 정보를 모두 포함하는 픽셀 단위의 임베딩을 생성한다. 이를 통해 더 정밀한 카메라 모션 제어가 가능해졌다.
추가로, CamCO는 epipolar constraint attention module을 도입함으로서 frame간의 geometric consistency를 강화한다.
또한, in the wild 비디오 frame에 데이터 주석을 다는 pipeline을 구현해서, large object motion을 가진 video를 generate하는 능력을 향상시켰음.
Method
Image to video generation
Problem Setting
image-video generation은 단일 이미지 I0을 입력으로 사용해 sequence of output frames O1, O2 .. On을 생성하는것. 이 논문에서는 n을 14로 설정했음. 여기에 추가적으로 C1, C2, ... Cn의 카메라 정보를 추가해서, 카메라 paramegter Ci들을 비디오 generator의 fine grained conditioning 으로 사용하고, 이 생성된frame들이 카메라 시퀀스에 의해 지정된 시점 변화를 따르도록 한다. 이를 통해 카메라가 움직이는 동안, 각 프레임이 올바른 시점에서 촬영된 것처럼 보이게 한다.
Base model architecture
stable video diffusion 모델을 기반으로 여기에 temporal layer 이랑 attention layer를 추가해서 비디오를 생성한다. (모든 파라미터가 fine tuning 됨)
Training
Stable Video Diffusion (SVD)는 continuous range of noise level을 지원하는 continuous 노이즈 스케줄러를 포함한다. 이 스케줄러는 가우시안 노이즈를 점진적으로 제거하도록 모델을 훈련시킨다. 여기서는 노이즈를 점진적으로 제거하면서, 비디오 데이터 분포 \( x_0 \sim p_0 \)로 이동하게 된다.
1. 노이즈 추가
데이터 \( x_t \)는 원본 데이터 \( x_0 \)에 가우시안 노이즈 \( n(t) \)를 추가하여 생성된다. \[ x_t = x_0 + n(t) \quad \text{where} \quad n(t) \sim \mathcal{N}(0, \sigma^2(t)\mathbf{I}) \] 여기서, \( n(t) \)는 평균이 0이고 분산이 \( \sigma^2(t) \)인 가우시안 분포를 따름. \( \sigma(t) \)는 시간에 따른 노이즈의 표준 편차를 나타내다
시간 \( t \)에 따라 노이즈가 추가된 데이터를 생성한다. 이때, 노이즈 \( n(t) \)는 평균이 0이고 분산이 \( \sigma^2(t) \)인 가우시안 분포를 따른다.
즉, 원본 데이터에 점진적으로 더 많은 노이즈를 추가하면서 데이터를 변형시키고, 나중에 이 노이즈를 제거하여 원본 데이터를 복원하는 과정에서 모델이 학습된다
2. Probability Flow ODE
디노이징 과정은 ODE를 따른다: \[ dx = -\dot{\sigma}(t)\sigma(t) \nabla_x \log p(x; \sigma(t)) dt \] \(\dot{\sigma}(t)\)는 시간 \( t \)에 따른 \(\sigma(t)\)의 변화율. \(\nabla_x \log p(x; \sigma(t))\)는 데이터 \( x \)에 대한 log proability의 gradient. 이 방정식은 시간 \( t \)에 따라 데이터 \( x \)가 어떻게 변화해야 하는지를 나타낸다
즉, 이 방정식은 확률 밀도 \( p(x; \sigma(t)) \)에 대한 로그의 그래디언트를 사용하여 데이터 \( x \)를 점진적으로 이동시킨다. 시간에 따른 노이즈의 변화율 \(\dot{\sigma}(t)\)과 노이즈 수준 \(\sigma(t)\)이 이 변화에 영향을 미친다.
정리하자면, 이 방정식은 원본 데이터로 복원하기 위해 데이터를 점진적으로 어떻게 이동시켜야 하는지를 나타내며, 노이즈를 제거하는 과정에서 데이터의 경로를 설명한다.
3. Training Objective
denoising score matching으로 정의된다: \[ \mathbb{E} \left[ \| D_{\theta}(x_0 + n; \sigma, c) - x_0 \|_2^2 \right] \] 여기서 \( c \)는 condition 정보(예: 입력 이미지 \( I_0 \))를 나타낸다. 이 식은 모델 \( D_{\theta} \)가 원본 데이터 \( x_0 \)에 가우시안 노이즈를 추가한 후 다시 원본 데이터 \( x_0 \)로 복원하는 과정에서의 오류를 최소화하는 것을 목표로 한다
\( D_{\theta}(x_0 + n; \sigma, c) \)는 노이즈가 추가된 데이터 \( x_0 + n \)를 입력으로 받아 디노이징한 결과. \(\| \cdot \|_2 \)는 L2 노름으로, 디노이징 결과와 원본 데이터 \( x_0 \) 간의 차이를 측정한다.
즉. 모델 \( D_{\theta} \)가 노이즈가 추가된 데이터에서 원본 데이터를 얼마나 잘 복원하는지를 평가한다. 이 차이를 최소화하는 것이 모델의 목표
Classifier-free Guidance (CFG)
훈련 중에 조건 신호 \( c \)를 무작위로 10%의 확률로 0 텐서(\(\varnothing\))로 설정하여 unconditional 모델 \( D(x; \varnothing) \)도 함께 학습한다.
Inferecne 단계에서 CFG: \[ D_{\omega}(x; c) = \omega (D(x; c) - D(x; \varnothing)) + D(x; \varnothing) \] 여기서 \(\omega \)는 가중치 계수. 이 가중치 계수 \(\omega \)는 SVD의 경우 처음 4 프레임 동안 1에서 5로 선형적으로 증가하고 마지막 3 프레임 동안 1로 설정된다.
즉 조건이 있는 결과와 조건이 없는 결과를 적절히 결합하여 최종 디노이징 결과를 얻는다. \(\omega \)는 조건이 없는 결과와 비교하여 조건의 영향을 얼마나 반영할지를 조절한다.
Injecting Camera Control to Video Diffusion Model
비디오 디퓨전 모델은 실제 세계의 동적인 장면을 다루기 때문에, 3-DoF 카메라 공간에서 동작하는 3D 객체 생성과는 달리 6-DoF 카메라를 처리해야 한다. 3-DoF 카메라는 회전 동작만을 제어할 수 있다. 예를 들어, 카메라가 상하좌우로 회전하거나 기울어지는 움직임. 반면, 6-DoF 카메라는 회전뿐만 아니라 위치 이동도 제어할 수 있어, 카메라가 전방과 후방, 좌우, 상하로 이동하는 모든 동작을 포함한다. 이러한 6-dof 카메라의 제어는 elevation이나 camera extrinsics만을 사용하는 것보다 훨씬 더 복잡한 접근 방식을 필요로 한다.
기존의 방법들은 카메라 외부 행렬을 1차원 수치 값으로 표현하여, 주로 회전 동작만을 다루거나 단순한 경로만을 처리했다. 이로 인해 복잡한 카메라 경로를 정확하게 제어하기 어려웠음. 예를 들어, 카메라가 곡선을 따라 이동하거나, 복잡한 움직임을 구현해야 하는 경우 1차원 수치 값으로는 이러한 동작을 정밀하게 모델링하기 어려웠음.
Camera Parameterization
이를 해결하기 위해, Plücker 좌표를 사용하여 카메라의 extrinsic, intrinsic 을 모두 포함하는 방법을 사용함. Plücker 좌표는 ray의 원점과 방향을 포함하는 방식으로, 네트워크의 위치 임베딩으로 적합하다.
Plücker 좌표 :
Plücker 좌표는 ray의 원점 \( o \)와 방향 \( d \)를 포함하여 \( P = (o \times d', d') \)로 표현된다. 여기서 \( \times \)는 벡터의 외적(cross product)을 나타내고, \( d' = \frac{d}{||d||} \)는 normalized된 ray direction.
카메라 extrinsic matrix \( E = [R|T] \)와 intrinsic matrix \( K \):
2D 픽셀 postion \( (u, v) \)에 대한 ray direction \( d \)는 다음과 같이 정의된다: \[ d = RK^{-1} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} + T \] 모든 카메라 포즈는 첫 번째 프레임을 기준으로 정의된다.
Plücker 좌표는 3D 공간에서 광선의 원점과 방향을 나타내는 효율적인 방법으로 카메라의 위치와 방향을 포함하여 더 복잡한 카메라 경로에서도 정확한 제어를 가능하게 한다.
즉, Plücker 좌표 를 사용하면, 카메라의 움직임과 방향을 네트워크에 효율적으로 통합할 수 있으며, 이는 모델이 시간적 일관성을 유지하면서 다양한 카메라 시점을 처리할 수 있게한다.
Camera Control Module
Plücker 좌표 를 사용하여 카메라 임베딩을 통합하기 위해, pretrained video gernerator의 attention 블록에 간단한 어댑터 레이어를 추가한다
각 temporal attention 블록에서 Plücker 좌표를 네트워크의 feature과 채널 차원에서 연결한 후, 1x1 컨볼루션 레이어에 통과시켜 원래 특징 공간으로 투영한다. 투영된 feature들은 나머지 temporal attention layer로 전달된다. Plücker임베딩의 공간 해상도가 네트워크 특징과 맞지 않을 경우, interpolation을 통해 downsampling함.
여기서 controlnet에서 inspired 되어 훈련 시작 시 네트워크가 영향을 받지 않도록 부분적인 가중치를 0으로 초기화하고, 점진적으로 카메라 제어를 추가한다
Ensuring 3D-Consistent Generation
근데이것만으로는 , 카메라 움직임을 제어할수있지만, consistency를 보장해주지는않음. self attention에서 모든 픽셀이 자유롭게 다른 픽셀을 참조할 수 있는 구조이겡, pixel copying 현상이 발생할 수 있음.
--> 2d로 보기에는 맞게 생성된거처럼 보이니지만, 객체나 배경이 잘못 복사되어서, 3d 공간상에서 관계가 틀어질 수 있음.
이걸 해결하기 위해 attention masking을 해서, 연관된 특징을 가진 픽셀만 참조하도록 했음.
Epipolar Constraint Attention
쿼리로 현재 frame의 픽셀 정보, 키랑 value로 첫번째 frame의 에피폴라 라인 상의 특징 정보를 넣어준다. 근데 이ㅓㄹ면 복잡도가 커져서, 일단 기존 video 모델은 freeze 시키고 이 ECA 레이어만 업데이트 하는 방식.