Пример #1
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     # for stat_name in [
     #     'touch_distance',
     #     'hand_success',
     #     'obj_success',
     #     'hand_and_obj_success',
     #     'touch_success',
     #     'hand_distance',
     #     'obj_distance',
     #     'hand_and_obj_distance',
     #     'total_pickups',
     # ]: # these are copied from saywer_pickup_and_place.py
     for stat_name in [
             'ag_state',
             'g_state',
             'image_dist',
             'image_success',
     ]:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics
Пример #2
0
 def goal_conditioned_diagnostics(self, paths, goals):
     statistics = OrderedDict()
     stat_to_lists = defaultdict(list)
     for path, goal in zip(paths, goals):
         difference = path['observations'] - goal
         for i in range(len(self._all_objects)):
             distance = np.linalg.norm(difference[:, 2 * i:2 * i + 2],
                                       axis=-1)
             distance_key = 'distance_to_target_obj_{}'.format(i)
             stat_to_lists[distance_key].append(distance)
             success_key = 'success_obj_{}'.format(i)
             stat_to_lists[success_key].append(
                 distance < self.success_threshold)
     for stat_name, stat_list in stat_to_lists.items():
         statistics.update(
             create_stats_ordered_dict(
                 stat_name,
                 stat_list,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 '{}/final'.format(stat_name),
                 [s[-1:] for s in stat_list],
                 always_show_all_stats=True,
                 exclude_max_min=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 '{}/initial'.format(stat_name),
                 [s[:1] for s in stat_list],
                 always_show_all_stats=True,
                 exclude_max_min=True,
             ))
     return statistics
Пример #3
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     for stat_name in [
         'touch_distance',
         'hand_success',
         'obj_success',
         'hand_and_obj_success',
         'touch_success',
         'hand_distance',
         'obj_distance',
         'hand_and_obj_distance',
         'total_pickups',
     ]:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(create_stats_ordered_dict(
             '%s%s' % (prefix, stat_name),
             stat,
             always_show_all_stats=True,
         ))
         statistics.update(create_stats_ordered_dict(
             'Final %s%s' % (prefix, stat_name),
             [s[-1] for s in stat],
             always_show_all_stats=True,
         ))
     return statistics
Пример #4
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     for stat_name in [
             'radius',
             'target_position',
             'distance_to_target',
             'velocity',
             'speed',
             'is_success',
     ]:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics
Пример #5
0
    def get_diagnostics(self, paths, prefix=''):
        statistics = OrderedDict()
        list_of_stat_names = [
            'state_diff',
            'pos_diff',
            'angle_diff',
            'pos_angle_diff',
            'pos_success',
            'angle_success',
        ]
        if self.vel_in_state:
            list_of_stat_names.append('velocity_diff')
            list_of_stat_names.append('angular_velocity_diff')

        for stat_name in list_of_stat_names:
            stat_name = stat_name
            stat = get_stat_in_paths(paths, 'env_infos', stat_name)
            statistics.update(
                create_stats_ordered_dict(
                    '%s%s' % (prefix, stat_name),
                    stat,
                    always_show_all_stats=True,
                ))
            statistics.update(
                create_stats_ordered_dict(
                    'Final %s%s' % (prefix, stat_name),
                    [s[-1] for s in stat],
                    always_show_all_stats=True,
                ))
        return statistics
    def log_diagnostics(self, paths, logger=None, prefix=""):
        if logger is None:
            return

        statistics = OrderedDict()
        for stat_name in [
                'hand_distance',
                'puck_distance',
                'touch_distance',
                'success',
        ]:
            stat_name = stat_name
            stat = get_stat_in_paths(paths, 'env_infos', stat_name)
            statistics.update(
                create_stats_ordered_dict(
                    '%s %s' % (prefix, stat_name),
                    stat,
                    always_show_all_stats=True,
                ))
            statistics.update(
                create_stats_ordered_dict(
                    'Final %s %s' % (prefix, stat_name),
                    [s[-1] for s in stat],
                    always_show_all_stats=True,
                ))

        for key, value in statistics.items():
            logger.record_tabular(key, value)
