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)
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