コード例 #1
0
ファイル: vln.py プロジェクト: erick84mm/habitat-api
    def update_metric(self, *args: Any, episode, action, task: EmbodiedTask,
                      **kwargs: Any):
        current_position = self._sim.get_agent_state().position.tolist()

        discrete = getattr(task, "is_discrete")
        if discrete:
            curr_viewpoint_id = episode.curr_viewpoint.image_id
            goal = episode.goals[-1].image_id
            scan = episode.scan
            distance_to_target = \
                task.get_distance_to_target(scan, curr_viewpoint_id, goal)
        else:
            current_position = self._sim.get_agent_state().position.tolist()
            distance_to_target = self._sim.geodesic_distance(
                current_position, episode.goals[-1].get_position())
            if np.isinf(distance_to_target):
                print("WARNING: The Oracle distance might be compromised " +
                      "The geodesic_distance failed " +
                      "looking for a snap_point instead")
                new_position = np.array(current_position, dtype='f')
                new_position = self._sim._sim.pathfinder.snap_point(
                    new_position)
                if np.isnan(new_position[0]):
                    print("ERROR: The Oracle distance is compromised " +
                          "The geodesic_distance failed " + "Cannot find path")
                else:
                    current_position = new_position
                    distance_to_target = self._sim.geodesic_distance(
                        current_position, episode.goals[-1].get_position())

        self._metric = distance_to_target
コード例 #2
0
ファイル: vln.py プロジェクト: erick84mm/habitat-api
    def update_metric(self, *args: Any, episode, action, task: EmbodiedTask,
                      **kwargs: Any):
        ep_success = 0
        current_position = self._sim.get_agent_state().position.tolist()

        discrete = getattr(task, "is_discrete")
        if discrete:
            curr_viewpoint_id = episode.curr_viewpoint.image_id
            goal = episode.goals[-1].image_id
            scan = episode.scan
            distance_to_target = \
                task.get_distance_to_target(scan, curr_viewpoint_id, goal)
        else:
            distance_to_target = self._sim.geodesic_distance(
                current_position, episode.goals[-1].get_position())

            if np.isinf(distance_to_target):
                print("WARNING: The Success metric might be compromised " +
                      "The geodesic_distance failed " +
                      "looking for a snap_point instead")
                new_position = np.array(current_position, dtype='f')
                new_position = self._sim._sim.pathfinder.snap_point(
                    new_position)
                if np.isnan(new_position[0]):
                    print("ERROR: The Success metric is compromised " +
                          "The geodesic_distance failed " + "Cannot find path")
                else:
                    current_position = new_position
                    distance_to_target = self._sim.geodesic_distance(
                        current_position, episode.goals[-1].get_position())
        if (hasattr(task, "is_stop_called") and task.is_stop_called
                and distance_to_target < self._config.SUCCESS_DISTANCE):
            ep_success = 1

        self._agent_episode_distance += self._euclidean_distance(
            current_position, self._previous_position)

        self._previous_position = current_position

        self._metric = ep_success * (self._start_end_episode_distance / max(
            self._start_end_episode_distance, self._agent_episode_distance))

        # removing rounding error of 0.0000025 meters
        if self._metric >= 0.9999975:
            self._metric = 1.0
コード例 #3
0
ファイル: vln.py プロジェクト: erick84mm/habitat-api
    def update_metric(self, *args: Any, episode, task: EmbodiedTask,
                      **kwargs: Any):
        ep_success = 0

        discrete = getattr(task, "is_discrete")
        if discrete:
            curr_viewpoint_id = episode.curr_viewpoint.image_id
            goal = episode.goals[-1].image_id
            scan = episode.scan
            distance_to_target = \
                task.get_distance_to_target(scan, curr_viewpoint_id, goal)
        else:
            current_position = self._sim.get_agent_state().position.tolist()
            distance_to_target = self._sim.geodesic_distance(
                current_position, episode.goals[-1].get_position())
            if np.isinf(distance_to_target):
                print("WARNING: The Oracle distance might be compromised " +
                      "The geodesic_distance failed " +
                      "looking for a snap_point instead")
                new_position = np.array(current_position, dtype='f')
                new_position = self._sim._sim.pathfinder.snap_point(
                    new_position)
                if np.isnan(new_position[0]):
                    print("ERROR: The Oracle distance is compromised " +
                          "The geodesic_distance failed " + "Cannot find path")
                else:
                    current_position = new_position
                    distance_to_target = self._sim.geodesic_distance(
                        current_position, episode.goals[-1].get_position())
        if (self._nearest_distance == -1
                or distance_to_target < self._nearest_distance):
            self._nearest_distance = distance_to_target

        if (hasattr(task, "is_stop_called") and task.is_stop_called and
                self._nearest_distance < self._config.ORACLE_SUCCESS_DISTANCE):
            ep_success = 1

        self._metric = ep_success