Paper/Generation

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation

침닦는수건 2023. 12. 11. 01:36
반응형

내 맘대로 Introduction

 

과거에 everybody dance now라는 논문이 GAN을 이용해서 pose retargeted image를 만드는 기술을 보인 바 있는데, 이 논문은 그 컨셉을 "모든 대상, 모든 자세"로 확장한 generalized 버전이라고 볼 수 있다. 다시 말해 임의의 사람 이미지 1장을 넣으면 그 사람이 다른 자세를 취한 이미지를 얻을 수 있다.

 

핵심 아이디어는 잘 학습된 stable diffusion weight를 가져와서 CLIP feature와 이미지 feature, pose feature를 이용해 finetuning하는 것이다. 

 

재미 하나로 스포트 라이트를 받을 논문이다.

 

메모하며 읽기


전체 파이프라인은 stable diffusion의 denoising Unet을 그대로를 가져왔다. 

두번 가져와서 1개는 reference net, 1개는 denoising UNet이라고 부르고 사용한다. (고로 엄청 큰 모델이다.)

reference net은 image appearance, denoising net은 encoded pose feature를 뽑아내는 역할을 한다. 

중간 중간 clip feature와 각종 attention을 넣은 것이 구조적 특징.

stable diffusion을 뜯어와서 시작하는 논문이다 보니 SD가 VAE encoder, decoder + Unet 구조라는 것과 이론적 배경을 한 번 더 짚어줬다.

Stable Diffusion 참고

reference net을 사용하기 전에 다른 논문들은 CLIP feature만을 그대로 사용하곤 했었는데 CLIP이 효과적이긴 하지만 학습 당시 해상도가 낮았고 디테일 정보가 부족하기 때문에 image feature를 직접 뽑는 network를 사용하기로 했다고 한다. 
그것이 SD를 떼어와서 사용하는 것이고 중간에 cross attention으로 CLIP feature를 섞어주는 구조다. 

denoising net과도 매 스텝 cross attention이 되는 구조인데 이 경우 reference net feature와 denoising net feature를 width 방향으로 concat한 뒤, self attention을 가하는 방식이다. (이걸 spatial attention이라고 불렀음)
이런 식으로 SD 구조 안에 새로운 image feature를 cross attention으로 넣어주는 방식은 ControlNet에서 이미 사용한 방식이기 때문에 중복이라고 볼 수도 있는데

ControlNet에서는 새로 주입된 image feature와 denoising 되어가는 이미지가 pixel aligned 상태를 가정한다. 하지만 이 논문이 가정하는 시나리오에서는 자세가 바뀌기 때문에 그 방식이 통하지 않는다.

그래서 뒤에 spatial attention을 하나 더 단 것이다. 분명히 차이가 있다고 강조함.

포즈 정보를 주입할 때는 이미지 형태로 만들기 위해서, 위 그림처럼 openpose visualization 이미지를 사용한 것 같다.

근데 dimension이 SD 학습 시 dimension과 맞지 않을 수 있으므로 이를 맞추기 위해 간단한 CNN을 붙였다. 그게 pose guider다. 

pose guider를 통해 dimension이 맞춰진 이미지 형태 feature에 noise를 더해서 denoising UNet에 통과시킨다.
이 논문에서 제안하는 구조에서는 자세를 1개씩 넣는 것이 아니라 t개씩 넣는 방식을 말한다. 즉 생성하고 싶은 모든 프레임을 한 번에 때려넣는 식이다. 

따라서 denoising net을 통과하는 이미지는 H,W,3 뿐만 아니라 T(time) 채널이 존재한다.

time dimension 방향으로도 attention을 가해주는 것이 좋을 것이라고 기대했는데 denoising net은 cross attention 뒤에 feature permutation한 뒤, self attention을 추가로 걸어줬다.
(time dimension을 중점으로 self attention하므로 temporal attention이라고도 봄)

학습 노하우까지가 보통 generation 논문의 핵심이니 여기까지 기록해야 겠다.

1) 초반에는 temporal attention layer는 없이 single image로만 학습 ( t=1 )

2) SD에서 뗘온 VAE는 weight 고정, CLIP도 고정

3) temporal attention layer는 weight를 AnimateDiff에서 뗘와서 초기화

(온갖 짬뽕... 역시 중국)
반응형