학습된 stable diffusion 모델을 사용해서 Text를 입력으로 3D reconstruction하는 연구입니다. 약자로 SJC라고 합니다. Zero-1-to-3에서 사용하고 있는 방식입니다.
DreamFusion과 비교하면서 리뷰를 해보겠습니다. 실제적으로 수식이 복잡하게 설명되어 있으며, 논문과 전혀 다른 방식으로, 알고리즘 이해를 위한 목적으로 설명해보겠습니다.
DreamFusion의 OOD (Out of Distribution) Problem
DreamFusion 이전글의 Overview의 수도코드 부분만 먼저 읽고 오시길 바랍니다.
DreamFusion은 NeRF로 랜더링한 이미지에 대해 Diffusion Model로 Loss를 설계하여, NeRF의 Parameter를 업데이트 했었습니다. 이 때 Diffusion Model Parameter는 고정이 됩니다. 큰 구조관점에서 SJC는 DreamFusion 방식과 동일합니다.
이단계를 구체적으로 보면 달라집니다. 구체적으로 Dream Fusion을 방식을 설명하자면, DreamFusion은
NeRF로 랜더링한 이미지에 대해 Forward Process를 통해 Noise를 추가하고,
Denoising Process에서 Text를 condition으로 받아 Noise를 제거 해줍니다.
2개 Process에서 더해주고 빼주는 Noise차이를 Loss로 설계하게 됩니다.
SJC 논문에서는 NeRF로 만들어지는 이미지는 pretrained된 Diffusion Model을 학습시킬 때, 없었던 확률 분포이기 때문에 OOD (Out of Distribution) 문제가 발생한다고 합니다. 일단 OOD가 DreamFusion의 퀄리티에 영향을 주었다고 아래와 같이 증명한 것이 SJC논문의 한가지 큰 contribution입니다.
Condition(Text or Image)이 없는 얼굴 생성 Diffusion Model을 학습한 후에,
Diffusion 모델 학습시 사용하지 않았던 blob 그림(가장 왼쪽)을 Input으로 주어주고, 학습된 Diffusion Model를 수행하였더니 두번째 이미지처럼 만들어졌습니다. 논문에서 이는 OOD문제에 해당하며, SJC에서는 이를 해결하여 가장 오른쪽 이미지처럼 만들어지게 했다고 합니다.
Score Jacobian Chaining?
SJC는 Diffusion모델의 2D score로 3D Score를 계산해서 NeRF의 gradient로 사용한다는 목적을 갖고 있으며, 아래 수식을 전개하기 위해 Chaining rule을 쓰게 되고, Jacobian을 계산하기 때문에 명명한 것으로 보입니다.
위 수식 설명이 길어지고 혼란을 줄 수 있어서, 이 정도만 언급하고 넘어가겠습니다. 아래에서 다른 방식으로 쉽게 SJC을 설명 해보겠습니다.
Perturb-and-Average Scoring (PAAS)
Diffusion Model은 입력 이미지에 대해 가우시안 노이즈를 추가하고 Denoiser를 통해 노이즈를 제거하면서, 이미지의 확률분포를 유사하게 만듭니다. 입력 이미지 x와 denoiser의 결과값에 대한 차이를 denoising score로 사용합니다.
σ는 가우시안 노이즈의 표준편차에 해당합니다. π는 NeRF로 랜더링 할 때 쓰이는 카메라 포즈입니다. 때문에 xπ 는 카메라 포즈 π 에서 랜더링한 이미지를 의미합니다. Perturb-and-Average Score는 xπ 와 σ로 정의됩니다. n은 평균이 0이고 표준편차가1인 가우시안 분포를 의미합니다. (n의 표준편차가 1이기 때문에, 1* σ이 되어 실제적으로 σ이 가우시안의 표준편차가 됩니다.)
이 수식을 설명하는 그림은 아래와 같습니다.
확률분포 공간을 추상화한 이미지이며, xπ는 OOD(out of distribution)에 위치합니다. xπ에 표준편차 σ 만큼 가우시안 노이즈를 넣어주면 초록색 원안에 위치(PAAS의 Pertub에 해당)하며, 여기서 Denoiser를 사용하면 pretrained된 Diffusion Model의 확률분포 공간 안에 위치(파란색점)하게 됩니다. 마지막으로 파란색점의 평균값(PAAS의 Average에 해당) 을 denoising score로 사용합니다. 이렇게 설계를 할 경우 OOD Problem 섹션에서 언급된 이미지의 가장 오른쪽 사람 얼굴 이미지처럼 만들어지게 됩니다.
DreamFusion에서는 (12)번 수식, SJC에서는 (14)번 수식을 쓴다고 보면 됩니다.
Inverse Rendering on Voxel Radiance Field
SJC에서는 Voxel Radiance Field를 사용한다고 되어 있으며, NeRF모델 중 Grid기반인 모델을 의미합니다. TensoRF(이전글) 또는 Plenoxel(이전글)을 예시로 두고있습니다.
이와 달리 DreamFusion에서는 Mip-NeRF360(이전글)을 사용하였었습니다.
일관된 3D 구조를 만들기 위해 Loss가 추가됩니다.
Emptiness Loss
위 수식을 통해 object가 아닌 영역에서는 density가 0에 가까워지도록 만듭니다. r은 ray, w는 NeRF개념에서 사용되는 alpha-composited weight, β는 hyperparameter 상수값이며 크게 할 경우, low-density를 가진 노이즈를 제거하게 됩니다.
Center Depth Loss
optimization하면서 scene 중심으로부터 멀어지는 현상이 가끔 발생했다고 합니다. 그러면 물체가 작아지거나 이미지 경계에 배치된다고 합니다. 이런 경우를 줄이기 위해서 사용된 Loss입니다. D는 depth image, Β는 이미지 중심의 pixel location 집합이고 B^C는 해당 집합의 여집합입니다.
Diffusion Model
uncondition한 diffusion model로 DDPM을 사용하였으며, 사람 face데이터셋인 FFHQ와 room데이터셋인 LSUN으로 학습하였습니다.
condition한 diffusion model로는 Stable Diffusion을 사용해서 LAION5B데이터셋으로 학습하였습니다. DreamFusion에서는 Imagen을 사용했습니다.
그 외 언급된 기법으로는
- 3D optimization의 hyperparameter tuning을 쉽게 하기위해, 3D Optimization시 Diffusion Model의 가우시안 표준분포 σ를 random하게 사용했습니다.
- 3D Quality를 향상하기 위해 view-augmented language prompting을 했다고 합니다. 정확한 설명은 없는데, camera pose를 text에 언급했다고 유추해 볼 수 있습니다.
Experiments
DreamFusion과의 비교 결과를 기대했는데, 언급이 안되어 있네요. 그리고 별도의 정량적인 수치로 비교 평가하고 있지 않았습니다. Stable-DreamFusion과의 결과를 시각적으로 표시하고 있습니다.
위 그림에 대한 prompt text입니다.
(a) “A high quality photo of a delicious burger";
(b) “a DSLR photo of a yellow duck";
(c) “A ficus planted in a pot";
(d) “A product photo of a toy tank";
(e) “A high quality photo of a chocolate icecream cone"
(f) “A wide angle zoomed out photo of a giraffe".
위 실험은 Ablation Study로 보여집니다. Noise의 표준편차 σ를 step t에 따라 점진적으로 줄이는 Annealed 방식과 Random으로 적용하는 방식을 실험하였고, Text의 영향도 정도를 나타내는 gudiance scale의 크기를 변경하는 실험을 했습니다. 1~2행은 비교를 위해 다른 diffusion model로 테스트해 본 결과이고, 3~4행이 SJC결과 입니다. FFHQ와 LSUN의 경우 Annealed방식을 써야하는 것을 알 수 있습니다. SJC의 경우 Random 표준편차σ를 적용하고 gudiance scale를 크게 해야 됨을 알아냈습니다.
Closing..
수식이 너무 어렵게 쓰여져 있어서 포기하려던 찰나에 이해가 되어서 이렇게 논문 리뷰로 남기게 되었습니다. 제가 한줄씩 번역해서 옮긴 문장은 없고, 단락별로 의역을 많이 했습니다. 때문에 잘못 이해하고 적어둔 부분이 있을 수 있으므로, 잘못된 부분은 언급해주시면 바로 정정하겠습니다. Text to 3D 연구에서 한가지 큰 축이라 생각해서 리뷰를 해보았습니다.
'NeRF' 카테고리의 다른 글
[코드 빌드] Stable Zero123 : Text-to-3D (4) | 2023.12.28 |
---|---|
[논문 리뷰] Zero-1-to-3 (ICCV 2023) : Image to 3D (0) | 2023.12.25 |
[논문 리뷰] One-2-3-45++ (arXiv 2023) : Image-to-3D 속도/퀄리티 개선 (0) | 2023.12.08 |
[논문 리뷰] Tri-MipRF (ICCV 2023) : 속도/퀄리티/메모리 개선 (0) | 2023.08.16 |
[논문 리뷰] GeoNeRF (CVPR 2022) : 적은 입력 + 일반화 모델 (0) | 2023.08.11 |
댓글