Contents[R:세미나] 리콘랩스 오픈 세미나 #3, ‘NeRF & Gaussian Splatting’

리콘랩스의 사내 오픈세미나는 어느덧 세 번째 차례를 맞았습니다. “NeRF & Gaussian Splatting” 주제로 세미나가 진행되었어요.


사내 오픈 세미나에서는 현재 서비스에 활용되는 기술뿐만이 아니라 새롭게 떠오르는 IT기술을 따라잡는 것에도 힘쓰고 있는데요! ‘Gaussian Splatting’이라는 신기술이 최근 많은 관심을 받는만큼, 기술에 대한 정보를 얻고자 역시 많은 구성원이 모여 장소를 꽉 채웠습니다.


리콘랩스의 핵심 기술인 NeRF 기반 3D Reconstruction과 Gaussian Splatting은 어떤 점이 비슷하고, 어떤 점이 다른 지, 그리고 왜 업계에서는 이 기술에 많은 관심을 쏟고 있는지 오늘 세미나를 통해 간략하게나마 개념을 정립하자는 목표를 갖고 세미나를 시작합니다.


본격적인 NeRF & Gaussian Splitting 들어가기에 앞서 3차원 그래픽스에 대해 자세히 알고 싶다면, 지난 세미나 내용을 참고해주세요.

https://blog.naver.com/reconlabs/223235701958


NeRF: Neural Radiance Fields

NeRF는 Neural Radiance Fields를 줄인 표현이에요. 큰 틀에서 NeRF는 화면에 3차원 정보를 그려내는 방식 중 하나입니다. 그런데 단어 하나하나가 만만치 않은 느낌이죠. 이를 설명하기 이전에 먼저 기존 방식을 잠깐 돌아보도록 하겠습니다.


어떤 정보를 화면에 그려내는 것을 그래픽스에서 우리는 Rendering 이라고 합니다. 이 Rendering 방식은 대표적으로 두 가지 방식이 있어요.

•Surface Rendering: 전통적인 랜더링 방식입니다. 지난 시간에 우리가 살펴보았던 Mesh와 Texture를 써서 표면을 그리는 방식이에요. 표면정보를 이용해 그려낸다는 의미를 담고 있습니다.

•Volumn Rendering: 볼륨을 그려낸다? 볼륨을 어떻게 그려낼까? 볼륨 렌더링은 흔히 CT나 MRI로 찍은 복셀 정보를 그릴때 쓰는 방식인데요. 공간 전체의 정보를 복셀로 저장하고(MRI로 몸을 스캔하면 생기는 정보),이 복셀을 원하는 형태로 그려내는 방식의 총칭 입니다. 빈 공간의 밀도가 0이라서 그리지 않고, 정보가 있는 곳(밀도가 0이 아닌 복셀)은 화면에 그려주는 방식이에요.

우리가 다루게 될 주제인 NeRF는 다른 표현으로 Neural Rendering이라고 하기도 하는데요, 뉴럴 네트워크를 학습시켜서 화면에 그리기 때문에 붙은 이름이에요. 그런데 뉴럴 네트워크로 어떻게 3차원 공간을 그릴 수 있을까요?


아주 단순화하면 우리가 흔히 뉴럴 네트워크라고 부르는 녀석은 하나의 함수라고 생각해 볼 수 있어요. 입력을 넣으면, 출력이 나오죠. Neural Rendering 방식에서는 뉴럴 네트워크를 다음과 같은 함수처럼 사용합니다.

(색상, 밀도) = f(좌표, 보는 방향)

즉, 내가 공간상의 어떤 특정 지점을 어떤 방향에서 볼 지 입력해 주면, 학습된 네트워크가 해당 지점의 색상과 밀도를 출력해 주게 되어요. 이런 방식을 처음으로 효과적으로 정리한 논문의 별명이 NeRF, Neural Radiance Fields 이고요. (링크)


이쯤에서 NeRF의 의미를 단어에 맞춰 다시 생각해 본다면

  • Neural: 신경망을 기반으로한 방법
  • Radiance: 빛의 방사(보는 방향에 따라 색상이 달라 보이는 특성) 
  • Fields: 공간의 모든 지점에 대해 정해진 값이 있는 정보 덩어리

