논문링크
프로젝트 페이지
데모 페이지
입력이미지(github 공식 홈페이지 제공 이미지)
Stage1(gaussian)
Stage2(mesh)
입력이미지(임의의 이미지) -> 배경 제거, 해상도 증가 자동으로 코드 실행
Stage1(gaussian)
Stage2(mesh)
Gaussian은 중심 위치(x), 크기나 범위를 조절해주는 스케일링 팩터(s), 회전을 표현하는 쿼터니언(q), 투명도(α), 색상(c)의 모든 파라미터들을 사용합니다. 이 모든 파라미터들을 Θi = {xi, si, qi, αi, ci}로 나타냅니다.
3D GS 내에서 무작위 위치가 설정되고, 밀도를 높이는 과정(densify)가 진행됩니다. 또한 SDS를 사용해서 2D diffusion 모델을 기반으로 3D GS를 최적화합니다.
Image-to-3D
입력값: 렌더링된 이미지
조건: 참조되는 이미지와 현재 카메라의 시점 변화
Text-to-3D
Stable diffusion model을 사용했습니다. e는 text를 clip embedding을 이용해서 추출한 임베딩 값입니다.
Local Density Query
3D GS를 3D Mesh형태로 바꾸는 과정을 설명하는 것입니다.
3D 공간을 의 형태로 나눈 후, 이를 의 block들로 나눕니다. 이후 각 block안에 gaussian의 중심이 존재하는지 확인합니다. 이후 각 block안의 공간을 다시 의 grid로 나눕니다. 이렇게 되면 총 의 grid가 생성됩니다. 이후 각 grid에 대한 밀도값을 아래와 같이 구합니다.
밀도를 구한 후 Marching Cubes 알고리즘을 이용해서 mesh를 구합니다.
후처리로 Decimation and remeshing를 적용해서 더 부드럽고 compact하게 만듭니다.
Color Back-projection
3D Mesh로 변환됐기 때문에 이를 이용해 UV Textur를 구할 수 있습니다. 8개의 방위각(azimuths)과 3개의 고도(elevations) 그리고 2개의 views(top, down)에 대해서 대응하는 RGB 이미지를 렌더링합니다. 이후 렌더링된 RGB 이미지의 픽셀을 메쉬의 UV 좌표에 맞게 projection합니다. 추가적으로 z방향으로 법선벡터(normal)이 작은 경우 급격한 변화가 발생할 수 있으므로 해당 경우는 학습에서 제외시켰습니다.
UV-Space를 SDS를 기반으로 fine-tuning시킬 시 가운데 사진처럼 artifacts가 발생합니다. 이러한 artifacts가 발생하는 이유를 논문에서는 mipmap texture smapling technique를 사용했기 때문이라고 언급했습니다. 즉 다양한 해상도를 매핑하는 과정에서 부적절한 매핑이 발생한다는 것입니다.
따라서 SDS 방법이 아닌 SDEdit를 기반으로 한 방법을 사용했습니다. 이전단계에서 어느정도 생성된 texture()에 대해 랜덤한 시점 p로 렌더링 합니다. 이 렌더링된 이미지에 적당한 노이즈를 더한 후, diffusion model을 이용해서 denoising 과정을 거쳐 새로운 이미지()을 생성합니다.
해당 과정의 수식은 위와 같고 Imge-to-3D의 경우에는 c가 카메라 시점차이인 p, Text-to-3D인 경우에는 텍스트 임베딩 값인 e가 들어갑니다.
이후 MSE Loss를 이용해서 2개의 이미지의 차이를 최소화합니다.
주기적인 3D GS의 수를 증가 시키지 않을 경우 흐릿하거나 부정확한 결과가 나타납니다.
노이즈를 조절해주지 않으면 역시 부정확한 결과를 초래합니다.
Image-to-3D에서 원본 이미지와 비교하는 loss를 제거할 경우 부정확한 결과를 초래합니다.