1 of 35

연수 결과 발표

한국전자통신연구원 홍상기 교수님

2024 UST 동계연수생 하시윤

NERF를 이용한 

3D 객체 및 공간 모델링

2 of 35

01

NeRF

(1) 개념

(2) Pipeline

(3) 한계점

04

성능 비교

02

Nerfacto

05

Point Cloud 추출

03

PixelNeRF

06

활용 방안

목차

(1) 개념

(2) 실습

(1) 개념

(2) 실습

3 of 35

개념

Pipeline

한계점

PART 01.

NeRF

4 of 35

PART 01

- 객체의 3D 모델을 생성하는 기술이 아닌, 객체를 바라보는 모든 장면을 생성하는 기술 사용.

- 장점 :

  • 연속적인 공간에 대한 표현을 사용하기 때문에 view 이동이 자연스러움.
  • 컬러 뿐만 아니라 밀도도 추정하기 때문에 리얼한 결과 출력. 

Nerf

5 of 35

PART 02

Nerf(Training.)

Uniform Sampler

Coarse

Volumetric Renderer

PDF Sampler

Fine

Volumetric Renderer

  • Uniform Sampler : 사용자가 원하는 범위 내의 일정한 범위로 자른 구간에서 랜덤의 포인트를 선택하는 것.

x, y, z, dir

6 of 35

PART 02

Nerf(Training.)

Uniform Sampler

Coarse

PDF Sampler

Fine

  • Positional Encoding : 고주파 함수로 입력 데이터를 고차원 데이터로 Mapping.

Volumetric Renderer

Volumetric Renderer

밀도, 색상

<MLP>

<Positional Encoding>

7 of 35

PART 02

Nerf(Training.)

Uniform Sampler

Coarse

PDF Sampler

Fine

  • Volume Rendering : 한 ray선상의 포인트에 대한 컬러, density를 바탕으로 한 pixel의 color 구하는 과정

Volumetric Renderer

Volumetric Renderer

RGB coarse, Weights

8 of 35

PART 02

Nerf(Training.)

Uniform Sampler

Coarse

PDF Sampler

Fine

  • PDF Sampler : 밀도가 높은 포인트의 좌표 주변에 더 많은 샘플링 진행.

Volumetric Renderer

Volumetric Renderer

x, y, z, dir

9 of 35

PART 02

Nerf(Training.)

Uniform Sampler

Coarse

PDF Sampler

Fine

  • Fine network(Coarse와 동일한 구조)를 통해 학습된 결과에서 밀도 값이 크게 나온 부분만 골라 그 부분에서 다시 sampling하여 추가 학습.

  • 앞의 Volume Rendering과 동일하게 진행.
  • Loss = (Coarse Model로 나온 color와 실제 color와의 Loss) + (Fine Model로 나온 color와 실제color와의 Loss).

Volumetric Renderer

Volumetric Renderer

밀도, 색상

10 of 35

PART 01

2

적은 수의 입력 데이터셋에 대해 최적화한 모델

NeRF의 한계점

1

V100 GPU에서 학습이 1일 이상 소요되고, 렌더링 1장에 30초 정도 소요

-> 실시간 Application 불가능

Training, Rendering 속도 개선한 모델

많은 입력 이미지 필요

11 of 35

개념

실습

PART 02.

Nerfacto

12 of 35

  • 조각별 샘플러 : 최대 1거리까지의 샘플은 균일하게 할당, but 나머지 샘플은 각 샘플마다 단계 크기가 증가하도록 배포.
  • 제안 샘플러 : 두 개의 밀도 함수를 바탕으로 최종 픽셀에 가장 많이 기여하는 샘플 위치 넣어줌.

PART 02

Nerfacto

13 of 35

  • NeRF 모델 구현에 필요한 Data Preprocess, Data Loader, Model Training, Visualizing, Rendering을 API형태로 제공. (Framework)

PART 02

NeRF Studio

14 of 35

* Environment : Docker의 dromni/nerfstudio 1.0.0 Image(컨테이너 정의하는 읽기 전용 템플릿)의 nerfstudio Container *

(1) Training

  • ns-train {사용 모델명} --data {사용 데이터 directory} --vis viewer_legacy

PART 02

실습 - 1) 기본 데이터셋

15 of 35

PART 02

실습 - 1) 기본 데이터셋

(1) Training

