forked from Jianghanxiao/PhysTwin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvisualize_material.py
More file actions
87 lines (73 loc) · 2.78 KB
/
Copy pathvisualize_material.py
File metadata and controls
87 lines (73 loc) · 2.78 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Experimental feature to approximate the materials in the spring-mass model.
from qqtt import InvPhyTrainerWarp
from qqtt.utils import logger, cfg
import random
import numpy as np
import torch
from argparse import ArgumentParser
import glob
import os
import pickle
import json
def set_all_seeds(seed):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed) # if you are using multi-GPU.
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
seed = 42
set_all_seeds(seed)
if __name__ == "__main__":
cfg.load_from_yaml("configs/real.yaml")
parser = ArgumentParser()
parser.add_argument(
"--base_path",
type=str,
default="./data/different_types",
)
parser.add_argument(
"--gaussian_path",
type=str,
default="./gaussian_output",
)
parser.add_argument("--case_name", type=str, default="double_stretch_sloth")
args = parser.parse_args()
base_path = args.base_path
case_name = args.case_name
if "cloth" in case_name or "package" in case_name:
cfg.load_from_yaml("configs/cloth.yaml")
else:
cfg.load_from_yaml("configs/real.yaml")
base_dir = f"./experiments/{case_name}"
# Read the first-satage optimized parameters to set the indifferentiable parameters
optimal_path = f"./experiments_optimization/{case_name}/optimal_params.pkl"
logger.info(f"Load optimal parameters from: {optimal_path}")
assert os.path.exists(
optimal_path
), f"{case_name}: Optimal parameters not found: {optimal_path}"
with open(optimal_path, "rb") as f:
optimal_params = pickle.load(f)
cfg.set_optimal_params(optimal_params)
# Set the intrinsic and extrinsic parameters for visualization
with open(f"{base_path}/{case_name}/calibrate.pkl", "rb") as f:
c2ws = pickle.load(f)
w2cs = [np.linalg.inv(c2w) for c2w in c2ws]
cfg.c2ws = np.array(c2ws)
cfg.w2cs = np.array(w2cs)
with open(f"{base_path}/{case_name}/metadata.json", "r") as f:
data = json.load(f)
cfg.intrinsics = np.array(data["intrinsics"])
cfg.WH = data["WH"]
cfg.overlay_path = f"{base_path}/{case_name}/color"
exp_name = "init=hybrid_iso=True_ldepth=0.001_lnormal=0.0_laniso_0.0_lseg=1.0"
gaussians_path = f"{args.gaussian_path}/{case_name}/{exp_name}/point_cloud/iteration_10000/point_cloud.ply"
logger.set_log_file(path=base_dir, name="inference_log")
trainer = InvPhyTrainerWarp(
data_path=f"{base_path}/{case_name}/final_data.pkl",
base_dir=base_dir,
pure_inference_mode=True,
)
best_model_path = glob.glob(f"experiments/{case_name}/train/best_*.pth")[0]
trainer.visualize_material(best_model_path, gaussians_path)