def push(
        self,
        observation: np.array,
        action: int,
        next_observation: np.array,
        reward: float,
        done: bool,
    ):
        """ Pushes a transition into the replay buffer. """
        self.observations[self.position] = observation.clone()
        self.actions[self.position] = torch.tensor([action], dtype=torch.long)
        self.next_observations[self.position] = next_observation.clone()
        self.rewards[self.position] = torch.tensor([reward], dtype=torch.float32)
        self.dones[self.position] = torch.tensor([done], dtype=torch.bool)

        self._update_stats(self.observations[self.position])
        self.position = (self.position + 1) % len(self)
Beispiel #2
0
def xyxy_to_xywh(boxes_xyxy: np.array):
    if isinstance(boxes_xyxy, torch.Tensor):
        boxes_xywh = boxes_xyxy.clone()
    elif isinstance(boxes_xyxy, np.ndarray):
        boxes_xywh = boxes_xyxy.copy()
    else:
        raise TypeError

    boxes_xywh[:, 0] = (boxes_xyxy[:, 0] + boxes_xyxy[:, 2]) / 2.
    boxes_xywh[:, 1] = (boxes_xyxy[:, 1] + boxes_xyxy[:, 3]) / 2.
    boxes_xywh[:, 2] = boxes_xyxy[:, 2] - boxes_xyxy[:, 0]
    boxes_xywh[:, 3] = boxes_xyxy[:, 3] - boxes_xyxy[:, 1]

    return boxes_xywh