File size: 5,479 Bytes
d6d3a5b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

import numpy as np
from manopth.manolayer import ManoLayer
import os
import torch

def get_mano_models():
    mano_path = "/data1/sim/mano_models/mano/models" 
    rgt_mano_layer = ManoLayer(
        flat_hand_mean=False,
        side='right',
        mano_root=mano_path, # mano_root #
        ncomps=45,
        use_pca=False,
        # root_rot_mode='axisang',
        # joint_rot_mode='axisang'
    )
    
    lft_mano_layer = ManoLayer(
        flat_hand_mean=False,
        side='left',
        mano_root=mano_path, # mano_root #
        ncomps=45,
        use_pca=False,
        # root_rot_mode='axisang',
        # joint_rot_mode='axisang'
    )
    
    return rgt_mano_layer, lft_mano_layer


def get_embeddings():
    # /home/xueyi/sim/arctic/prepared_data_s01_box_grab_01_2.npy
    # /home/xueyi/sim/arctic/prepared_data_s01_box_grab_01_1.npy
    # /home/xueyi/sim/arctic/prepared_data_s01_laptop_use_01_1.npy
    # /home/xueyi/sim/arctic/prepared_data_s02_laptop_use_02_2.npy
    tags = [
        "s01_box_grab_01", "s01_laptop_use_01", "s02_laptop_use_02"
    ]
    
    sv_root = "/home/xueyi/sim/arctic/"
    
    tot_pose_diff_data = []
    tot_gaussian_diff_data = []
    tot_beta_diff_data = []
    ws = 60
    aug_pose = 0.5
    aug_pose_beta = 0.3
    for tag in tags:
        for cur_view in range(1, 9):
            cur_predicted_data_sv_fn = f"prepared_data_{tag}_{cur_view}.npy"
            cur_predicted_data_sv_fn = os.path.join(sv_root, cur_predicted_data_sv_fn)
            prepared_data = np.load(cur_predicted_data_sv_fn, allow_pickle=True).item()
    
            # prepared_data = np.load(prepared_data_fn, allow_pickle=True).item()
            # print(f"prepared_data: {prepared_data.keys()}")
            # tag = "targets"
            # tag = "pred"
            # rhand_verts = prepared_data[f"{tag}.mano.v3d.cam.r"].detach().cpu().numpy()
            # lhand_verts = prepared_data[f"{tag}.mano.v3d.cam.l"].detach().cpu().numpy()
            # pred_obj_verts = prepared_data[f'{tag}.object.v.cam'].detach().cpu().numpy() # pred.object.v.cam

            # get_mano_model
            # rgt_mano_model, lft_mano_layer = get_mano_models(ncomps=45, side='right') ## single path -> and then to the evaluation protocal #
            
            pred_tag = "pred"
            target_tag = "targets"
            pred_pose_r = prepared_data[f"{pred_tag}.mano.pose.r"]
            target_pose_r = prepared_data[f"{target_tag}.mano.pose.r"]
            
            pred_pose_r = pred_pose_r.contiguous().view(pred_pose_r.size(0), -1).contiguous() ###
            pred_pose_r = pred_pose_r[:, 3:]
            target_pose_r = target_pose_r[:, 3:]
            
            
            for i in range(0, pred_pose_r.size(0) - 60, ws):
                st_idx = i
                ed_idx = i + ws
                cur_w_pred_pose_r = pred_pose_r[st_idx: ed_idx, 3:]
                cur_w_target_pose_r = target_pose_r[st_idx: ed_idx, 3:]
                diff_cur_w_target_pred_pose_r = cur_w_pred_pose_r - cur_w_target_pose_r
                # diff_cur_w_target_pred_pose_
                tot_pose_diff_data.append(diff_cur_w_target_pred_pose_r.numpy())
                
                gaussian_rnd_noise = torch.randn_like(diff_cur_w_target_pred_pose_r) * aug_pose 
                gaussian_rnd_noise = gaussian_rnd_noise.numpy()
                
                tot_gaussian_diff_data.append(gaussian_rnd_noise)
                
                
                dist_beta = torch.distributions.beta.Beta(torch.tensor([8.]), torch.tensor([2.]))
                aug_pose_var = dist_beta.sample(diff_cur_w_target_pred_pose_r.size()).squeeze(-1) * aug_pose_beta
                
                # aug_pose_var = torch.randn_like(torch.from_numpy(diff_cur_w_target_pred_pose_r).float()) * aug_pose 
                aug_pose_var = aug_pose_var.numpy()
                
                tot_beta_diff_data.append(aug_pose_var)
                
    tot_pose_diff_data = np.stack(tot_pose_diff_data, axis=0)
    # tot_pose_diff_data = 
    tot_pose_diff_data = np.reshape(tot_pose_diff_data, (tot_pose_diff_data.shape[0], -1))
    np.save(f"tot_pose_diff_data.npy", tot_pose_diff_data)
    
    tot_gaussian_diff_data = np.stack(tot_gaussian_diff_data, axis=0)
    tot_gaussian_diff_data = np.reshape(tot_gaussian_diff_data, (tot_gaussian_diff_data.shape[0], -1))
    np.save(f"tot_gaussian_diff_data.npy", tot_gaussian_diff_data)
    
    
    tot_beta_diff_data = np.stack(tot_beta_diff_data, axis=0)
    tot_beta_diff_data = np.reshape(tot_beta_diff_data, (tot_beta_diff_data.shape[0], -1))
    np.save(f"tot_beta_diff_data.npy", tot_beta_diff_data)
    
    
    
    # pred pose r; target pose r #
    
    
    # trans_r = prepared_data[f'{tag}.mano.cam_t.r']
    # pose_r = prepared_data[f'{tag}.mano.pose.r']
    # pose_r = pose_r.contiguous().view(pose_r.size(0), -1).contiguous() ###

    # psoe_r #
    # gt_pose_r = prepared_data[f'targets.mano.pose.r']
    # pred_pose_r = prepared_data[f'{tag}.mano.pose.r']
    # pred_pose_r = pred_pose_r.contiguous().view(pose_r.size(0), -1).contiguous() ###
    # print(f"gt_pose_r: {gt_pose_r.shape}, pred_pose_r: {pred_pose_r.shape}")
    # pred_pose_pose = pred_pose_r[:, 3:]
    # gt_pose_pose = gt_pose_r[:, 3:]
    # diff_pred_gt_pose = torch.mean((pred_pose_pose - gt_pose_pose) ** 2)
    # # diff_pred_gt_pose = diff_pred_
    # print(diff_pred_gt_pose)


if __name__=='__main__':
    get_embeddings()