본문 바로가기

데이터 과학/딥러닝 FrameWork

Tensorboard에서 Open3D 사용하기

Getting started

데이터 셋 읽기

import open3d.ml.torch as ml3d 

# construct a dataset by specifying dataset_path
dataset = ml3d.datasets.SemanticKITTI(dataset_path='/path/to/SemanticKITTI/')

# get the 'all' split that combines training, validation and test set
all_split = dataset.get_split('all')

# print the attributes of the first datum
print(all_split.get_attr(0))

# print the shape of the first point cloud
print(all_split.get_data(0)['point'].shape)

# show the first 100 frames using the visualizer
vis = ml3d.vis.Visualizer()
vis.visualize_dataset(dataset, 'all', indices=range(100))

Loading a config file

모델, 데이터셋, 파이프라인 설정은 ml3d/configs에 저장되어 있다. 사용자는 사용자 정의 yaml 파일을 구성할 수 있다.

아래는 config 파일 읽기 예시이다.

import open3d.ml as _ml3d
import open3d.ml.torch as ml3d # or open3d.ml.tf as ml3d

framework = "torch" # or tf
cfg_file = "ml3d/configs/randlanet_semantickitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

# fetch the classes by the name
Pipeline = _ml3d.utils.get_module("pipeline", cfg.pipeline.name, framework)
Model = _ml3d.utils.get_module("model", cfg.model.name, framework)
Dataset = _ml3d.utils.get_module("dataset", cfg.dataset.name)

# use the arguments in the config file to construct the instances
# config 파일을 인스턴스를 구성하기 위해 쓴다.
cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = Dataset(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
model = Model(**cfg.model)
pipeline = Pipeline(model, dataset, **cfg.pipeline)

Semantic Segmentation

미리 학습된 weights를 실행해 볼 수 있다. 사전 훈련된 모델로 파이프라인을 인스턴스화 할 수 있다. model zoo 참조.

위의 처럼 _ml3d.utils.get_module("pipeline", ...) 로 Pipeline, Model, Dataset을 인스턴스화 할 수도 있고, 혹은 ml3d.models, ml3d.dataset, ml3d.pipelines 로 인스턴스화 할 수도 있다.

import os
import open3d.ml as _ml3d
import open3d.ml.torch as ml3d

cfg_file = "ml3d/configs/randlanet_semantickitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

model = ml3d.models.RandLANet(**cfg.model)
cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = ml3d.datasets.SemanticKITTI(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
pipeline = ml3d.pipelines.SemanticSegmentation(model, dataset=dataset, device="gpu", **cfg.pipeline)

# download the weights
ckpt_folder = "./logs/"
os.makedirs(ckpt_folder, exist_ok=True)
ckpt_path = ckpt_folder + "randlanet_semantickitti_202201071330utc.pth"
randlanet_url = "https://storage.googleapis.com/open3d-releases/model-zoo/randlanet_semantickitti_202201071330utc.pth"
if not os.path.exists(ckpt_path):
    cmd = "wget {} -O {}".format(randlanet_url, ckpt_path)
    os.system(cmd)
    
# load the parameters
pipeline.load_ckpt(ckpt_path=ckpt_path)

test_split = dataset.get_split("test")
data = test_split.get_data(0)

# run inference on a single example.
# returns dict with 'predict_labels' and 'predict_scores'.
result = pipeline.run_inference(data)

# evaluate performance on the test set; this will write logs to './logs'.
pipeline.run_test()

 

Training a model for semantic segmentation

추론과 마찬가지로, 파이프라인은 학습을 위한 인터페이스 제공한다.

# use a cache for storing the results of the preprocessing (default path is './logs/cache')
dataset = ml3d.datasets.SemanticKITTI(dataset_path='/path/to/SemanticKITTI/', use_cache=True)

# create the model with random initialization
model = RandLANet()
pipeline = SemanticSegmentation(model=model, dataset=dataset, max_epoch=100)

# prints training progress in the console.
pipeline.run_train()

 

(Open3D로 학습을 시도하는 건 좀 아닌 것 같다...)

 

혹여나, 빌트인 된 모델과 데이터셋 종류를 확인하려면 아래를 참고한다.

빌트인 모델 종류: https://storage.googleapis.com/open3d-releases/model-zoo/model_weights.txt

빌트인 데이터셋 종류: https://github.com/isl-org/Open3D-ML#datasets

 

3D Object Detection

(...생략...)

 

 

https://github.com/isl-org/Open3D-ML

 

GitHub - isl-org/Open3D-ML: An extension of Open3D to address 3D Machine Learning tasks

An extension of Open3D to address 3D Machine Learning tasks - GitHub - isl-org/Open3D-ML: An extension of Open3D to address 3D Machine Learning tasks

github.com

 

반응형

'데이터 과학 > 딥러닝 FrameWork' 카테고리의 다른 글

torch_scatter 설치  (0) 2022.12.16
RNN & LSTM 설명 및 구현(pytorch)  (0) 2021.03.29
모델 앙상블(ensemble) 하기  (0) 2021.02.26
Trouble Shooting  (0) 2021.01.31
Torch 데이터셋 & 데이터 로더 + Transforms  (0) 2021.01.30