DreamFusion: Text-to-3D Using 2D Diffusion

리뷰 날짜
2023/04/02
분야
Diffusion
View Synthesis
본 포스트에서는 2D Diffusion 의 강력한 prior knowledge 를 활용하여 3D neural radiance field 를 생성하는데 성공한 첫 번째 논문에 대해서 소개드리려고 합니다.
Project Page 및 논문을 직접 읽어보시고 싶으신 분들은 위 링크를 참고하시면 좋습니다.

Objective

Diffusion Model 은 높은 품질의 이미지를 생성할 수 있는 generative model 로 떠오르고 있습니다. 이러한 Diffusion Model 의 부상과 함께 다양한 modality 를 다루는 많은 분야에서 Diffusion Model 을 활용하려는 시도가 생기고 있지만, 이들은 모두 양질의 modality-specific 한 학습 데이터를 필요로 했습니다.
특히 다양한 modality 중 3D 데이터는 3D assets 라 불리는 요소들로 구성되는데, 이들은 전문가가 Blender 나 Maya3D 와 같은 3D Modeling Software 를 사용하여 만들어지는 것이 일반적이기 때문에 많은 시간과 노력이 필요합니다. 이러한 상황에 발맞추어 최근에는 3D 데이터 기반이 아니라 2D 데이터를 활용하여 Text-to-3D generative model 을 만들어 초보 모델링 아티스트의 진입장벽을 낮추거나, 숙련된 모델링 아티스트의 workflow 를 간소화하려는 시도들이 있습니다.
DreamField: Zero-Shot Text-Guided Object Generation
2022 년에 공개된 DreamField 는 2D 데이터를 활용하여 Text-to-3D 를 타겟팅한 하나의 예시이며, CLIP 에서 제공하는 Text 와 2D Image 의 joint embedding 을 활용하여 NeRF 를 최적화하는 방법론을 선택합니다. DreamField 에서 2D Image-Text Model 이 3D 를 생성하는 과정에 사용될 수 있음을 보여주었으나, 동시에 정확성과 현실성이 많이 떨어지는 결과를 보여주었습니다.
논문에서는 DreamField 와 비슷한 접근을 가져가지만 CLIP 대신에 2D 에서 높은 fidelity 를 자랑하는, 2D Diffusion Model 에서 가져온 항목을 기반으로 loss 를 정의하는 시도를 하여 Text-to-3D 문제를 타겟팅합니다. 그리고 그들은 이 방법론을 Score Distillation Sampling 이라고 명칭합니다.

Method

Recall: Diffusion Models

Diffusion Model 은 이미지로부터 noise 를 추가하는 forward process 와 noise 로부터 추가된 noise 를 예측하여 해당 noise 를 제거해나가는 reverse process 로 구성되어 있습니다.
Simplified Diffusion Process
Forward process 에서는 pre-defined parameters 가 존재하여 해당 parameters 기반으로 이전 이미지로부터 새로운 distribution 을 정의하게 되고, 해당 distribution 에서 sampling 하는 형태로 다음 이미지를 얻게 됩니다. (Latent Diffusion 에서는 이 과정에 이미지가 아닌 latent space 에서 일어납니다.) 이 과정에서 sampling 되는 distribution 은 pre-defined 된 parameter 의 특징에 따라서 초반에는 이미지와 비슷한 distribution 이지만, 가면 갈수록 standard normal 에 비슷한 distribution 에서 sampling 이 일어나게 되고, 최종적인 지점에서는 완전한 noise 로 취급이 가능합니다.
Reverse process 에서는 forward process 에서 sampling 한 distribution 의 posterior distribution 을 예측하는 U-Net 구조를 설계하여 학습을 통해 이를 구해냅니다. 이 때 U-Net 이 예측하게 되는 것은 특정 time step 이 주어졌을 때, latent noise 를 예측하는 것이며 이를 이용해 deterministic 하게 한 단계 noise 가 제거된 latent 를 예측할 수 있게 됩니다.
여기까지가 줄글로 설명한 diffusion process 의 전체적인 과정이고, 이 과정은 제가 이전에 작성한 Blended DiffusionLatent Diffusion 논문리뷰에서 자세하게 언급한 적 있습니다. 수식을 포함한 구체적인 설명을 보고 싶다면 해당 리뷰들을 참고하시는 것을 추천드립니다. 전반적인 diffusion process 에 대한 이해도를 높여줄 것으로 기대합니다.

