[논문 리뷰] GaussianEditor: Swift and Controllable 3D editing with Gaussian Splatting (CVPR 2024)

broiron·2024년 12월 19일

Paper Review

목록 보기
7/11

Gaussian semantic tracing, Hierachical Gaussian Splatting (HGS)을 통해 editing을 위한 3DGS Fine-tuning시 기존에 존재하던 gaussian들을 효과적으로 control하는 기법 제안.
⇒ 새로운 Editing 알고리즘이나 loss를 제안하는 논문이 아님.

1. Introduction


3DGS을 edting하는 것을 아래와 같은 Challenges을 가진다.

  1. editing 할 target gaussian을 정확하게 식별하는 알고리즘이 없음
  2. SDS와 같은 random generative guidance로 Gaussian을 optimize하는 것은 좋지 않음
  • Generative Guidance로 3DGS를 optimize하는게 좋지 않은 이유:
    • 여러 layer의 Neural Network로 이루어진 NeRF와는 달리, Editing을 위한 훈련 시 Gaussian이 editing loss에 포함된 generative radomness에 직접적으로 영향을 받음.
      • NeRF의 경우 Neural Network가 loss를 어느정도 완충해준다고 함
      • 3DGS는 Network를 optimize하는게 아닌, Explicit한 Gaussian을 optimize하는거라 randomness에 더 예민
    • 매 training step마다 많은 양의 Gaussian Point를 update하려고 함.
      • Gaussian이 확확 바뀌게 됨.
💡 Explicit한 특성을 가진 3DGS가 Implicit한 NeRF보다 유동적이기 때문에 (**쉽게 변함**) Generative Guidance를 통한 직접적인 Gaussian의 조작은 Editing에서 좋은 결과를 낼 수 없다.

본 논문에서는 Semantic Tracing을 통해 Gaussian안에 Semantic Tag을 추가하여 editing할 Target gaussian을 식별하고 Hierachical Gaussian Splatting 을 통해 Editing을 위한 Fine-tuning 시 generative loss가 Gaussian에 완화되어 적용될 수 있도록 한다. Contribution을 정리하자면 아래와 같다.

  1. Detail하고 효과적인 editing control을 위한 Gaussian Semantic Tracing
  2. Editing시 highly random generative guidance에도 안정적인 Converge(수렴)을 위한 Hierarchical Gaussian Splatting이라는 새로운 Gaussian Splatting representation
  3. 3D inpainting 알고리즘
  4. 개쩌는 결과

2. Preliminary


3DGS

Θi={xi,si,qi,αi,ci}\Theta_i = \{x_i, s_i, q_i, \alpha_i, c_i\}
  • i번째 Gaussian에 대한 notation: {position, scaling factor, rotation, density, color}

Diffusion-based Editing Guidance

본 논문에서는 3D editing을 2개의 케이스로 분할하고, 그대로 사용한다.

  1. 2D diffusion model을 통해 계산된 Loss를 사용하여 3D model을 Update
    • 여기서는 SDS를 사용
  2. Rendering된 multi-view image을 2D diffusion model로 editing하고 (Dataset Update), 이걸 사용해서 3D model을 Optimize
    - 여기서는 InstructPix2Pix 기반의 Instruct NeRF2NeRF 방식 사용
    (Iterative Dataset Update)

본 논문에서는 Editing Guidance를 주는 알고리즘이나 Loss를 설계한 것이 아니기 때문에 editing guidance를 DD 라고 통칭하고, edit loss를 아래와 같이 정의한다.

Ledit=D(Θ;p,e)L_{edit} = D(\Theta;p, e)
  • p는 camera pose, e 는 prompt Θ\Theta 는 3D model (3DGS)

3. Method


Objective: Text-prompt yy 에 맞도록 Θ\ThetaΘy\Theta_y 로 edit 하는 것

3-1. Gaussian Semantic Tracing

기존의 editing work들은 고정된 2D, 3D 상의 mask를 사용하여 editing할 영역을 한정지었다. 하지만 editing시 편집하는 물체는 변하는데 mask는 그대로 유지하게 되면 spatial boundary안에 content를 ‘locking’ 하는, 즉 editing하는 영역을 한정짓게 되는 한계가 발생한다.

따라서 본 논문에서는 Gaussian에 Semantic label이라는 새로운 Attribute mm 을 직접적으로 부여한다. mijm_{ij} 는 i번째 gaussian의 j번째 Semantic label을 칭한다. Densification 과정에서 새롭게 생성된 gaussian point는 부모의 semantic label을 상속받는데 이러한 방식으로 모든 훈련 과정에서 편집하고 있는 영역을 계속 update할 수 있게 된다.
→ Editing Training 시 semantic label을 기준으로 편집할 gaussian만 선택해서 fine-tuning함.

Gaussian Densification: Gaussian Splatting 훈련과정 중 하나로, 100 iteration마다 특정 조건에 따라 Gaussian이 Remove / Split / Clone하는 과정
Image pre-train 후 Gaussian에 semantic label을 부여하는 방법은 다음과 같다.

  1. Pre-trained Gaussian Model을 가져온다.
  2. Multi-view Image을 Rendering한다 → II
  3. II 에 있는 image들을 SAM을 통과하여 2D Segmentation Mask 집합 MM 을 획득한다.
    MjM_j: j-th semantic label

