| import os, random, numpy as np, copy |
|
|
| from utils.utils import print_log |
| from torch.utils.data import Dataset |
| import torch |
|
|
|
|
| def seq_collate(data): |
| |
|
|
| (pre_motion_3D, fut_motion_3D,pre_motion_mask,fut_motion_mask) = zip(*data) |
|
|
| pre_motion_3D = torch.stack(pre_motion_3D,dim=0) |
| fut_motion_3D = torch.stack(fut_motion_3D,dim=0) |
| fut_motion_mask = torch.stack(fut_motion_mask,dim=0) |
| pre_motion_mask = torch.stack(pre_motion_mask,dim=0) |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| data = { |
| 'pre_motion_3D': pre_motion_3D, |
| 'fut_motion_3D': fut_motion_3D, |
| 'fut_motion_mask': fut_motion_mask, |
| 'pre_motion_mask': pre_motion_mask, |
| 'traj_scale': 1, |
| 'pred_mask': None, |
| 'seq': 'nba', |
| } |
| |
| |
| |
|
|
| return data |
|
|
| class NBADataset(Dataset): |
| """Dataloder for the Trajectory datasets""" |
| def __init__( |
| self, obs_len=5, pred_len=10, training=True |
| ): |
| """ |
| Args: |
| - data_dir: Directory containing dataset files in the format |
| <frame_id> <ped_id> <x> <y> |
| - obs_len: Number of time-steps in input trajectories |
| - pred_len: Number of time-steps in output trajectories |
| - skip: Number of frames to skip while making the dataset |
| - threshold: Minimum error to be considered for non linear traj |
| when using a linear predictor |
| - min_ped: Minimum number of pedestrians that should be in a seqeunce |
| - delim: Delimiter in the dataset files |
| """ |
|
|
| super(NBADataset, self).__init__() |
|
|
| self.obs_len = obs_len |
| self.pred_len = pred_len |
| self.seq_len = self.obs_len + self.pred_len |
| |
|
|
| if training: |
| data_root = './data/files/nba_train.npy' |
| else: |
| data_root = './data/files/nba_test.npy' |
|
|
| self.trajs = np.load(data_root) |
| self.trajs /= (94/28) |
| if training: |
| self.trajs = self.trajs[:32500] |
| else: |
| self.trajs = self.trajs[:12500] |
| |
|
|
| self.batch_len = len(self.trajs) |
| print(self.batch_len) |
| |
|
|
| self.traj_abs = torch.from_numpy(self.trajs).type(torch.float) |
| self.traj_norm = torch.from_numpy(self.trajs-self.trajs[:,self.obs_len-1:self.obs_len]).type(torch.float) |
|
|
| self.traj_abs = self.traj_abs.permute(0,2,1,3) |
| self.traj_norm = self.traj_norm.permute(0,2,1,3) |
| self.actor_num = self.traj_abs.shape[1] |
| |
|
|
| def __len__(self): |
| return self.batch_len |
|
|
| def __getitem__(self, index): |
| |
| pre_motion_3D = self.traj_abs[index, :, :self.obs_len, :] |
| fut_motion_3D = self.traj_abs[index, :, self.obs_len:, :] |
| pre_motion_mask = torch.ones(11,self.obs_len) |
| fut_motion_mask = torch.ones(11,self.pred_len) |
| out = [ |
| pre_motion_3D, fut_motion_3D, |
| pre_motion_mask, fut_motion_mask |
| ] |
| return out |
| |