Score Distillation Sampling

일반적인 Diffusion Model 은 forward process 에서 2D pixel 단에서 distribution 이 정의되고, 해당 distribution 에서 sampling 이 이루어집니다. 마찬가지로 reverse process 에서는 2D pixel 단에서 update 가 이루어집니다.
Ancestral Sampling vs. Score Distillation Sampling
이러한 Diffusion Model 을 활용하여 3D 를 최적화하는 naive 한 방법은 3D volume 을 나타내는 parameter θ\theta 와 volumentric renderer gg 를 정의하여 렌더링된 이미지를 만들어내고, 이를 활용하는 것입니다.
x=g(θ){\rm x} = g(\theta)
이렇게 렌더링된 이미지를 Diffusion Model 의 학습과정을 그대로 따라해서 θ\theta 를 최적화하도록 학습을 진행할 수 있습니다. 이미지에 noise 를 추가하여 Diffusion Model 의 input 으로 condition 과 함께 넣어서 등장하게 되는 noise 의 residual 을 활용해 loss term 을 정의하게 되는 것입니다.
θLDiff(ϕ,x=g(θ))=Et,ϵ[w(t)(ϵ^ϕ(zt;y,t)ϵ) ϵ^ϕ(zt;y,t)zt xθ]\nabla_{\theta}{\mathcal L}_{\rm Diff}(\phi,{\rm x} = g(\theta)) = {\mathbb E}_{t, \epsilon} [w(t)(\hat{\epsilon}_{\phi}({\rm z}_t;y,t)-\epsilon)\ \frac{\partial \hat{\epsilon}_{\phi}({\rm z}_t;y,t)}{\partial{\rm z}_t}\ \frac{\partial {\rm x}}{\partial \theta}]
위 식에서 w(t)=ztxw(t) = \frac{\partial {\rm z}_t}{\partial {\rm x}} 로, Chain Rule 을 적용해보면 위 식의 이해가 더욱 쉬운 것을 알 수 있으실 것입니다. 최종적으로 최적화해야할 값 θ\theta 에 따른 noise residual ϵ^ϕ(zt;y,t)ϵ\hat{\epsilon}_{\phi}({\rm z}_t;y,t)-\epsilon 값의 변화를 나타냅니다. 다만 약간 생각해볼만한 점은, gradient term 인데도 ϵ^ϕ(zt;y,t)ϵ\hat{\epsilon}_{\phi}({\rm z}_t;y,t)-\epsilon 값이 직접 남아있는 부분인데, 구체적인 설명을 해주고 있지는 않지만, noise residual 의 square term 으로 loss 를 정의한 것과 비슷한 효과를 주고 싶지 않았나 라는 생각을 해봅니다.
논문에서는 위 식에서 U-Net 의 jacobian teram 인 ϵ^ϕ(zt;y,t)zt\frac{\partial \hat{\epsilon}_{\phi}({\rm z}_t;y,t)}{\partial{\rm z}_t} 는 U-Net 을 거쳐서 back propagation 을 해야하기 때문에 computing cost 가 큰데 비해서 noise level 이 작을 경우에 U-Net 을 거쳐 발생하는 변화가 거의 없었다고 이야기합니다. 때문에 이를 제거하는 것이 효과적인 gradient 를 형성하는데 도움을 주었다는 것을 발견하고 아래와 같은 새로운 loss 항목을 정의합니다.
θLSDS(ϕ,x=g(θ))Et,ϵ[w(t)(ϵ^ϕ(zt;y,t)ϵ) xθ]\nabla_{\theta}{\mathcal L}_{\rm SDS}(\phi,{\rm x} = g(\theta)) \triangleq {\mathbb E}_{t, \epsilon} [w(t)(\hat{\epsilon}_{\phi}({\rm z}_t;y,t)-\epsilon)\ \frac{\partial {\rm x}}{\partial \theta}]
논문에서는 이와 같은 방법을 Score Distillation Sampling (SDS) 라고 부르며, 2D Diffusion Model 에서부터 얻어진 prior 를 distillation 하기에 이름에 distillation 을, 학습 과정에서 noise 의 sampling 에 따라 vary 하게 되는 g(θ)g(\theta) 의 distribution 의 mean 이 sample of interests 가 된다는 관점에서 이름에 sampling 을 넣었다고 볼 수 있습니다.
Overall Pipeline of DreamFusion
위 그림의 우측에서 이러한 논문의 SDS 방법론을 살펴볼 수 있습니다. 렌더링 후 noise 를 더하고 U-Net 을 통과시켜 score function 을 구한 뒤에 NeRF parameter 에 backpropagation 하는 형태입니다. 이러한 방법의 장점은 U-Net jacobian 항목을 없애 diffusion model 의 score function 이 high density region 으로 움직일 수 있도록 update direction 을 직접적으로 예측하기 때문에 diffusion model 위에서의 back propagation 이 필요없다는 점입니다.

