Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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에서 여러 데이터 셋 한 번에 COMLAP 처리하기(python 코드 작성) 본문

공부/ML

[리눅스] nerfstudio에서 여러 데이터 셋 한 번에 COMLAP 처리하기(python 코드 작성)

Trikang 2024. 3. 2. 00:46

환경 세팅은 이전 글 참고

https://yskang.tistory.com/27

 

[리눅스, RTX 4090] NeRF & 3D Gaussian Splatting 실험 환경 설정(CUDA 환경설정, Tanks and Temples 데이터셋, nerfs

우선 실험에 필요한 데이터 셋을 받는다. 이번에는 Nerf Synthetic, LLFF, Tanks and Temples 데이터 셋을 사용할 예정이다. 설치 중, Tanks and Temples 데이터 셋 다운로드에서 문제가 발생했다. Tanks and Temples

yskang.tistory.com


xxxx@xxxxxxxxxxx:~/3D_survey/datasets$ ns-process-data images --data nerf_synthetic/chair/train --output-dir processed/nerf_synthetic_chair

Could not find ffmpeg. Please install ffmpeg.
See https://ffmpeg.org/download.html for installation instructions.

 

np-process-data 명령(https://docs.nerf.studio/quickstart/custom_dataset.html)을 이용해 데이터 셋을 가공하려 했으나, 위처럼 ffmpeg이 없다는 문제 발생. 저 매뉴얼을 대충 봤었는데, 아래로 내려보니 COLMAP 설치 가이드도 있어, ffmpeg, COLMAP을 설치.

sudo apt update
sudo apt install ffmpeg

 

COLMAP은 conda install로 설치하는 것을 권장해서 conda를 이용해 설치

conda install -c conda-forge colmap

 

근데 설치가 안되어서 확인해보니 cudatoolkit이 안 깔려있었다. 어제 테스트 어떻게 한거지?

conda install cudatoolkit

 

이후에 다시 위의 ns-process-data 명령을 실행하니 잘 작동했다.

 

이를 각 데이터셋마다 처리해주기 위해 자동화 코드를 아래와 같이 작성했다.

import subprocess
import os

def process_data(data_pairs):
    failed_commands = []
    for data_pair in data_pairs:
        input_data_path, output_dir_path = data_pair
        command = f"ns-process-data images --data datasets/{input_data_path} --output-dir {output_dir_path}"
        try:
            print(f"Starting: {command}")
            subprocess.run(command, shell=True, check=True)
            print("Success")
        except subprocess.CalledProcessError as e:
            print(f"Command failed: {command}")
            print(f"Error: {e}")
            failed_commands.append(command)
    if failed_commands:
        print("Failed commands:")
        for cmd in failed_commands:
            print(cmd)
        # subprocess.run(command, shell=True)

# 여러 데이터 쌍을 정의합니다.
data_pairs = [
    ("nerf_synthetic/drums/train", "processed/nerf_synthetic_drums"),
    ("nerf_synthetic/ficus/train", "processed/nerf_synthetic_ficus"),
    ("nerf_synthetic/hotdog/train", "processed/nerf_synthetic_hotdog"),
    ("nerf_synthetic/lego/train", "processed/nerf_synthetic_lego"),
    ("nerf_synthetic/materials/train", "processed/nerf_synthetic_hotdog"),
    ("nerf_synthetic/mic/train", "processed/nerf_synthetic_mic"),
    ("nerf_synthetic/ship/train", "processed/nerf_synthetic_ship"),

    # LLFF Datasets
    ("nerf_llff_data/fern/images", "processed/nerf_llff_fern"),
    ("nerf_llff_data/flower/images", "processed/nerf_llff_flower"),
    ("nerf_llff_data/fortress/images", "processed/nerf_llff_fortress"),
    ("nerf_llff_data/horns/images", "processed/nerf_llff_horns"),
    ("nerf_llff_data/leaves/images", "processed/nerf_llff_leaves"),
    ("nerf_llff_data/orchids/images", "processed/nerf_llff_orchids"),
    ("nerf_llff_data/room/images", "processed/nerf_llff_room"),

    # Tanks and Temples
    ("tanks_and_temples/M60", "processed/tanks_and_temples_M60"),
    ("tanks_and_temples/Playground", "processed/tanks_and_temples_Playground"),
    ("tanks_and_temples/Train", "processed/tanks_and_temples_Train"),
    ("tanks_and_temples/Truck", "processed/tanks_and_temples_Truck"),

]

# 데이터 쌍을 처리합니다.
process_data(data_pairs)
Comments