DreamFusion: Text-to-3D using 2D Diffusion
paper: https://arxiv.org/abs/2209.14988 project page: https://dreamfusion3d.github.io/
DreamFusion: Text-to-3D using 2D Diffusion0. Abstract1. Introduction2. Diffusion Models and Score Distillation Sampling2.1. How can we sample in parameter space, not pixel space3. The DreamFusion Algorithm3.1. Neural Rendering of a 3D Model3.2. Text-to-3D Synthesis4. Experiments5. Discussion
0. Abstract
최근 text-to-image synthesis Task의 발전은 diffusion model 덕분이다. 3D Synthesis에 Diffusion model을 활용하기 위해선 큰 규모의 labeled 3D data와 효율적으로 3D data를 denoising하기 위한 architecture가 필요하지만, 현재로서는 둘 다 존재하지 않는다.
본 논문은 probability density distillation에 기반한 loss를 제안하는데, 이 Loss는 2D diffusion Model을 image generation optimization에 사용 가능하게 한다. 따라서, 이 Loss를 사용하면 랜덤하게 초기화 된 3D 모델(NeRF)을 gradient descent를 통해 optimize(랜덤한 각도에서의 2D rendering들이 낮은 loss를 갖도록) 할 수 있다. 이러한 접근에는 3D data도, Diffusion Model에 대한 수정도 필요하지 않다.
1. Introduction
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F84597530-b164-404d-87c1-6b89c3de1914%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_3.01.40.png?table=block&id=ba2a2892-bf4b-40bc-aff2-ccaf997f98fe&cache=v2)
본 논문에서는 3D 데이터 없이도 2D diffusion model(text-image)을 3D object synthesis로 전환하는 technique을 소개한다. Diffusion Model을 다른 Modality에 적용하는 것은 성공적이긴 하지만, 큰 규모의 modality-specific training data를 필요로 한다. 3D는 그러한 큰 규모의 Dataset이 마련되어 있지 않은 상황이다.
이제는 쉽게 2D 이미지 생성에 접근가능하지만, 게임이나 영화와 같은 분야에서는 굉장히 디테일한 3D asset을 필요로 하고, 현재 이 3D asset들은 Blender나 Maya와 같은 modeling software를 통해 한땀한땀 디자인되고 있다. Text-to-3D 생성 모델은 초심자들의 경계를 허물거나, 숙련된 아티스트들의 workflow를 개선할 것이다.
<3D Synthesis 관련 기존 연구들>
- Voxel, Point Cloud 등: structure에 대한 explicit representation에서 학습되는 장점이 있으나, 3D data 필요 하다는 단점
- GAN: Controllable한 3D Generator를 학습할 수 있지만, 학습된 특정 domain에 한정되어 가능하다는 단점
- NeRF: “Classic”한 3D reconstruction task를 잘 수행함을 발견. 특정 Scene에 대한 여러 이미지가 주어지면 NeRF는 해당 scene에 대한 geometry를 복원. 이를 통해 input으로 주어지지 않은 angle에 대해서도 view를 생성
- NeRF-like Models: Dream Field의 경우에는 CLIP의 image-text joint embedding을 사용하고, NeRF를 학습하기 위해 optimization-based 접근방식을 채택. 2D image-text 모델이 3D 합성에도 활용될 수 있음을 보임.
- DreamFusion(본 논문): Dream Field와 비슷한 접근 방식이지만 CLIP을 2D diffusion model의 distillation에서 나온 loss로 바꿈. 앞으로 서술될 SDS(Score Distillation Sampling)과 NeRF를 결합해, 유저의 prompt만으로 고품질 3D object를 생성가능
2. Diffusion Models and Score Distillation Sampling
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4202d1ee-37ac-4a6f-870c-8f9778b19d86%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_4.07.56.png?table=block&id=0a73534d-a14a-4e83-be38-21301a3920ea&cache=v2)
2.1. How can we sample in parameter space, not pixel space
Diffusion model에서 sampling하기 위한 방법론(sampler)들은 model이 학습된 데이터와 같은 type 혹은 같은 dimensionality의 smaple만을 생성한다. Conditional diffusion sampling이 약간의 flexibility(e.g. inpainting)을 가능하게 하긴 하지만, pixel에 대해 학습된 모델은 pixel을 sample하기 위해서만 사용되어 왔다. 본 논문은 pixel을 sampling하는 것에는 관심이 없으며, 대신 랜덤한 각도에서 rendering할 때, 좋은 이미지처럼 보이는 3D 모델을 생성하는데에 관심이 있다.
이러한 모델들은 DIP(Differentiable Image Parameterization)으로 구체화 될 수 있는데, DIP에서는 미분가능한 generator 가 parameters 를 이미지 로 변환한다. DIP는 contraint를 표현할 수 있게 하고, 보다 더 compact한 space에서 optimize할 수 있게하며, pixel space에서의 더 강력한 optimization 알고리즘을 레버리지 할 수 있게 한다. 3D에서는 를 3D volumn을 위한 파라미터, 를 volumetric renderer로 두며, 이런 parameter들을 학습하기 위해서는 diffusion model에 적용가능한 loss function이 필요하다. (당연하게도 이러한 loss는 좋은 이미지는 낮은 loss를, 그렇지 않은 이미지에 대해서는 높은 loss를 가져야 함)
처음에 저자들은 DIffusion training loss를 사용해보았으나 실제같은 smaple을 생성하지 못했다. timestep schedule을 신중히 선택해야 한다고 주장하는 일부 연구들이 있었으나, 본 연구는 해당 objective 자체가 깨지기 쉽고, timestep shcedule을 조정하는 것이 어렵다는 것을 발견했다. 어려움을 이해하기 위해 의 gradient를 살펴보자.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F907b97f0-ceeb-4388-aa1a-f42cb5eaf7e1%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_3.46.53.png?table=block&id=0cb277d1-8870-4c0f-b4a5-09c5cdfadbb7&cache=v2)
실제로는, U-Net Jacobian 항은 계산이 어렵고(computationally expensive), 작은 노이즈에 대해 condition되기 어렵다. 저자들은 U-Net Jacobian 항을 빼버리는 것이 DIP를 최적화하는데 효율적임을 발견했다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F5fc0552b-0b84-484a-aeb2-125a89c90887%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_3.49.48.png?table=block&id=d10c2ad0-d07f-44d8-8d01-34cda0743f22&cache=v2)
직관적으로 이 Loss는 랜덤한 양의 노이즈로 인해 이미지 x를 불안하게 하고(perturbs), diffusion 모델의 score function을 따르는 update 방향을 추정할 것 같다. 이 gradient가 임시적인 것(adhoc) 처럼 보일지 모르나, 이 gradinet가 probability density distillation loss의 gradient이다. (Appendix A.4 참고) 저자들은 이러한 Sampling 접근방식을 SDS(Score Distillation Sampling)이라 이름지었다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe864c699-3fc6-4074-b6b4-f1eb8f5503dd%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_3.59.43.png?table=block&id=4f35035a-2367-4b68-b6c9-01d4b8171ea5&cache=v2)
는 구현하기 쉽고(Fig 8.), 의 선택에 대해 상대적으로 robust하다. Diffusion model이 직접적으로 update 방향을 predict하기 때문에, diffusion model에 역전파(backpropagate)할 필요가 없다. 의 mode-seeking 특성 때문에 이 loss를 최소화하는 것이 좋은 sample을 생성할 수 있을지 불명확할 수 있다. 그러나, Fig2.에서 볼 수 있듯 저자들은 SDS가 합리적인 수준의 quality를 가진 image를 생성할 수 있음을 보인다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F616cda98-9031-4ef3-b914-16f6667a739b%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_4.09.38.png?table=block&id=4f617eba-8219-41ec-99c4-51dfa351bd64&cache=v2)
3. The DreamFusion Algorithm
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4407ccda-9e1a-4b9f-bd4e-9b4b43bfec45%2F%25E1%2584%2589%25E1%2585%25B3%25E1%2584%258F%25E1%2585%25B3%25E1%2584%2585%25E1%2585%25B5%25E1%2586%25AB%25E1%2584%2589%25E1%2585%25A3%25E1%2586%25BA_2023-03-30_%25E1%2584%258B%25E1%2585%25A9%25E1%2584%2592%25E1%2585%25AE_4.30.20.png?table=block&id=0256665d-d122-4d0d-8011-54839fa0cc2b&cache=v2)
이제 우리는 어떻게 Diffusion model이 sample을 생성하기 위한 일반적이고 연속적인 optimization problem에서 loss로 쓰일 수 있는지()를 보았다. 이제 text로 부터 3D를 생성하는 구체적인 알고리즘을 살펴보자. 논문에서는 64x64를 생성하는 base Imagen Model(Super Resolution 제외)을 수정없이 사용했다. text로부터 scene을 합성하기 위해, NeRF-like model을 랜덤 weight로 초기화하고, 반복적으로 다른 카메라 위치와 각도에서의 NeRF view를 rendering하여 Imagen을 감싸고 있는 의 input으로 사용한다. (Fig3.)
3.1. Neural Rendering of a 3D Model
NeRF는 volumetic raytracer와 MLP로 구성된 neural inverse rendering을 위한 기법이다. NeRF에서는 이미지를 렌더링하기위해 카메라의 중심에서 출발해 이미지 픽셀의 위치를 통과하여 바깥으로 나가는 ray(빛, 광선)를 캐스팅한다. 각 ray를 따라 샘플된 3D 포인트 들은 MLP를 통과하는데, 아래와 같은 4개의 스칼라 값을 output으로 갖는다.
- : volumetic density (3D 좌표상 scene geometry가 얼마나 불투명한가. 즉, 불투명도 정보)
- : RGB 컬러 (R, G, B 3개의 스칼라 값)
이 밀도와 색상들은 이미지에서 카메라쪽 방향으로 alpha 합성되어 최종 렌더링된 RGB 값이 된다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F44104aae-a4f1-4e0e-85a5-9bf5a210c3e6%2F8DF025B3-04D1-4F69-8236-492E7E8D3226.jpeg?table=block&id=f31b5c62-0d2b-4d46-b863-e50ef96cbf34&cache=v2)
기존 NeRF에서는 (입력 이미지, 카메라 위치)로 구성된 데이터 셋이 주어지고, NeRF MLP는 각 pixel의 렌더링된 Color와 입력 이미지의 Ground Truth Color 사이의 MSE Loss를 사용하여 랜덤 initialization에서 훈련된다. 이를 통해 3D 모델이(MLP의 weight로 paramerize된) 생성되어 이전에 본 적 없는 뷰에서 현실적인 렌더링을 생성할 수 있다. 본 논문의 NeRF 모델은 mip-NeRF 360 (Barron et al., 2022)을 기반으로 구축되었으며, 이는 aliasing을 줄이는 개선된 버전의 NeRF다. mip-NeRF 360은 기존 이미지의 3D reconstruction을 위해 설계되었으나 DreamFusion의 text-to-3D task에도 도움이 된다고 한다.
Shading
기존 NeRF 모델은 빛을 방출하는데, 이에 3D point의 RGB 색상은 ray 방향에 조건화 될 수 밖에 없다. 반면, DreamFusion의 MLP는 색상 자체를 매개변수화하며, 이를 제어할 수 있다 (일반적으로 "쉐이딩"이라고 한다). 이전의 NeRF-like 모델들은 여러 reflectance(반사) 모델을 활용했는데, 본 논문에서는 각 점에 대해 RGB albedo (material의 색상)를 활용한다.
3D Point에 대한 최종 shaded output을 계산하는 것에는 object geometry의 local orientation을 가리키는 normal vecotr가 필요하다. 이 표면 normal vector는 를 계산하여 얻을 수 있다. 각 normal 과 albedo 와 3D 좌표의 light source , color , 주위의 light 색상 를 가정하면, ray 위의 각 포인트의 color를 알아낼 수 있다.
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F408d6214-29f8-4436-9334-57f9d1855989%2FFC36C8DC-7C61-427D-9FE7-B4DC3DD1D4C3.jpeg?table=block&id=2a0ce2ab-41bc-468d-9b67-6d6fd6abd44b&cache=v2)
이 color와 이전에 추정한 density를 통해 우리는 volume rendering integral을 근사할 수 있다. 또한 이전의 연구에 기인해 랜덤하게 albedo color 를 하얀색 (1,1,1)로 바꾸면 “textureless” shaded output을 만들 수 있음을 찾았다. 이것은 모델이 text 조건 때문에 평평한 geometry의 scene을 생성하는 것을 방지해준다. 예를 들어, 텍스트에 부합하는 각도, 조명 조건을 갖춘 다람쥐 “이미지”를 생성하기 보다, 3D 다람쥐를 생성할 수 있도록 돕는다.
Scene Structure
DreamFace 방법이 보다 복잡한 Scene을 생성할 수 있음에도 불구하고, 저자들은 고정된 bounding sphere에서만 NeRF Scene을 query하고, 두번째 MLP(위치 관련 인코딩 ray 방향 사용하여 background color 계산)에서 생성된 environment map을 사용하는 것이 도움이 되는 것을 발견했다. 저자들은 ray color를 누적된 alpha 값을 사용해 background color 위에 합성했다(alpha값으로 두개 혼합시킴). 이는 NeRF 모델이 카메라와 아주 가깝게 공간을 density로 채우는 것을 방지하면서도 생성된 scene의 behind를 적절한 color로 paint한다. scene 대신 single object를 생성할때, bounding sphere를 줄이는 것은 도움이 될 수 있다.
Geometry regularizers
생략했으나 mip-NeRF 360는 많은 다른 디테일을 포함하고 있다. 저자들은 불필요하게 빈 공간을 채우는 것을 방지하기 위해 regularizzation penalty를 포함했다. density field의 변이를 방지하기 위해서는 Ref_NeRF에서 제시된 orientation loss의 변형된 버전을 사용했다. 이 penalty는 textureless shading을 포함할때 중요한데, 사용하지 않는다면 density field가 orient normal을 카메라로부터 떨어뜨리려 해서 shading이 어두워질 수 있기 때문이다. 자세한 디테일은 Appendix A.2.에
3.2. Text-to-3D Synthesis
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F39c59a16-0935-4092-8cbb-a18a280e4c22%2F7D6E6A87-20CE-4FD7-A41E-A0178B656265.jpeg?table=block&id=d555bc36-0dc4-4beb-a9f2-09ca7cb07c66&cache=v2)
주어진 pretrained text-to-image diffusion 모델, NeRF상의 DIP(differentiable image parameterization), loss 함수. 이 3가지가 있다면 3D 데이터 없이 text-to-3D 합성을 하기 위한 준비가 끝났다. 각 text prompt에 대해 우리는 랜덤하게 초기화된 NeRF를 scratch부터 학습한다. DreamFusion의 각 iteration에서 optimization은 다음의 순서로 수행된다. pseudo code는 Appendix 8에.
- (1) randomly sample a camera and light
- 랜덤하게 카메라와 light를 샘플
- (2) render an image of the NeRF from that camera and shade with the light
- NeRF의 이미지를 샘플된 카메라와 shade로 render
- (3) compute gradients of the SDS loss with respect to the NeRF parameters
- SDS loss 계산
- (4) update the NeRF parameters using an optimizer
- optimizer를 사용해 NeRF parameter 업데이트
디테일은 논문참고.
4. Experiments
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F428e1e4d-f01e-4da4-997c-815b11165dae%2F985EC4EC-E237-428B-BE2F-E515C5420D1D.jpeg?table=block&id=18f160ba-3c3f-440e-99ba-ef11645e7548&cache=v2)
- 다른 zero-shot text-to-3D 모델들과의 비교
- CLIP R-Precision으로 평가했는데, input caption에 대한 렌더링된 이미지의 consistency 평가지표
Ablations
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F7d82a5f1-eb58-4ea6-8144-aef734f53d5d%2F877A2283-FE53-4FF1-8FEB-0C8585E2AE32.jpeg?table=block&id=d4158928-9d86-4d26-b466-4554b938d218&cache=v2)
5. Discussion
DreamFusion은 다양한 text 프롬프트에 대한 text-3D 합성을 가능하게 한다. DreamFusion은 SDS(Score Distillation Sampling)과 새로운 NeRF-like 렌더링 엔진을 사용하여 2D Diffusion모델을 3D로 전환하여 작동한다. 따라서 DreamFusion은 3D 또는 Multi-view 학습 데이터가 필요하지 않다.
Limitations
- SDS는 이미지 Sampling에 적용될 때 완벽한 loss 함수가 아니며, 종종 ancestral 샘플링에 비해 oversaturated(과하게 색칠된), oversomoothed(과하게 다듬어진) 결과를 생성한다. dynamic thresholding(Saharia et al., 2022)이 SDS를 이미지에 적용할 때 이 문제를 부분적으로 완화하지만 NeRF 맥락에서는 이 문제를 해결하지 못했다. 또한 SDS를 사용하여 생성된 2D 이미지 샘플은 ancestral 샘플링에 비해 다양성이 부족하며, DreamFusion의 3D 결과는 랜덤 시드들 간의 차이가 거의 없다. 이는 reverse KL divergence을 사용하는 것 때문일 수 있으며, mode-seeking 속성이 있음은 이미 언급했다.
- DreamFusion은 64 × 64 Imagen 모델을 사용하기때문에 detail이 부족하다. 더 높은 해상도의 확산 모델과 더 큰 NeRF를 사용하면 이 문제를 해결할 수 있겠지만, 합성이 비현실적으로 느려질 것이다. 앞으로 diffusion과 neural rendering의 효율성이 개선되면 고해상도에서 실용적인 3D 합성이 가능해질 것이다.
- 2D Observation에서 3D를 reconstruction하는 문제는 널리 알려진 바와 같이 답이 하나가 아니다. 이 모호함은 3D 생성에 영향을 미친다. 근본적으로 우리의 작업은 역 렌더링이 어려운 이유와 같은 이유로 어렵다.