가 됩니다. 따라서 NeRF, 즉 Neural Radiance Fields를 풀어서 써 보자면,

  • 신경망을써서
  • 빛의 방사 특성을
  • 공간상의 모든 지점에 대해 계산하는 함수를 만들자.

가 NeRF의 아이디어가 되겠습니다.

우리가 여러 사진, 혹은 비디오에서 추출한 프레임을 활용해서 학습시키면, 위 기능을 하는 함수처럼 작동하는 뉴럴 네트워크를 만들 수 있어요. 실제로 진행되는 과정을 구체적으로 설명해 보자면 다음과 같습니다.

  1. 1.공간의 사진을 많이 찍는다.
  2. 2.공간상에서 사진이 찍힌 위치를 계산한다.
  3. 3.(색상,밀도)=f(공간상의 지점, 보는 방향) 에서 f의 역할을 할 수 있는 뉴럴 네트워크를 만들다.
  4. 4.*(처음에는 뉴럴 네트워크가 제대로 학습되지 않았으므로, 틀린 함수겠죠?)
  5. 5.뉴럴 네트워크가 추측한 색상과 밀도로 그림을 그려보았을 때, 가능한 실제로 찍힌 사진과 일치하도록 뉴럴 네트워크를 업데이트 시킨다.
  6. 6.어디에서 보더라도 뉴럴넷이 추측한 정보가 찍힌 사람들과 충분히 같이 보이면 종료한다.

이렇게 잘 학습된 공간을 표현하는 함수, 즉 네트워크가 학습되면 사진이 찍힌 공간에 대한 3차원 정보 전체를 뉴럴넷이 표현할 수 있게 됩니다. 그럼 이 함수를 사용해서 우리는 사진이 실제로 찍히지 않은 곳에서도 사진을 찍은 것처럼 그림을 만들어 내거나 (이를 View Synthesis라고 합니다) 혹은 3차원 물체를 Mesh로 만들어내는 등 (3D reconstruction), 다양한 응용을 할 수 있어요.


Gaussian Splatting

NeRF 방식은 매우 혁신적인 아이디어였어요. 사진만 많이 가지고 있어도 3차원 공간 전체의 정보를 표현할 수 있을 뿐만 아니라, 최근 많은 발전이 이루어진 AI 기술의 다양한 아이디어를 적용할 수 있는 발판이 되어서이기도 해요. 리콘랩스의 video to 3D 기술도 NeRF에서 제안된 아이디어를 활용하고 있어요.


이런 배경 속에서 최근 공간을 표현하는데 Mesh가 꼭 필요한가에 대한 근본적인 질문을 학계에 던지는, NeRF 분야에서 뜨거운 이슈가 된 논문이 2023년 그래픽스 최고 분야 학회인 SIGGRAPH 에서 발표되었습니다. <3D Gaussian Splatting for Real-Time Radiance Field Rendering>, 흔히 Gaussian Splatting으로 줄여 부르는 논문 입니다.


이름부터 뜯어볼까요? 한글로 번역하자면 “실시간으로 광학장을 표현하기 위한 3D Gaussian Splatting” 정도가 될 것 같은데요, 여기서 Gaussian과 Splatting은 각각 무슨 의미일까요?


먼저 Gaussian 은 정규분포를 뜻하는 Gaussian Distribution 에서 온 단어입니다. 아마 수학이 익숙하지 않으신 분들께는 포토샵과 같은 이미지 편집 툴에서 자주 쓰이는 ‘가우시안 블러(Gaussian Blur)’로 설명드리는게 가장 쉬운 방법일 것 같네요. 아래 그림처럼 특정 위치를 중심으로 뿌옇게, 즉 값이 점점 부드럽게 작아지는 형태가 Gaussian 이 되겠습니다.

Splatting은 우리말로는 “흩뿌려진” 이라는 의미로 번역할 수 있으니, 그렇다면 Gaussian Splatting은 “뿌연 점구름(3차원 가우시안)들을 공간상에 흩뿌리는 방식” 이라고 이해하면 좋겠습니다. 정리하자면, 

🧙 Gaussian Splatting: 3차원 공간을 표현하기 위해 점구름들을 공간상에 무수히 많이 흩뿌린 방식.

이 되겠네요.

