YYYYYYUUU's picture
Backup FULL local core code incl. libs/ CUDA ext + all configs
3499c27 verified
Raw
History Blame Contribute Delete
2.24 kB
import json
import shutil
import argparse
import torch
import glob
import os.path
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--dataset_root",
required=True,
help="Path to the ScanNet dataset containing scene folders",
)
parser.add_argument(
"--processed_root",
required=True,
help="Path to the processed ScanNet dataset, add partition to test data dict",
)
parser.add_argument(
"--segmentor_root",
required=True,
help="Path to Felzenswalb and Huttenlocher's Graph Based Image Segmentation binary",
)
parser.add_argument(
"--split",
default="test",
choices=["test", "val"],
help="Split to process. [test / val]",
)
config = parser.parse_args()
if config.split == "test":
raw_split = "scans_test"
else:
raw_split = "scans"
scene_list = glob.glob(os.path.join(config.processed_root, config.split, "*.pth"))
os.makedirs(os.path.join(config.processed_root, "tmp"), exist_ok=True)
for scene in scene_list:
scene_name = os.path.basename(scene).split(".")[0]
raw_scene = os.path.join(
config.dataset_root,
raw_split,
scene_name,
f"{scene_name}_vh_clean_2.ply",
)
tmp_scene = os.path.join(
config.processed_root,
"tmp",
f"{scene_name}_vh_clean_2.ply",
)
# copy original scene to tmp folder
shutil.copy(raw_scene, tmp_scene)
# run segmentor
process = os.popen(f"{config.segmentor_root} {tmp_scene}")
print(process.read())
process.close()
# load partition file
partition_file = tmp_scene.replace(".ply", ".0.010000.segs.json")
with open(partition_file) as f:
partition = json.load(f)["segIndices"]
data_dict = torch.load(scene)
data_dict["partition"] = partition
torch.save(data_dict, scene)
# clean tmp
os.remove(partition_file)
os.remove(tmp_scene)
print(f"Adding partition information to {scene_name}")
os.rmdir(os.path.join(config.processed_root, "tmp"))