forked from Jianghanxiao/PhysTwin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinteractive_playground.py
More file actions
103 lines (90 loc) · 3.19 KB
/
Copy pathinteractive_playground.py
File metadata and controls
103 lines (90 loc) · 3.19 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from qqtt import InvPhyTrainerWarp
from qqtt.utils import logger, cfg
from datetime import datetime
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__":
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(
"--bg_img_path",
type=str,
default="./data/bg.png",
)
parser.add_argument("--case_name", type=str, default="double_lift_cloth_3")
parser.add_argument("--n_ctrl_parts", type=int, default=2)
parser.add_argument(
"--inv_ctrl", action="store_true", help="invert horizontal control direction"
)
parser.add_argument(
"--virtual_key_input", action="store_true", help="use virtual key input"
)
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"./temp_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.bg_img_path = args.bg_img_path
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.interactive_playground(
best_model_path,
gaussians_path,
args.n_ctrl_parts,
args.inv_ctrl,
virtual_key_input=args.virtual_key_input,
)