Example #1
0
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),
Example #2
0
        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))
Example #5
0
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)
Example #6
0
            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)
Example #7
0
    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