Recall: NeRF + Neural Rendering of 3D Model

Neural Radiance Field (NeRF) 는 Novel View Synthesis 분야의 연구로, 입력으로 3D point 와 direction 을 받고, 출력으로 volume density 와 color 를 내는 MLP 형태의 네트워크를 multiview image 기반으로 학습을 하는 방법론입니다.
Overall Pipeline of NeRF
Ray 상의 점들을 sampling 하고, 해당 점들을 네트워크를 통과시킨 뒤에 volume density 와 color 을 얻고, 이 들을 volume rendering 과정을 통해 integration 하여 특정 view 에서의 이미지와의 rendering MSE loss 를 계산하여 학습이 진행됩니다. 여기서는 줄글로만 간단하게 NeRF 에 대해 설명했고, 수식을 포함한 구체적인 설명을 보고 싶으신 분들은 NeRF 논문리뷰를 참고하는 것을 추천드립니다.

Shading

전통적인 NeRF 의 formulation 과 다르게, 논문에서는 MLP 네트워크가 point 의 observed color 를 estimate 하는 것이 아니라, illumination 에 의한 효과를 제거한 surface color 자체를 estimate 합니다. 이 color 를 albedo color ρ\rho 로 지정하며 다음과 같이 formulation 을 구성합니다.
(τ,ρ)=MLP(μ;θ)(\tau,\rho)={\rm MLP}(\mu;\theta)
위 식에서 τ\tau 는 volume density, μ\mu 는 3D point coordinate, θ\theta 는 view direction 입니다. 이렇게 albedo color 를 구한 다음에 shading 을 고려한 최종적인 색상을 계산하기 위해서는 object 의 geometry 에 기반한 local orientation 을 표현할 수 있는 normal vector 를 다음과 같이 정의합니다.
n=μτ/μτn=\nabla_\mu \tau/\| \nabla_{\mu} \tau \|
위 식은 단순히 volume density 의 normalized negative gradient 값이며 이 정보와 앞선 material albedo ρ\rho, point light source coordinate ll 와 그 색상 lpl_p, ambient light color lal_a 를 가지고 각 point 에서의 observed color 를 다음과 같이 계산하게 됩니다.
c=ρ  (lp  max(0,n(lμ)/lμ+la)c=\rho\ \circ\ (l_p\ \circ\ \max(0, n \cdot(l-\mu)/\| l-\mu \|+l_a)
위 식은 Lambert et al, 1760 와 Ramammoorthi & Hanrahan, 2001 의 논문에서 제시된 식을 기반으로 계산한 observed color 입니다. 이 color 를 가지고 전통적인 NeRF 와 동일하게 volume rendering 을 진행하며, 이 과정에서 임의로 abledo color ρ\rho 를 white (1,1,1)(1,1,1) 로 치환하는 것이 3D 가 flat geometry 에 그려지는 등의 degenerated solution 을 방지하는데 도움이 된다는 앞선 논문들 (Hong et al., 2022; Michel et al., 2021) 의 테크닉도 활용했다고 합니다.

Scene Structuring

논문에서는 학습을 진행할 때 사용할 multiview 를 렌더링할 때 fixed bounding sphere 에서만 렌더링하는 것이 큰 도움이 되었다고 언급하고 있습니다. 여기에 더불어서 positionally-encoded ray direction 을 입력으로 받아 background color 를 산출하는 두 번째 MLP 를 설계하여 alpha value 를 조절하여 합치는 과정을 진행하면, 카메라와 가까운 곳에 density 를 할당하는 문제점을 해결할 수 있었다고 주장합니다.

Geometry Regularizers

논문에서는 DreamField 에서 제시한 것과 동일하게 opacity 에 regularization penalty 를 두어 빈 공간을 불필요하게 채우려는 현상을 해결했고, normal vector 가 카메라의 방향과 반대를 바라보는 형태로 구해져 shading 이 어둡게 나타나는 현상을 해결하기 위해서 Ref-NeRF 에서 제안한 oreientation loss 를 사용했다고 합니다.

Text-to-3D Synthesis

논문에서는 pre-trained Diffusion Model 과 NeRF 에서 추출한 differentaible image parameterization, 그리고 좋은 sample 이 minima 가 되는 loss function 을 사용해 최종적으로 Text-to-3D Synthesis 를 진행할 수 있었습니다.
Iteratively Refining 3D Scenes
이 과정은 크게 다음과 같은 4 가지의 과정으로 나누어집니다.

1. Random Camera and Light Sampling

먼저, 카메라의 position 은 다음과 같은 세팅에서 sampling 됩니다.
1.
elevation angle ϕcam[10°,90°]\phi_{\rm cam}\in[-10\degree,90\degree]
2.
azimuth angle θcam[0°,360°]\theta_{\rm cam}\in [0\degree, 360\degree]
3.
distance from origin [1,1.5]\in[1, 1.5]
위의 세팅과 look-at point, up vector 를 결합하여 최종 camera matrix 를 구성합니다. 이렇게 카메라의 position 을 정한 뒤 look-at point 와 up vector 를 ampling 하여 최종적인 camera matrix 를 만들어냅니다.
마지막으로 focal length multiplier λfocalU(0.7,1.35)\lambda_{\rm focal} \in {\mathcal U}(0.7, 1.35) 에서 sampling 하여 image width ww 에 대해서 focal length 를 f=λfocalwf = \lambda_{\rm focal}w 로 정의하게 됩니다. 그리고 light position ll 은 카메라 주변에서 sampling 하게 되는데 이에 대한 구체적인 설명을 해주고 있지는 않습니다.

2. Rendering

Camera pose 와 light position 이 주어지면, 앞서 설명한 rendering 방법론을 활용해 64×6464\times 64 크기의 이미지를 shaded NeRF 에서 렌더링합니다. 이 때 Illuminated Color Rendering, Textureless Rendering, Rendering of the Albeo without any Shading 등의 세팅에서 임의로 하나를 뽑아 렌더링하게 됩니다. 이는 각각 Color 와 Light 가 모두 있는 세팅, Color 가 없는 세팅, Light 가 없는 세팅으로 볼 수 있습니다.

3. Diffusion Loss with View-Dependent Conditioning

일반적으로 동일한 text prompt 를 모든 view 에서 사용하는 것은 특정 view 에서 그렇게 좋지 못한 descriptor 가 될 수 있습니다. 논문에서는 이를 타겟팅하기 위해서 특정 세팅 조건들에서 text prompt 를 modify 하는 방법론을 택합니다.
1.
ϕcam>60°\phi_{\rm cam} > 60\degree: “overhead view” ~
2.
ϕcam60°\phi_{\rm cam} \le 60\degree: {weighted combination of the text embeddings for appending “front view”, “side view”, “back view” depending on the value of the azimuth angle θcam\theta_{\rm cam}} ~
이 외에도 구체적인 세팅으로 다음과 같은 것들을 설정했다고 합니다.
1.
w(t)=σt2w(t) = \sigma_t^2
2.
tU(0.02,0.98)t \sim {\mathcal U}(0.02, 0.98)
3.
w=100w=100 for classifier-free guidance

4. Optimization

논문에서는 그들의 optimization 에 사용한 세팅을 공유해줍니다. 크게 중요한 내용은 아닌 것 같아, 관심 있으신 분들은 참고하시길 바랍니다.
Optimization Setting

Experiments

일반적인 reference-based 3D Reconstruction Task 는 true 3D 와의 Chamfer Distance 나 PSNR 과 같은 지표를 사용하여 evaluation 을 진행하는 반면, zero-shot text-to-3D generation 은 비교할 true 3D 가 없기 때문에 다른 방법으로 evaluation 을 진행합니다.
동일한 task 를 다루는 DreamField 에서는 input caption 과 rendered image 간의 consistency 를 측정하는 지표인 CLIP R-Precision 를 사용하여 얼마나 충실하게 text 를 설명하는 형태로 3D 가 형성되었는가를 통해 평가를 진행합니다. 논문에서는 DreamField 에서 사용한 COCO validation 의 subset 으로 153 개의 prompt 로 generation task 를 진행하며, textureless render 에 대한 평가도 진행합니다.
Evaluation on CLIP R-Precision
논문에서는 DreamField 를 논문에서 제시한 abledo 기반의 3D representation 을 사용하는 형태로 reimplementation 한 버전과도 비교를 진행합니다. 그 결과, 위 표에 나타난 것처럼 DreamField 의 일반 버전과 CLIP-Mesh 가 학습과정에서 CLIP 을 사용하여 CLIP R-Precision 으로 비교할 때 더 유리한 세팅인데도 DreamFusion 이 더 높은 R-Precision 값을 보이는 것을 확인할 수 있었습니다. 더불어 Textureless 세팅에서 DreamField 의 reimplementation 을 능가하는 것을 통해 CLIP 에 비해서 Diffusion 기반 SDS 세팅이 geometric reconstuction 에 좋음을 보여주었습니다.
Ablation Study
논문에서는 Large Ranges of Viewpoints (+ViewAug), View-Dependent Prompt (+ViewDep), Optimizing Illuminated Renders (+Lighting), Optimizng Textureless Shaded Geometry Images (+Textureless) 에 대한 ablation study 를 진행합니다. 위 그림의 우측의 1 열이 Albedo, 2 열이 Shaded, 3 열이 Textureless 인데, ViewDep, Lighting, Textureless 를 추가할 때마다 qualitative results 가 좋아지는 것을 확인할 수 있습니다. 또한 최종적으로 활용될 Shaded Geometry 의 경우 좌측 그래프에서 R-Precision 이 논문의 방법론을 하나씩 더할 때마다 지속적으로 증가하는 모습을 볼 수 있습니다. 이 결과를 통해 논문의 세부적인 방법론이 유의미한 성능의 결과를 이끌어냈다고 주장합니다.

Conclusion

이것으로 논문 “DreamFusion: Text-to-3D Using 2D Diffusion” 의 내용을 간단하게 요약해보았습니다.
최근 2D Diffusion 의 prior 를 사용해 3D 를 생성, 스타일화하는 다양한 논문들이 이 논문의 Score Distillation Sampling (SDS) 기법을 바탕으로 많이 양산되고 있습니다. SDS 에 대한 간단한 이해만 하다가, 이 기회를 통해서 한 번 제대로 알아보고 싶어서 논문을 읽게 되었고, 제가 알던 것과 다른 부분들도 발견하여 유의미한 경험이었던 것 같습니다.
조금 놀랐던 부분은 2D diffusion prior 를 어떻게 3D space 에 전달할 것인가를 제시한 Score Distillation Sampling 말고 NeRF 자체에서도 논문에서 꽤나 다양한 테크닉들을 제안한 점이었습니다. Observed Color 가 아닌 Albedo Color 를 활용한 representation 이나 view dependent conditioning 등도 신선하게 봤던 것 같습니다. 2D Diffusion 을 사용한 3D generation, stylization task 에 관심 있으면 꼭 한 번 읽어보시는 것을 추천드려봅니다.