def __getitem__(self, idx): """Get a dataset sample""" # Get DGP sample (if single sensor, make it a list) self.sample_dgp = self.dataset[idx] self.sample_dgp = [make_list(sample) for sample in self.sample_dgp] # Loop over all cameras sample = [] for i in range(self.num_cameras): data = { 'idx': idx, 'dataset_idx': self.dataset_idx, 'sensor_name': self.get_current('datum_name', i), # 'filename': self.get_filename(idx, i), 'splitname': '%s_%010d' % (self.split, idx), # 'rgb': self.get_current('rgb', i), 'intrinsics': self.get_current('intrinsics', i), } # If depth is returned if self.with_depth: data.update({ 'depth': self.generate_depth_map(idx, i, data['filename']) }) # If pose is returned if self.with_pose: data.update({ 'extrinsics': self.get_current('extrinsics', i).matrix, 'pose': self.get_current('pose', i).matrix, }) # If context is returned if self.has_context: data.update({ 'rgb_context': self.get_context('rgb', i), }) # If context pose is returned if self.with_pose: # Get original values to calculate relative motion orig_extrinsics = Pose.from_matrix(data['extrinsics']) orig_pose = Pose.from_matrix(data['pose']) data.update({ 'extrinsics_context': [(orig_extrinsics.inverse() * extrinsics).matrix for extrinsics in self.get_context('extrinsics', i)], 'pose_context': [(orig_pose.inverse() * pose).matrix for pose in self.get_context('pose', i)], }) sample.append(data) # Apply same data transformations for all sensors if self.data_transform: sample = [self.data_transform(smp) for smp in sample] # Return sample (stacked if necessary) return stack_sample(sample)
def __getitem__(self, idx): """Get a dataset sample""" # Get DGP sample (if single sensor, make it a list) self.sample_dgp = self.dataset[idx] self.sample_dgp = [make_list(sample) for sample in self.sample_dgp] if self.with_geometric_context: self.sample_dgp_left = self.dataset_left[idx] self.sample_dgp_left = [ make_list(sample) for sample in self.sample_dgp_left ] self.sample_dgp_right = self.dataset_right[idx] self.sample_dgp_right = [ make_list(sample) for sample in self.sample_dgp_right ] # print('self.sample_dgp :') # print(self.sample_dgp) # print('self.sample_dgp_left :') # print(self.sample_dgp_left) # print('self.sample_dgp_right :') # print(self.sample_dgp_right) # Loop over all cameras sample = [] for i in range(self.num_cameras): i_left = self.get_camera_idx_left(i) i_right = self.get_camera_idx_right(i) # print(self.get_current('datum_name', i)) # print(self.get_filename(idx, i)) # print(self.get_current('intrinsics', i)) # print(self.with_depth) data = { 'idx': idx, 'dataset_idx': self.dataset_idx, 'sensor_name': self.get_current('datum_name', i), # 'filename': self.get_filename(idx, i), 'splitname': '%s_%010d' % (self.split, idx), # 'rgb': self.get_current('rgb', i), 'intrinsics': self.get_current('intrinsics', i), 'extrinsics': self.get_current('extrinsics', i).matrix, 'path_to_ego_mask': os.path.join( os.path.dirname(self.path), self._get_path_to_ego_mask(self.get_filename(idx, i))), } # If depth is returned if self.with_depth: data.update({ 'depth': self.generate_depth_map(idx, i, data['filename']) }) # If pose is returned if self.with_pose: data.update({ 'pose': self.get_current('pose', i).matrix, }) if self.has_context: orig_extrinsics = Pose.from_matrix(data['extrinsics']) data.update({ 'rgb_context': self.get_context('rgb', i), 'intrinsics_context': self.get_context('intrinsics', i), 'extrinsics_context': [(extrinsics.inverse() * orig_extrinsics).matrix for extrinsics in self.get_context('extrinsics', i)], }) data.update({ 'path_to_ego_mask_context': [ os.path.join( os.path.dirname(self.path), self._get_path_to_ego_mask( self.get_filename(idx, i))) for _ in range(len(data['rgb_context'])) ], }) data.update({ 'context_type': [], }) for _ in range(self.bwd): data['context_type'].append('backward') for _ in range(self.fwd): data['context_type'].append('forward') # If context pose is returned if self.with_pose: # Get original values to calculate relative motion orig_pose = Pose.from_matrix(data['pose']) data.update({ 'pose_context': [(orig_pose.inverse() * pose).matrix for pose in self.get_context('pose', i)], }) if self.with_geometric_context: orig_extrinsics = data['extrinsics'] #orig_extrinsics[:3,3] = -np.dot(orig_extrinsics[:3,:3].transpose(), orig_extrinsics[:3,3]) orig_extrinsics_left = self.get_current_left( 'extrinsics', i_left).matrix orig_extrinsics_right = self.get_current_right( 'extrinsics', i_right).matrix #orig_extrinsics_left[:3,3] = -np.dot(orig_extrinsics_left[:3,:3].transpose(), orig_extrinsics_left[:3,3]) #orig_extrinsics_right[:3,3] = -np.dot(orig_extrinsics_right[:3,:3].transpose(), orig_extrinsics_right[:3,3]) orig_extrinsics = Pose.from_matrix(orig_extrinsics) orig_extrinsics_left = Pose.from_matrix(orig_extrinsics_left) orig_extrinsics_right = Pose.from_matrix(orig_extrinsics_right) data['rgb_context'].append(self.get_current_left( 'rgb', i_left)) data['rgb_context'].append( self.get_current_right('rgb', i_right)) data['intrinsics_context'].append( self.get_current_left('intrinsics', i_left)) data['intrinsics_context'].append( self.get_current_right('intrinsics', i_right)) data['extrinsics_context'].append( (orig_extrinsics_left.inverse() * orig_extrinsics).matrix) data['extrinsics_context'].append( (orig_extrinsics_right.inverse() * orig_extrinsics).matrix) #data['extrinsics_context'].append((orig_extrinsics.inverse() * orig_extrinsics_left).matrix) #data['extrinsics_context'].append((orig_extrinsics.inverse() * orig_extrinsics_right).matrix) data['path_to_ego_mask_context'].append( os.path.join( os.path.dirname(self.path), self._get_path_to_ego_mask( self.get_filename_left(idx, i_left)))) data['path_to_ego_mask_context'].append( os.path.join( os.path.dirname(self.path), self._get_path_to_ego_mask( self.get_filename_right(idx, i_right)))) data['context_type'].append('left') data['context_type'].append('right') data.update({ 'sensor_name_left': self.get_current_left('datum_name', i_left), 'sensor_name_right': self.get_current_right('datum_name', i_right), # 'filename_left': self.get_filename_left(idx, i_left), 'filename_right': self.get_filename_right(idx, i_right), # #'rgb_left': self.get_current_left('rgb', i), #'rgb_right': self.get_current_right('rgb', i), #'intrinsics_left': self.get_current_left('intrinsics', i), #'intrinsics_right': self.get_current_right('intrinsics', i), #'extrinsics_left': self.get_current_left('extrinsics', i).matrix, #'extrinsics_right': self.get_current_right('extrinsics', i).matrix, #'path_to_ego_mask_left': self._get_path_to_ego_mask(self.get_filename_left(idx, i)), #'path_to_ego_mask_right': self._get_path_to_ego_mask(self.get_filename_right(idx, i)), }) # data.update({ # 'extrinsics_context_left': # [(orig_extrinsics_left.inverse() * extrinsics_left).matrix # for extrinsics_left in self.get_context_left('extrinsics', i)], # 'extrinsics_context_right': # [(orig_extrinsics_right.inverse() * extrinsics_right).matrix # for extrinsics_right in self.get_context_right('extrinsics', i)], # 'intrinsics_context_left': self.get_context_left('intrinsics', i), # 'intrinsics_context_right': self.get_context_right('intrinsics', i), # }) sample.append(data) # Apply same data transformations for all sensors if self.data_transform: sample = [self.data_transform(smp) for smp in sample] # Return sample (stacked if necessary) return stack_sample(sample)