=> 학습 시간 : 1 iteration 당 약 0.03s -> 30000 iteration 수행 시 900s (약 15분 소요).

  • Config File : 모델 구조를 저장해둔 파일.
  • Checkpoint Directory : 학습된 모델의 구조를 제외한 parameter 담고 있는 파일.

16 of 35

PART 02

실습 - 1) 기본 데이터셋

(2) Rendering

  • Add Camera 기능 -> User가 원하는 camera_path 설정.
  • Rendering 실시

17 of 35

PART 02

실습 - 1) 기본 데이터셋

(2) Rendering

18 of 35

PART 02

실습 - 2) 509 회의실

* 360 Data (Equirectangular) through Insta360 -> 509 회의실 *

(1) Preprocessing 

  •  images-per-equirect : 8 or 14 -> 14
  •  num-frames-target(optional) : 3*(second of video) -> 62s
  •  crop-factor : top, bottom, left, right -> 0 0.25 0 0 (over head, but hand see)

=> 186 * 14 = 2604 images

19 of 35

PART 02

실습 - 2) 509 회의실

(2) Training

(3) Rendering

20 of 35

PART 02

실습 - 2) 509 회의실

(3) Rendering

  • bottom crop factor : 0.25 -> mesh -> crop factor 값 증대 필요. 

21 of 35

PART 02

실습 - 3) 1층 본관

* 상대적으로 더 넓고, 빛이 들어오는 공간 *

(1) Preprocessing

  •  images-per-equirect : 8 or 14 -> 14
  •  num-frames-target(optional) : 3*(second of video) -> 49s
  •  crop-factor : top, bottom, left, right -> 0 0.4 0 0 (over head, but hand see)

=> 1500 images

22 of 35

PART 02

실습 - 3) 1층 본관

(2) Training

(3) Rendering

23 of 35

개념

PART 03.

PixelNeRF

실습

24 of 35

  • 입력 이미지에서 각 픽셀을 해당 픽셀과 매핑되는 feature grid로 Encoding.
  • MLP 학습 시 피처가 추가로 Input에 들어감.

PART 03

PixelNeRF

25 of 35

실습 - 1층 본관

(1) PixelNeRF Method 생성

  • 이전 Nerfacto 모델은 Nerf Studio에 내포된 모델이었지만, PixelNeRF는 내장된 모델 x.

-> NeRF Studio의 Adding a New Method 기능을 활용하여 my_method(PixelNeRF) 생성.

PART 03

26 of 35

실습 - 1층 본관

(1) PixelNeRF Method 생성

  • ns-train {사용할 모델 명} -- data /workspace/preprocessed_data --vis viewer_legacy
  • pip install –e .

추후 train시, call할 method 이름, pipeline 등 지정

method에 대한 진입점 설정 및 코드 베이스에 필요한 추가 종속성 지정

PART 03

27 of 35

PART 03

실습 - 1층 본관

(2) 실행

  • 이전 Nerfacto 모델에서 사용했던 1500 images 중 임의로 303장 추출하여 PixelNeRF 실행.
  • Training

28 of 35

PART 04.

성능 비교

29 of 35

PART 04

성능 비교 : PixelNeRF vs Nerfacto

(1) Evaluation

output.json

30 of 35

PART 04

성능 비교 : PixelNeRF vs Nerfacto

(1) Evaluation

<PixelNeRF>                                                                                          <Nerfacto>

31 of 35

PART 05.

Point Cloud 추출

32 of 35

PART 05

Point Cloud 추출(1층 본관)

<출입구에서 본 모습>

  • 약 13,000,000개의 Point 사용.

<상단에서 본 모습>

33 of 35

PART 06.

활용 방안

34 of 35

Part 06

01. 드론을 활용한 건물 외부 모델링

02. 자율주행 알고리즘 테스트

03. 가상 현실 모델링

 공간 모델링

활용 방안

35 of 35

인턴십 소감

  • 인턴십을 처음 진행하며 회사에 한 달이라는 시간 동안 잘 적응할 수 있을까 걱정했는데, 교수님과 연구원님의 도움으로 연구실 분위기에 대해 많이 알 수 있었습니다. 또한, nerf라는 모델을 활용하여 실습을 진행하며 공간 모델링에 대한 많은 관심을 더 갖게 되었고, 기회가 된다면 올해 여름에도 인턴십에 참여하고 싶습니다.

인턴십 소감