Пример #7
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     stat_names = [
         'hand_success',
         'obj_success',
         'hand_and_obj_success',
         'hand_distance',
         'obj_distance',
         'obj_distance0',
         'hand_and_obj_distance',
         'total_pickups',
         'obj_x0', 'obj_y0', 'obj_z0',
         'mujoco_exception_raised', 'flying_object',
     ]
     if self.two_obj:
         stat_names.append('obj_distance1')
         stat_names.append('obj_x1')
         stat_names.append('obj_y1')
         stat_names.append('obj_z1')
     for stat_name in stat_names:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(create_stats_ordered_dict(
             '%s%s' % (prefix, stat_name),
             stat,
             always_show_all_stats=True,
         ))
         statistics.update(create_stats_ordered_dict(
             'Final %s%s' % (prefix, stat_name),
             [s[-1] for s in stat],
             always_show_all_stats=True,
         ))
     return statistics
Пример #8
0
 def goal_conditioned_diagnostics(self, paths, goals):
     statistics = OrderedDict()
     distance_to_target_list = []
     is_success_list = []
     for path, goal in zip(paths, goals):
         distance_to_target = np.linalg.norm(path['observations'] - goal,
                                             axis=1)
         is_success = distance_to_target < self.target_radius
         distance_to_target_list.append(distance_to_target)
         is_success_list.append(is_success)
     for stat_name, stat_list in [
         ('distance_to_target', distance_to_target_list),
         ('is_success', is_success_list),
     ]:
         statistics.update(
             create_stats_ordered_dict(
                 stat_name,
                 stat_list,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 '{}/final'.format(stat_name),
                 [s[-1:] for s in stat_list],
                 always_show_all_stats=True,
                 exclude_max_min=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 '{}/initial'.format(stat_name),
                 [s[:1] for s in stat_list],
                 always_show_all_stats=True,
                 exclude_max_min=True,
             ))
     return statistics
Пример #9
0
    def get_contextual_diagnostics(self, paths, contexts):
        diagnostics = OrderedDict()
        state_key = "state_observation"
        goal_key = "state_desired_goal"
        values = []
        for i in range(len(paths)):
            state = paths[i]["observations"][-1][state_key]
            goal = contexts[i][goal_key]
            distance = np.linalg.norm(state - goal)
            values.append(distance)
        diagnostics_key = goal_key + "/final/distance"
        diagnostics.update(create_stats_ordered_dict(
            diagnostics_key,
            values,
        ))

        values = []
        for i in range(len(paths)):
            for j in range(len(paths[i]["observations"])):
                state = paths[i]["observations"][j][state_key]
                goal = contexts[i][goal_key]
                distance = np.linalg.norm(state - goal)
                values.append(distance)
        diagnostics_key = goal_key + "/distance"
        diagnostics.update(create_stats_ordered_dict(
            diagnostics_key,
            values,
        ))
        return diagnostics
Пример #10
0
 def get_diagnostics(self, paths, **kwargs):
     statistics = self.wrapped_env.get_diagnostics(paths, **kwargs)
     for stat_name_in_paths in ["image_dist", "image_success"]:
         stats = get_stat_in_paths(paths, 'env_infos', stat_name_in_paths)
         statistics.update(create_stats_ordered_dict(
             stat_name_in_paths,
             stats,
             always_show_all_stats=True,
         ))
         final_stats = [s[-1] for s in stats]
         statistics.update(create_stats_ordered_dict(
             "Final " + stat_name_in_paths,
             final_stats,
             always_show_all_stats=True,
         ))
     return statistics
Пример #11
0
    def get_diagnostics(self, trajectories, desired_goal_states):
        """
        Logs things

        Args:
            trajectories: Numpy Array [# Trajectories x Max Path Length x State Dim]
            desired_goal_states: Numpy Array [# Trajectories x State Dim]

        """
        endeff_distances = np.array([self.endeff_distance(trajectories[i], np.tile(desired_goal_states[i], (trajectories.shape[1],1))) for i in range(trajectories.shape[0])])
        puck_distances = np.array([self.puck_distance(trajectories[i], np.tile(desired_goal_states[i], (trajectories.shape[1],1))) for i in range(trajectories.shape[0])])

        endeff_movement = self.endeff_distance(trajectories[:,0], trajectories[:, -1])
        puck_movement = self.puck_distance(trajectories[:,0], trajectories[:, -1])
        
        statistics = OrderedDict()
        for stat_name, stat in [
            ('final puck distance', puck_distances[:,-1]),
            ('final endeff distance', endeff_distances[:,-1]),
            ('puck movement', puck_movement),
            ('endeff movement', endeff_movement),
        ]:
            statistics.update(create_stats_ordered_dict(
                    stat_name,
                    stat,
                    always_show_all_stats=True,
                ))
            
        return statistics
