Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Trikang

Nerfstudio에서 ODM(OpenDroneMap)을 이용해 전처리한 데이터 사용하기 + 3D Gaussian Splatting Nerfstudio에서 학습하기 본문

공부/ML

Nerfstudio에서 ODM(OpenDroneMap)을 이용해 전처리한 데이터 사용하기 + 3D Gaussian Splatting Nerfstudio에서 학습하기

Trikang 2024. 3. 25. 15:07

드론 매핑을 이용한 데이터 전처리

OpenDroneMap이 docker 버전으로 설치되어 있다고 가정

docker run -ti --rm -v {local directory}:{docker volume에서의 directory} opendronemap/odm --project-path {docker volume에서의 directory} {프로젝트 명} {옵션}

 

아래는 local directory: /home/user/data/odm_dataset

docker volume에서의 directory: /datasets

프로젝트 명: drone-230706-1722-25-fastortho

 

이라고 가정하였을 때의 코드 예시

* 여기서, local directory 안에 '프로젝트 명' 폴더를 하나 만들고, 그 안에 여러 source 이미지가 들어있는 Images 디렉토리가 필요함. 아래 상황에서는 /home/user/data/odm_dataset/drone-230706-1722-25-fastortho 디렉토리가 존재하고, 해당 디렉토리 안에 Images 디렉토리와 그 내용물이 있어야 한다는 의미임.

docker run -ti --rm -v /home/user/data/odm_dataset:/datasets opendronemap/odm --project-path /datasets drone-230706-1722-25-fastortho --dem-resolution 2.0 --dsm --fast-orthophoto

 

nerfstudio 컨테이너와 연동된 볼륨으로 데이터 옮기기

우선 Nerfstudio 실행

만약 run이 되어있지 않으면

sudo docker start nerfstudio

 

그 이후

sudo docker attach nerfstudio

 

ODM 결과를 nerfstudio 컨테이너 연동 볼륨으로 데이터 복사

sudo cp -r data/odm_dataset/test_project nerfstudio/data/

 

데이터를 복사하는 과정에서 디렉토리의 Owner가 root로 변경되어 다시 user로 바꿨다

sudo chown -R user:user drone-230706-1722-25-fastortho

 

nerfstudio에 맞게 데이터 가공

ns-process-data 명령으로 nerfstudio에 맞게 데이터 가공 실행

ns-process-data odm --data data/drone-230706-1722-25-fastortho --output-dir data/outputs/drone-230706-1722-25-fast

 

그런데 아래와 같은 에러가 발생했다

Traceback (most recent call last):
  File "/home/user/.local/bin/ns-process-data", line 8, in <module>
    sys.exit(entrypoint())
  File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/process_data.py", line524, in entrypoint
    tyro.cli(Commands).main()
  File "/home/user/3D_survey/nerfstudio/nerfstudio/scripts/process_data.py", line437, in main
    copied_image_paths = process_data_utils.copy_images_list(
  File "/home/user/3D_survey/nerfstudio/nerfstudio/process_data/process_data_utils.py", line 305, in copy_images_list
    ffmpeg_cmd = f'ffmpeg -y -noautorotate -i "{image_dir / f"{framename}{copied_image_paths[0].suffix}"}" '
IndexError: list index out of range

 

내부 코드 열심히 뜯어가며 확인한 결과, 그냥 경로 실수였다. path 잘 보자.

ns-process-data odm --data data/drone-230706-1722-25-fastortho --output-dir data/outputs/drone-230706-1722-25-fast

3D-GS 실행

학습 진행

ns-train splatfacto --data outputs/map_2

학습을 진행하는 동안 ip:7007로 접속하여(웹 브라우저) 학습 과정과 결과를 볼 수 있음.

 

3D Points 추출

ns-export gaussian-splat --load-config outputs/map_230706_1722_25m/splatfacto/2024-03-22_073036/config.yml --output-dir exports/splat/

 

키프레임 입력해서 비디오 추출도 가능

ns-render camera-path --load-config outputs/map_2/splatfacto/2024-03-25_054644/config.yml --camera-path-filename /workspace/outputs/map_2/camera_paths/2024-03-25-05-46-47.json --output-path renders/map_2/2024-03-25-05-46-47.mp4

 

 

Comments