args = parser.parse_args() cfg = Config(args.cfg, create_dirs=False) dtype = torch.float64 torch.set_default_dtype(dtype) np.random.seed(cfg.seed) torch.manual_seed(cfg.seed) torch.set_grad_enabled(False) logger = create_logger(os.path.join(cfg.log_dir, 'log_eval_wild.txt')) """test data""" cnn_feat_file = '%s/features/cnn_feat_%s.p' % (cfg.data_dir, args.test_feat) cnn_feat_dict, _ = pickle.load(open(cnn_feat_file, 'rb')) takes = list(cnn_feat_dict.keys()) """environment""" env = HumanoidEnv(cfg) env_vis = HumanoidVisEnv(cfg.mujoco_model_file, 10) env.seed(cfg.seed) cnn_feat_dim = cnn_feat_dict[takes[0]].shape[-1] actuators = env.model.actuator_names state_dim = env.observation_space.shape[0] action_dim = env.action_space.shape[0] body_qposaddr = get_body_qposaddr(env.model) """load policy net""" policy_vs_net = VideoStateNet(cnn_feat_dim, cfg.policy_v_hdim, cfg.fr_margin, cfg.policy_v_net, cfg.policy_v_net_param, cfg.causal) value_vs_net = VideoStateNet(cnn_feat_dim, cfg.value_v_hdim, cfg.fr_margin, cfg.value_v_net, cfg.value_v_net_param, cfg.causal) policy_net = PolicyGaussian(MLP(state_dim + cfg.policy_v_hdim, cfg.policy_hsize, cfg.policy_htype),
env_vis.sim_forward() def load_take(): global traj_pred, traj_orig algo_res, algo = algos[algo_ind] if algo_res is None: return take = takes[take_ind] print('%s ---------- %s' % (algo, take)) traj_pred = algo_res['traj_pred'][take] traj_orig = algo_res['traj_orig'][take] traj_pred = None traj_orig = None vis_model_file = 'assets/mujoco_models/%s.xml' % (args.multi_vis_model if args.multi else args.vis_model) env_vis = HumanoidVisEnv(vis_model_file, 1, focus=not args.multi) env_vis.set_custom_key_callback(key_callback) takes = meta[args.data] algos = [(em_res, 'ego mimic'), (sr_res, 'state reg'), (pp_res, 'path pose'), (vg_res, 'vgail')] algo_ind = args.algo_ind take_ind = args.take_ind ss_ind = 0 mfr_int = 14 show_gt = False load_take() """render or select part of the clip""" T = 10 fr = 0 paused = False stop = False
parser.add_argument('--data', default='test') parser.add_argument('--show-noise', action='store_true', default=False) parser.add_argument('--fail-safe', default='valuefs') args = parser.parse_args() cfg = Config(args.cfg, create_dirs=False) dtype = torch.float64 torch.set_default_dtype(dtype) np.random.seed(cfg.seed) torch.manual_seed(cfg.seed) torch.set_grad_enabled(False) logger = create_logger(os.path.join(cfg.log_dir, 'log_eval.txt')) """environment""" env = HumanoidEnv(cfg) env.load_experts(cfg.takes[args.data], cfg.expert_feat_file, cfg.cnn_feat_file) env_vis = HumanoidVisEnv(cfg.vis_model_file, 10) env.seed(cfg.seed) epos = None cnn_feat_dim = env.cnn_feat[0].shape[-1] actuators = env.model.actuator_names state_dim = env.observation_space.shape[0] action_dim = env.action_space.shape[0] body_qposaddr = get_body_qposaddr(env.model) if args.fail_safe == 'naivefs': env.set_fix_head_lb(0.3) """load policy net""" policy_vs_net = VideoStateNet(cnn_feat_dim, cfg.policy_v_hdim, cfg.fr_margin, cfg.policy_v_net, cfg.policy_v_net_param, cfg.causal) value_vs_net = VideoStateNet(cnn_feat_dim, cfg.value_v_hdim, cfg.fr_margin, cfg.value_v_net, cfg.value_v_net_param,
dtype = torch.float64 torch.set_default_dtype(dtype) np.random.seed(cfg.seed) torch.manual_seed(cfg.seed) torch.set_grad_enabled(False) logger = create_logger(os.path.join(cfg.log_dir, 'log_eval_wild.txt')) """test data""" cnn_feat_file = '%s/features/cnn_feat_%s.p' % (cfg.data_dir, args.test_feat) cnn_feat_dict, _ = pickle.load(open(cnn_feat_file, 'rb')) takes = list(cnn_feat_dict.keys()) """environment""" env = HumanoidEnv(cfg) env_vis = HumanoidVisEnv('assets/mujoco_models/%s.xml' % args.vis_model, 10) env.seed(cfg.seed) cnn_feat_dim = cnn_feat_dict[takes[0]].shape[-1] actuators = env.model.actuator_names state_dim = env.observation_space.shape[0] action_dim = env.action_space.shape[0] body_qposaddr = get_body_qposaddr(env.model) """load policy net""" policy_vs_net = VideoForecastNet(cnn_feat_dim, state_dim, cfg.policy_v_hdim, cfg.fr_margin, cfg.policy_v_net, cfg.policy_v_net_param, cfg.policy_s_hdim, cfg.policy_s_net) value_vs_net = VideoForecastNet(cnn_feat_dim, state_dim, cfg.value_v_hdim, cfg.fr_margin, cfg.value_v_net, cfg.value_v_net_param, cfg.value_s_hdim, cfg.value_s_net) policy_net = PolicyGaussian(MLP(policy_vs_net.out_dim, cfg.policy_hsize, cfg.policy_htype), action_dim, log_std=cfg.log_std, fix_std=cfg.fix_std) value_net = Value(MLP(value_vs_net.out_dim, cfg.value_hsize, cfg.value_htype))
args = parser.parse_args() cfg = Config(args.cfg, create_dirs=False) if hasattr(cfg, 'random_cur_t'): cfg.random_cur_t = False dtype = torch.float64 torch.set_default_dtype(dtype) np.random.seed(cfg.seed) torch.manual_seed(cfg.seed) torch.set_grad_enabled(False) logger = create_logger(os.path.join(cfg.log_dir, 'log_eval.txt')) """environment""" env = HumanoidEnv(cfg) env.load_experts(cfg.takes[args.data], cfg.expert_feat_file, cfg.cnn_feat_file) env_vis = HumanoidVisEnv(cfg.vis_model_file, 10) env.seed(cfg.seed) cnn_feat_dim = env.cnn_feat[0].shape[-1] actuators = env.model.actuator_names state_dim = env.observation_space.shape[0] action_dim = env.action_space.shape[0] body_qposaddr = get_body_qposaddr(env.model) """load policy net""" policy_vs_net = VideoForecastNet(cnn_feat_dim, state_dim, cfg.policy_v_hdim, cfg.fr_margin, cfg.policy_v_net, cfg.policy_v_net_param, cfg.policy_s_hdim, cfg.policy_s_net) value_vs_net = VideoForecastNet(cnn_feat_dim, state_dim, cfg.value_v_hdim, cfg.fr_margin, cfg.value_v_net, cfg.value_v_net_param, cfg.value_s_hdim, cfg.value_s_net)
if args.tpv: frame_folder = 'datasets/tpv/s_frames/%s' % take frame_files = glob.glob(os.path.join(frame_folder, '*.jpg')) frame_files.sort() traj_tpv = [cv2.imread(file) for file in frame_files] tpv_offset = meta['tpv_offset'][take] print(len(traj_fpv), len(traj_tpv) if args.tpv else 0, traj_pred.shape[0]) print('%s ---------- %s' % (algo, take)) traj_pred = None traj_fpv = None traj_tpv = None vis_model_file = 'assets/mujoco_models/%s.xml' % ( args.multi_vis_model if args.multi else args.vis_model) env_vis = HumanoidVisEnv(vis_model_file, 1) env_vis.set_custom_key_callback(key_callback) takes = list(ef_res['traj_pred'].keys()) algos = [(ef_res, 'ego forecast')] algo_ind = 0 take_ind = args.take_ind traj_ind = 0 tpv_offset = 0 ss_ind = 0 mfr_int = 10 load_take() """render or select part of the clip""" cv2.namedWindow('FPV') cv2.moveWindow('FPV', 150, 400) cv2.namedWindow('TPV') glfw.set_window_size(env_vis.viewer.window, 1000, 960)
def __init__(self, cfg, gt_comparison=False): if gt_comparison: self.vis_model = 'humanoid_1205_vis_single_v1' self.vis_model_file = 'assets/mujoco_models/%s.xml' % self.vis_model self.multi = False self.env = HumanoidVisEnv(self.vis_model_file, 1, focus=not self.multi) else: self.env = HumanoidEnv(cfg) self.body2id = self.env.model._body_name2id self.body_names = self.env.model.body_names[1:] self.body_set = { 'LeftForeArm', 'RightForeArm', 'LeftHand', 'RightHand', 'LeftArm', 'RightArm', 'LeftUpLeg', 'RightUpLeg', 'LeftLeg', 'RightLeg', 'LeftFoot', 'RightFoot' } self.nbody = len(self.body_set) self.body_filter = np.zeros((len(self.body_names), ), dtype=bool) for body in self.body2id.keys(): if body in self.body_set: self.body_filter[self.body2id[body] - 1] = True self.body_names = [ self.body_names[i] for i in range(len(self.body_filter)) if self.body_filter[i] ] self.body2id = {body: i for i, body in enumerate(self.body_names)} self.conn = [('RightUpLeg', 'RightArm', (255, 255, 0)), ('RightArm', 'RightForeArm', (255, 191, 0)), ('RightForeArm', 'RightHand', (255, 191, 0)), ('RightUpLeg', 'RightLeg', (255, 64, 0.0)), ('RightLeg', 'RightFoot', (255, 64, 0.0)), ('LeftUpLeg', 'LeftArm', (0, 255, 128)), ('LeftArm', 'LeftForeArm', (0, 255, 255)), ('LeftForeArm', 'LeftHand', (0, 255, 255)), ('LeftUpLeg', 'LeftLeg', (0, 64, 255)), ('LeftLeg', 'LeftFoot', (0, 64, 255))] self.joints_map = [(2, self.body2id['RightArm']), (3, self.body2id['RightForeArm']), (4, self.body2id['RightHand']), (5, self.body2id['LeftArm']), (6, self.body2id['LeftForeArm']), (7, self.body2id['LeftHand']), (9, self.body2id['RightUpLeg']), (10, self.body2id['RightLeg']), (11, self.body2id['RightFoot']), (12, self.body2id['LeftUpLeg']), (13, self.body2id['LeftLeg']), (14, self.body2id['LeftFoot'])] """ Since number of joints between - human_dynamics (25 joints) - ours (14 joints) are different, the following mapping variable defines which joint to be evaluated. 0: indices for human_dynamics 1: indices for ours The name after # shows corresponded name of human_dynamics """ self.joints_map1 = [ (8, self.body2id['RightArm']), # Right shoulder (7, self.body2id['RightForeArm']), # Right elbow (6, self.body2id['RightHand']), # Right wrist (9, self.body2id['LeftArm']), # Left shoulder (10, self.body2id['LeftForeArm']), # Left elbow (11, self.body2id['LeftHand']), # Left wrist (2, self.body2id['RightUpLeg']), # Right hip (1, self.body2id['RightLeg']), # Right knee (0, self.body2id['RightFoot']), # Right heel (3, self.body2id['LeftUpLeg']), # Left hip (4, self.body2id['LeftLeg']), # Left knee (5, self.body2id['LeftFoot']) ] # Left heel