실제 코드를 보면 SAM이 아닌, lang-SAM을 빌드해서 사용함.
즉 Editing할 영역 (예: face)을 text-prompt로 입력받고, 여러 멀티뷰 이미지들에 대해 하나의 label을 가진 mask들을 생성해서 사용.

  1. Inverse Rendering을 통해 2D semantic mask을 3D로 unproject하는데, 아래의 식에 따라 각 gaussian이 j-th semantic label에 대해 가지는 weight을 계산하여 3D로 projection한다.
wij=Σoi(p)Tij(p)Mj(p)w_i^j = \Sigma o_i(\bold p)* T_i^j(\bold p) * M^j(\bold p)
  • wijw_i^j: i번째 Gaussian이 ****j-th semantic label 에 대해 가지는 weight.
  • oi(p)o_i(\bold p) : pixel p을 기준으로 i번째 Gaussian이 가지는 Opacity (불투명도)
  • Tij(p)T_i^j(\bold p) : pixel p을 기준으로 i번째 gaussian이 가지는 Transmittance (투과도)
  • Mj(p)M^j(\bold p) : pixel
  • 모든 pixel에 대해 계산된 값들을 합쳐서 weight를 계산.
  1. wij>thresw_i^j > thres 면 i-th gaussian에 j-th semantic label을 부여함
    • 하나의 gaussian이 여러 semantic label을 부여받을 수 있음.

이런식으로 Gaussian에 semantic label을 부여하면, 국소적인 부분만 선택적으로 editing이 가능하며, 작은 object도 생성하거나 편집할 수 있음.

골 때리는건 실제 Inverse Rendering 코드 구현은 이렇게 안 되어있다는 점...
저자한테 메일로 문의했는데, 자세한 내용 궁금하신 분들은 댓글 남겨주세여

3-2. Hierarchical Gaussian Splatting

3DGS는 point cloud와 같은 Representation 이기 때문에 generative guidance의 Randomness에 직접적으로 노출시키는 것은 불안정하다. 이는 Implicit Representation과는 달리 Gaussian이 이전 Stage를 memorize 하거나, moderate하게 변화하는 능력이 부족하기 때문이다. (Gaussian’s Fluidity)

Gaussian이 너무 유동적이라 Editing시 Converge하기 힘들어함.
⇒ Generative Guidance에 robust하지 않음

이러한 문제를 해결하기 위해 계층적 구조의 Gaussian Representative인 Hierarchical Gaussian Splatting (HGS)을 제안하는데 이는 Gaussian을 세대별로 분류하여 densification과정에서 이전 세대의 gaussian들의 특성이 보존될 수 있도록 한다.

Pre-trained Gaussian Θ\Theta 들은 모두 0-th 세대로 fine-tuning부터 densification이 이루어질 때(100 iter) 마다 세대를 count하기 시작한다.

더 오래된 세대일 수록, 더 강력한 constraint (더 강하게 보존)을 부여하기 위해 본 논문에서는 아래의 Anchor loss를 차용하였다.

LanchorP=Σi=0nλi(PiP^i)2L_{anchor}^P = \Sigma_{i=0}^n \lambda_i (P_i - \hat P_i)^2
  • PiP_i: i-th Gaussian의 Property → {xi,si,qi,αi,ci}\{x_i, s_i, q_i, \alpha_i, c_i\}
  • P^i\hat P_i : 이전 densification에서 기록된 gaussian의 property ⇒ anchor state
  • λi\lambda_i : Anchor loss weight인데 세대마다 달라짐. Densification이 진행되면서 Gaussian의 세대별로 증가함.

최종 Training Objective:

L=LEdit+p{x,s,q,α,c}λPLanchorPL = L_{Edit} + \sum_{p \in \{x, s, q, \alpha, c \}}\lambda_P L^P_{anchor}
  • Gaussian property P에 따라 적용되는 anchor loss의 weight가 다르다.

이런 방식으로 Hierarchical하게 Gaussian의 표현하면, Anchor loss weight를 조정해서 Editing 강도를 설정할 수 있고 Stochastic한 loss에 Gaussian이 더 안정적으로 수렴할 수 있도록 한다.

또한 원래 Vanilla Gaussian에서는 3D Gaussian으로 전파되는 Gradient가 특정 treshold 이상이면 Densification 하는건데, top k%의 gaussian만 densification되도록 해서 추가적인 Regularization을 수행했다.

3-3. 3D Inpainting

Subtask이기 때문에 생략

4. Experiments


  • Implementation Detail
    • H/W Spec: RTX A6000
    • Scene마다 사용한 camera pose 개수가 다름 : 24 to 96
    • Editing은 500-1000 Step 정도 함. (5-10분 소요)
  • Quantitative Result
    • Metric: CLIP directional similarity

5. Limitation & 느낀점

  • Editing시 발생하는 문제들을 본질적으로 해결한 느낌.
  • 3D Editing에서 View-Consistency를 고려하지 않음.
  • 코드 구현이 잘 되어있고 (threestudio 기반이긴 하지만...) 프로젝트 페이지에 신경을 많이 씀
profile
AI, Computer Vision Researcher

0개의 댓글