말하자면, 가우시안 스플래팅의 아이디어는, 공간상에 M&M’s 초콜릿 같은 덩어리들을 흩뿌린 다음에, 주어진 여러 사진들이랑 똑같아질 때까지 초콜릿들의 위치, 크기, 색깔을 바꿔주는 방식이라고 생각하면 좋겠어요. (아래 그림 참조)

리콘랩스는 M&M’s와 어떠한 관계도 없습니다😂

학습 방식은 NeRF 와 큰 틀에서 비슷합니다. 순서를 매겨 설명해 보자면,

  1. 공간의 사진을 많이 찍는다.
  2. 공간상에서 사진이 찍힌 위치를 계산한다.
  3. 공간에 색깔이 있는 가우시안들을 흩뿌린다.
  4. 사진이 찍힌 위치에서 보았을 때, 사진과 일치하도록 가우시안들의 색상과 위치를 조정한다.
  5. 가우시안들의 위치와 색상이 어느 방향에서 보더라도 충분히 모든 사람들과 같이 보이면 종료한다.

위의 NeRF알고리즘과 비슷해 보이죠? 가장 큰 차이점이라고 한다면, NeRF는 공간에 대한 함수를 만드는 개념이라고 한다면, Gaussian Splatting은 공간을 표현하는 점구름을 만들어내는 개념이라고 보시면 되겠습니다.


이 방식이 함수 방식, 즉 NeRF대비 효율적인 이유는 간단합니다. 공간을 표현하는 정보를 만들어낼 때 함수를 거치게 되면, 함수 계산이라는 과정이 추가적으로 필요한 데에 반면에, 점구름을 한 번 만들어내게 되면, 만들어진 점구름을 그려내기만 하면 되기 때문이죠. 결과적으로 원하는 위치에서 공간을 바라본 장면을 그려내는데에 필요한 계산 횟수를 획기적으로 줄일 수 있습니다.


그 밖에도 다양한 장점들이 있는데요, 정보 전체의 크기가 뉴럴넷 기반 함수 대비 작아지기 때문에, 학습 시간도 빨라지고, 스마트폰의 웹 브라우저에서도 띄울 수 있는 수준이 되었습니다. 이러한 여러가지 장점 때문에 현재 연구진들은 이 기술이 3차원 표현 방식의 게임 체인저가 될 가능성이 높다고 전망하고 있습니다.

특히, 이 기술은 실사에 가까운 장면을 만들어내고자 할 때 유리하게 활용될 것으로 보고 있습니다. 이미 3D 공간을 구현을 구현해 콘텐츠를 만들거나 광고 영상을 제작하는 크리에이터의 작업을 SNS에서 자주 볼 수 있어요.

새로운 기술에 대한 강연에 이어 Q&A섹션이 진행되었는데요. 여러분도 흥미로워하실 질문들을 정리해보았습니다.


Q1. Gaussian Splatting을 결과물은 구슬 모양으로 이루어졌는데 이걸 합쳐서 Mesh를 만드는 것이 가능한지?

→ 표면을 깔끔하게 구현하기는 어렵기 때문에 현재 기준으로는 NeRF를 사용하는 방식이 우월할 수 있으나, 향후에 여러 아이디어가 응용되어 혁신이 될 가능성도 높다고 보여진다.

Q2. Gaussian Splatting 도입 이후는 기존의 3D 모델을 생성하는데 제약을 받았던 부분 중 해결할 수 있는게 있을지?

→ 앞으로 NeRF에서 추출하기 어려웠던 투명하거나 코팅재질의 제품의 정확도를 개선할 수 있을 것이라 예상한다.

Q3. Gaussian Splatting을 에디팅이 가능한지?

→ 도출되는 정보가 결국은 점구름, 즉 포인트클라우드와 이 위치의 가우시안 표준편차, 색상이기 때문에, 이 값들을 바꾸는 방식으로 매뉴얼 편집이 가능하다.


오늘 콘텐츠 어떠셨나요? 👀

Gaussian Splatting 기술은 3D Scene이나 사물을 보다 퀄리티 높에 재현할 도구로 평가받고 있습니다.

저희 리콘랩스 구성원들은 이러한 기술을 빠르게 습득하여 더 나은 서비스를 제공하기 위해 노력하고 있습니다. 이번 세미나를 통해 배운 기술을 바탕으로, 구성원들이 각자의 분야에서 어떻게 활용할지 기대가 됩니다.