Intro
Background & Intro
현재의 video edit diffusion 모델은 주로 주인공의 속성, 배경 편집, 스타일 편집 등 텍스처 편집에 초점을 맞추고 있음. 동영상의 가장 독특한 특징인 움직임 정보는 거의 다루어지지 않고 있는데 그렇다면 reference 영상에 맞춰 원본 동영상의 움직임을 조작할 수 있을까? 라는 질문에서 시작된 연구이다.
이 논문에서는 reference 영상과 프롬프트를 기반으로 source video의 주인공의 움직임을 reference video와 일치시키면서 원래의 외모를 유지하는 것을 목표로 한다.
기존 연구들은 주로 reference skeleton을 기반으로 정지 이미지를 애니메이션화하거나 포즈에 맞춘 동영상을 생성하는 데 초점을 맞췄다. 하지만 이러한 접근 방식은 원하는 외모를 유지하지 못하거나, 복잡한 배경과 카메라 움직임을 보존하는 데 한계가 있었음. MotionEditor는 이러한 한계를 극복하고, 동영상의 움직임을 직접 수정하면서도 다른 비디오 정보를 유지하는 새로운 방법을 제안한다.
- Content aware motion editor: MotionEditor는 ControlNet에 콘텐츠 인식 모션 어댑터를 추가하여 원본 텍스처를 보존하면서 일관된 motion edit이 가능하게 한다. 이 adapter는 content aware block이랑 temporal block으로 구성되며, cross attention을 통해 source frame의 feature를 통합하여 motion control의 품질을 향상시켜준다
- Skeleton align algorithm: source와 reference skeleton 간의 크기와 위치 차이를 보정하기 위해 skeleton align algorithm을 개발했음
- Attention inject mechanism : reconstruction branch와 editing branch, 두 branch를 기반으로, editing branch가 reconstruction branch에서서 키와 값을 받와서, 원본 동영상의 배경과 주인공의 외모를 유지하면서 참조 동영상의 움직임을 적용할 수 있음. 이 과정에서 segmentation maks를 사용해 foreground랑 background 정보를 분리해줌. 이렇게 함으로써 최종 편집된 동영상의 품질을 높이고, 원래의 시각적 일관성을 유지할 수 있음.
Related Work
Diffusion for Image Editing
이미지 생성모델은 디퓨전의 발달로 GAN시대와는 상상도 못할정도로 빠르게 발전중인데, 대표적으로 SDEdit이라는 모델, 역방향 변환을 통해 더 정밀한 이미지 편집을 가능한 모델이 있구,
Prompt-to-Prompt와 Plug-and-Play등 일관되지 않은 노이즈 문제를 해결하여 더 일관된 이미지를 생성하는 기술이나 UniTune과 Imagic등 personalize finetuning에 집중한 모델도 나왔음.
Controllable 디퓨전 모델 등도 발달이 되왔는데, ControlNet을 도입하여 Stable Diffusion이 텍스트-이미지 generation할때 여러 control을 줄 수 있게 하는 등. 전체적으로, 이러한 접근법들은 불규칙한 노이즈 처리, finetuning, reverse editing등을 통해 모델을 발전시켰음
Diffusion for Video Editing and Generation
video generation은 특히 temporal consistency를 요구하는 더 복잡한 작업인데, 보통 대부분의 방법들은 기존 image editing 모델에 temporal modeling 모듈을 하나 더 달아서 해결했음. 그치만 이렇게 하면, low-level 에서 editing 만 가능하고, 모션과 같은 복잡한 정보를 편집할 수 없음
최근에는 pose 기반 video generation이 연구되고 있는데, Follow-Your-Pose나 ControlVideo등, 근데 이런 방법들은 video generation에 초점을 맞추고 있어 source video의 주인공이나 배경에 왜곡이 생길 수 있음.
이런 모델과 달리 MotionEditor는 Source video를 보존하면서 motion edit을 하는걸 목표로 함.
Human Motion Transfer
동영상의 동작을 target 이미지로 transfer시켜서 애니메이션화하는것이 목표. LWG는 3D pose projection을 통해 motion transfer를 하지만, internal motion은 잘 모델링하지 못함. FOMM은 boundary key point를 통해 motion transfer를 하고, MRAA는 regional feature를 활용하지만, 복잡한 장면에서는 성능이 제한적임. 이런 한계점 해결을 위해 MotionEditor은 복잡한 배경과 동작에 대해서도 일관된 detail을 생성할 수 있는 diffusion을 활용해 video editing을 함.
Preliminaries
는 계속 봐왔던 DDPM, DDIM 샘플링, 이미지를 인코더를 통해 latent sapce 에서 디퓨전시키는 LDM에 대한 소개가 되어있습니당. 바로 method로 넘어갈게요
Method
Overall architecture
MotionEditor는 주로 LDM이랑 Controlnet을 기반으로함.
- Latent Diffusion Model (LDM)
- LDM 인코더-디코더의 UNET 구조로, 인코더는 입력 이미지를 점차 압축하여 특징을 추출하고, 디코더는 이 특징을 사용해 이미지를 재구성한다
- Spatial Transformer는 2 dimension으로, 이미지의 공간적 특징을 변환하는 역할을 함
-ControlNet
- ControlNet은 포즈 정보를 입력받아 이미지 생성을 제어하는 모델로, LDM과 결합되어 포즈 조건에 따라 이미지를 생성할 수 있음
여기서 변환되거나 추가된거는
- 3D Transformer
- 3D Transformer: video 의 consistency를 위해 LDM의 U-Net에 self-attention 레이어를 추가하여 2D에서 3D로 확장한다.
- Consistent-Sparse Attention: 기존의 spatial self-attention를 대체하기 위해 제안된 메커니즘으로, temporal spatial 모두 고려햔 attention 매커니즘으로, 더 효율적이게 consistency를 보장할 수 있음.
-Motion Adapter
- Content-Aware Cross-Attention Block: U-Net에서 추출한 feature이랑 ControlNet에서 나온 conditional pose 정보를 사용해 corss attention을함. 이를 통해 모션 정보를 정확하게 조정한다
- Temporal Attention Block : 시간적 일관성을 유지하기 위한 블록
-One-Shot Training
- source video에 대해 motion adpter이랑 temporal attention block의 weight를 학습한다. 이를 통해 sourc video 의 원본 텍스처 특징을 보존하면서 모션을 적절히 조정할 수 있음
-Inference Process
- Skeleton Alignment (소스 비디오와 레퍼런스 비디오 간의 스켈레톤 차이를 줄여 motion info를 정확히 반영):
- Source skeleton이랑 reference skeleton의 크기와 위치를 비교해서 차이 계산
- 스켈레톤의 크기를 맞추고 위치를 조정하여 정렬된 target skeleton 생성
- DDIM Inversion
- 비디오의 픽셀 값을 이용해 초기 latent noise 생성
- alligned 된 target skeleton을 기반으로 latent space에서 노이즈를 샘플링해서 시작점을 설정함
- Motion Editing
- 레퍼런스 비디오의 모션 정보를 소스 비디오에 적용하면서 원본의 appearance 를 유지하게 하는 과정으로
- Editing Branch: allinged target skeleton에서 추출한 특징을 입력으로 받아 모션 정보를 소스 비디오에 적용한다
- Reconstruction Branch: 소스 비디오의 원본 외형 정보와 배경 정보를 유지하며, reconstruction branch로 Key와 밸류Value 를 주입함
- High-Fidelity Attention Injection: reconstruction branch에서 추출한 세부 정보를 editing branch로 주입하여, 모션 변경 과정에서 원본 비디오의 appearance랑 배경 정보를 최대한 보존한다
- 레퍼런스 비디오의 모션 정보를 소스 비디오에 적용하면서 원본의 appearance 를 유지하게 하는 과정으로
- Denoising
그럼 하니씩 자세히보자
MotionEditor의 Content-Aware Motion Adapter
ControlNet은 condition에 기반해서 직접적인 controllable 생성을 가능하게 하지만, motion editing 에는 한계가 있음. 모션 신호는 ControlNet에 의해 주입되며, 소스 모션과 충돌할 수 있다는 점인데 이러한 문제를 해결하기 위해 Temporal Content-Aware Motion Adapter를 제안했다
Motion Adapter는 ControlNet의 출력 feature를 입력으로 받아 동작한다. 이 어댑터는 Global Modeling Path와 Local Modeling Path로 구성이 됨. 빨간 부분이 global modeling path, 초록 부분이 local modeling path
Global Modeling Path
Content-Aware Cross-Attention Block:
Pose feature(mi)랑 U-Net에서 생성된 해당 프레임의 latent feature(zi)을 입력으로 받아 cross attention이 된다. 이 블록은 controlnet에서 나 pose feature를 쿼리(Q)로, unet에서 나온 프레임의 latent feature를 키(K)와 밸류(V)로 사용하여 연관된 모션 단서를 강조한다.
Q=WQcmi,K=WKczi,V=WVczi
즉, 크로스 어텐션은 pose feature이랑 frame 의 latent feature를 결합해서 비디오의 latent space에서 모션을 조작할 수 있게 한다
Temporal Attention Block:
시간적 일관성을 유지하면서 모션을 조작한다. 이 블록은 비디오 프레임 간의 시간적 연속성을 유지하기 위해 설계되었음.
Local Modeling Path
Temporal Convolution Block:
local 모션 feature를 잘 포착하기 위해 두 개의 temporal convolution block을 사용한다.
Motion Adapter는 ControlNet에서 출력된 포즈 feature를 사용하여 U-Net의 latent feature과 결합함으로써 모션을 조작한다. Cross attention block은 포즈 특징을 쿼리로 사용하고,frame latent feature를 키와 밸류로 사용한다.
MotionEditor의 High-Fidelity Attention Injection
MotionEditor의 모션 어댑터는 인체 포즈를 정확하게 캡처할 수 있지만, 주인공의 외형과 배경이 의도치 않게 변경될 수 있다. 이를 해결하기 위해 reconstruction branch에서 editing branch로의 High-Fidelity Attention Injection을 제안했다.
기존의 attention fusion paradigms 방식에서는 foreground랑 background가 제대로 구분되지 못해서, 특히 motion edit에 있어서 context confusion이 생겼음. 이를 해결하기 위해 키와 밸류를 foreground랑 background로 분리한 다음, reconstruction path에서 editing path로 주입했음
MotionEditor의 U-Net 내 각 어텐션 블록은 다음으로 되는데
- Consistent-Sparse Attention (CS Attention)
- Cross Attention
- Temporal Attention
CS Attention은 원래 U-Net의 spatial attention을 대체한다. 이렇게하면 추가적인 computational 부담 없이 temporal modeling 이 가능함.
- 쿼리(Query): 현재 프레임 (zr_i)에서 파생되는데, 현재 프레임의 정보를 기반으로 중요도를 계산하는데 사용
- 키(Key)와 밸류(Value): 이전 프레임 (zr_{i-1})과 현재 프레임 (zr_i)에서 얻어진다(시간적 일관성 유지하기 위해 두 프레임의 정보가 같이 사용되는거)
\[ Q^r = W^Q z^r_i, \quad K^r = W^K [z^r_{i-1}, z^r_i], \quad V^r = W^V [z^r_{i-1}, z^r_i] \]
Attention injection
1. foreground and background 분리
마스크 M을 사용해서 키와 밸류를 foreground(fg)와 background(bg)로 분리한다
\[ K^r_{fg} = K^r \odot M, \quad V^r_{fg} = V^r \odot M \] \[ K^r_{bg} = K^r \odot (1 - M), \quad V^r_{bg} = V^r \odot (1 - M) \]
2. CS Attention에서 주입
Editing branch에서 CS Attention의 키와 밸류는 키 Kinj와 밸류 Vinj로 업데이트된다
\[ K^e = W^K [z^e_{i-1}, z^e_i] = [W^K z^e_{i-1}, W^K z^e_i] := [K^e_{pr}, K^e_{cu}] \]
\[ V^e = W^V [z^e_{i-1}, z^e_i] = [W^V z^e_{i-1}, W^V z^e_i] := [V^e_{pr}, V^e_{cu}] \]
insereted 키와 밸류:
\[ K_{inj} = [K^r_{fg}, K^r_{bg}, K^e_{cu}] \] \[ V_{inj} = [V^r_{fg}, V^r_{bg}, V^e_{cu}] \]
3. Temporal Attention에서 insert
Temporal Attention의 경우, CS Attention보다 주입이 간단한데, reconstruction branch의 K^r와 V^r를 edit branch로 직접 주입한다
Skeleton Signal Alignment
source video랑 reference video 사이에 크기와 좌표의 차이등으로 인해, edit 성능에 악영향이 있을 수 있다. 이를 해결하기 위해 제안된 아이디어로, 이 알고리즘은 resizing 이랑 평행 이동이라는 두 단계를 포함한다. 알고리즘 순서대로 좀 정리해봤는데
1. source/ reference 비디오 전처리
source 비디오 Xsr와 레퍼런스 비디오 Xrf에서 다음을 추출함(pretrained 모델을 통해)
- source 스켈레톤 Ssr
- source foreground 마스크 Msr
- reference 스켈레톤 Srf
- reference foreground 마스크 Mrf
2. foreground의 edge detection
foreground mask에 edge detection을 해서 foreground 의 직사각형 외곽선을 얻는다. 이를 통해 소스 비디오와 레퍼런스 비디오의 foreground영역을 직사각형으로 정의한다
3. Resizing
직사각형 외곽선의 면적을 기준으로 레퍼런스 스켈레톤 Srf을 소스 비디오와 동일한 크기로 조정한다. 이를 통해 두 비디오의 주인공 크기를 일치시킴.
4. 중심 좌표 계산
각 마스크에서 전경 픽셀의 평균 좌표를 계산하여 주인공의 중심을 찾습니다. 이를 통해 소스 비디오와 레퍼런스 비디오 주인공의 중심 좌표를 얻는다
5. offset vector 계산, 평행이동
두 중심 좌표 간의 차이를 계산하여 오프셋 벡터를 구한다. 이 벡터를 사용하여 평행 이동을 위한 affine transformation 행렬을 생성한다, 이 행렬을 크기 조정된 레퍼런스 스켈레톤에 적용하여 최종 타겟 스켈레톤 Stg을 생성한다
근데 개인적인 생각으로는 너무 상황에 따라 정확도가 많이 달라질거 같음. 이 알고리즘은,,
foreground 마스크나 skeleton 추출이 정확하게 되지 않을 수 도 있고
mask 가 복잡하거나 비대칭적인 형태인 경우에는 평균좌표가 실제 주인공의 중심과 다를 수 있고
단순 affine 변환을 한다는데, source랑 reference 비디오의 주인공이 완전 다른 포즈르 하면? 과연 효과가 있을지도 의문이다
그리고 그냥 이 논문 뭔가 무슨말인진 알겠는데, 왜 이렇게 하는지 잘 인해가 안가는것들이 많았다.. ablation study부분 좀 더 읽어봐야겠다