읽은 이유
novel view or 3d modeling 프로젝트를 하려고 하던 중 발견했다. 구현이 너무 간단해서 얼마나 학문전 가치가 있을 지는 모르겠지만 일단 CVPR highlight라 관심이 갔음
요약
직관에 기반해 두가지 pre-trained model을 합치고 크게 새로운 개념을 제시한 것도 아니어서 인상깊진 않았다. 내가 놓친 부분이 있는건가?
zero-1-to-3 논문이 읽고싶어졌다.
Abstract - 는 최대한 그대로 옮기기
single image로 한 물체의 novel view를 생성하는건 어려운 task이다.
물체의 3d 구조에 대한 이해를 필요로하고 새로운 시점에서의 consistency도 유지해야한다.
최근에 diffusion을 써서 큰 발전이 있었지만 여전히 부족하다.
본 논문에서는 pre-trained video diffusion 모델을 사용해서 문제를 해결한다. 우리의 아이디어는 물체의 novel view synthesis는 비디오에서 옆으로 돌아가며 찍는 것과 비슷하다는 것. 따라서 이걸 학습한 비디오 모델의 prior를 활용하는게 좋다. 그러므로 우리는 novel-view synthesis를 위해 우리가 원하는 카메라 위치 까지 smooth하게 카메라를 이동시키는 시점을 생성해서 최종적으로 원하는 각도의 이미지를 얻는다.
SOTA라고 함!
single image novel veiw 생성으로는 Zero-1-to-3 paper가 유명하다. 근데 diffusion은 3d 구조를 explicit하게 배운 적이 없는 모델이니 부족할 수 밖에 없다 특히 consistency
본 연구에서는 새로운 training이나 fine-tuning이 필요없는 방법을 제시한다. → video diffusion을 활용하는 것. - 물체를 돌아가면서 찍는 영상을 생성할 수 있는 능력을 활용하면 좋다는건 직관적이고 쉬운 발상이긴하다.
여기서는 Zero-1-to-3 XL과 ZeroScope를 활용한다.
현재 이해한 방식은 아래와 같다.
- frontal view(가진 이미지)에서 desired view까지 이동하는 카메라 trajectory(아마도 좌표)를 찍는다.
- 이걸 Zero-1-to-3 XL에 각 카메라 좌표와 input image(frontal view)와 함께 넣어서, 각 view에서의 이미지를 뽑는다.
새로운 view를 평가하는데 중요한 요소들을 반영해서 평가하는 metric이 없어서 새로 만들어서 측정했다고 한다.
Video diffusion model은 추가 학습 없이, novel-view diffusion model의 consistency를 향상시켜주기위해 사용된다. vdm을 사용하기 위해서 기본 모델로 바로 원하는 각도의 이미지를 뽑는게 아니라 쭉 이동하는 시점의 물체 이미지를 전부 생성하는 거다.
그렇게 뽑으면 중간 중간에 정확하게 원하는 위치도 아니고 pose도 이상하게 생성하기도 한다. 근데 video diffusion model은 비디오를 학습하면서 얻은 지식으로 이게 이상하다는걸 알아내고 수정할 수 있는 능력이 있다. 그래서 쓴다!
method1 - novel view
단일 프레임의 novel view synthesis는 아래처럼 샘플링하는데 텍스트 condition대신 원래 이미지 x0와 새로운 카메라 위치 v를 encoding해서 conditioning signal으로 사용한다.
method2 - video
비디오 diffusion model마다 아키텍처와 tranining 방법의 디테일이 다르지만 하이레벨에서, 연속된 Multiple image의 생성(so that they form a video)이다.
denoising process의 어떤 timestep에서든, 디노이징 모델은 모든 프레임에 적용된다.
사족 - 비디오 diffusion은 잘 모르는데 한번에 여러 F frame의 동일한 timestep을 denoising하는 방식으로 생성하는걸로 이해했다.
method3 - combine above two
두가지를 조합해서 우리가 원하는걸 달성하기 위해 일단 view들의 trajectory를 만든다. {v1, …, vF} vF가 최종적으로 원하는 novel view
이 trajectory는 타겟 위치와 frontal view(가진 이미지) 사이를 Slerp(원의 호 위의 위치들로 linear interpolation)해서 얻는다.
그리고 위의 두가지 diffusion process 둘 다 사용해서 각각의 noise(denoising을 위한)를 뽑는다.
그리고 이걸 합쳐서 사용한다. 마치 CFG에서 unconditional을 빼서 조절하는 것처럼.
- text prompt는 null 사용
- 모델간 영향도 조절 - Denoising 후반부에 video 가중치를 크게 주면 과도하게 smooth해진다. 초반부에 낮은 가중치를 주면 카메라 위치에 맞는 global structure를 잘 못잡는다. 그래서 0.5에서 1까지 linear하게 증가하도록 줬다.
결과 비교 이미지
metric으로 PSNR, SSIM, LPIPS, FOR8을 줬다.
사족 - PSNR, LPIPS는 어떤 의미가 있을지 모르겠음. 각도와 무관하게 물체가 이상해지는건 LPIPS가 잡아낼 수 있을 것 같긴하다.
FOR은 여기서 고안해낸 metric이다. optical flow(연속된 이미지 시퀀스에서 움직임을 측정하는 기술)를 RAFT 방법을 써서 측정한다. 실제 이미지와 생성된 이미지간에 동일한 위치에 있어야할 pixel이 얼마나 다른 위치에 있는지를 측정하는 값. 그래서 기본적으로 두개가 유사한 이미지여야 측정이 의미있긴하다.
RAFT로 계산한 값과 오차가 threshold이상 하는 pixel의 비율이 최종 metric 값?인듯하다.
Share article
Subscribe to our newsletter