Пример #12
0
    def get_diagnostics(self, paths, prefix=''):
        statistics = OrderedDict()
        stat_names = [
            'opt_func_loss',
            'opt_grad_norm',
            'opt_v_value',
            'opt_v_value_min',
            'opt_v_value_sum',
            'opt_realistic_subgoal_rew',

            'init_opt_func_loss',
            'init_opt_grad_norm',
            'init_opt_v_value',
            'init_opt_v_value_min',
            'init_opt_v_value_sum',
            'init_opt_realistic_subgoal_rew',

            'opt_func_calls',
            'opt_num_iters',
            'opt_stopped',
        ]

        for stat_name in stat_names:
            stat_name = stat_name
            stat = get_stat_in_paths(paths, 'agent_infos', stat_name)
            statistics.update(create_stats_ordered_dict(
                '%s%s' % (prefix, stat_name),
                stat,
                always_show_all_stats=True,
                ))
        return statistics
Пример #13
0
    def get_diagnostics(self, trajectories, desired_goal_states):
        """
        Logs things

        Args:
            trajectories: Numpy Array [# Trajectories x Max Path Length x State Dim]
            desired_goal_states: Numpy Array [# Trajectories x State Dim]

        """
        puck_distances = np.array([
            self.door_distance(
                trajectories[i],
                np.tile(desired_goal_states[i], (trajectories.shape[1], 1)))
            for i in range(trajectories.shape[0])
        ])

        statistics = OrderedDict()
        for stat_name, stat in [
            ('final door distance', puck_distances[:, -1]),
            ('min door distance', np.min(puck_distances, axis=-1)),
        ]:
            statistics.update(
                create_stats_ordered_dict(
                    stat_name,
                    stat,
                    always_show_all_stats=True,
                ))

        return statistics
Пример #14
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     for stat_name in ['angle_difference', 'angle_success']:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     for stat_name in [
             obj_name + '_distance' for obj_name in self._object_names
     ]:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics
Пример #16
0
    def get_contextual_diagnostics(self, paths, contexts):
        diagnostics = OrderedDict()
        state_key = "state_observation"
        goal_key = "state_desired_goal"

        for idx, name in [
            (slice(0, 2), "hand_goal"),
            (slice(2, 4), "puck_goal"),
        ]:
            values = []
            for i in range(len(paths)):
                state = paths[i]["observations"][-1][state_key][idx]
                goal = contexts[i][goal_key][idx]
                distance = np.linalg.norm(state - goal)
                values.append(distance)
                diagnostics_key = name + "/final/distance"
                diagnostics.update(
                    create_stats_ordered_dict(
                        diagnostics_key,
                        values,
                    ))

            values = []
            for i in range(len(paths)):
                for j in range(len(paths[i]["observations"])):
                    state = paths[i]["observations"][j][state_key][idx]
                    goal = contexts[i][goal_key][idx]
                    distance = np.linalg.norm(state - goal)
                values.append(distance)
                diagnostics_key = name + "/distance"
                diagnostics.update(
                    create_stats_ordered_dict(
                        diagnostics_key,
                        values,
                    ))

        return diagnostics
Пример #17
0
 def get_diagnostics(self, paths, prefix=""):
     statistics = collections.OrderedDict()
     stats = ['hand_distance']
     for i in range(self.puck_count):
         stats += [
             'puck{}_distance'.format(i),
             'touch{}_distance'.format(i),
         ]
     for stat_name in stats:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics
Пример #18
0
 def get_diagnostics(self, paths, prefix=''):
     statistics = OrderedDict()
     for stat_name in [
             'distance_to_target_obj_{}'.format(i)
             for i in range(len(self.objects))
     ] + ['success_obj_{}'.format(i) for i in range(len(self.objects))] + [
             'distance_to_target_cursor',
             'success_cursor',
     ]:
         stat_name = stat_name
         stat = get_stat_in_paths(paths, 'env_infos', stat_name)
         statistics.update(
             create_stats_ordered_dict(
                 '%s%s' % (prefix, stat_name),
                 stat,
                 always_show_all_stats=True,
             ))
         statistics.update(
             create_stats_ordered_dict(
                 'Final %s%s' % (prefix, stat_name),
                 [s[-1] for s in stat],
                 always_show_all_stats=True,
             ))
     return statistics