def get_random_batch(self, batch_size): data_ids_a = np.zeros(batch_size, 'int32') data_ids_b = np.zeros(batch_size, 'int32') viewpoint_ids_a = torch.zeros(batch_size) viewpoint_ids_b = torch.zeros(batch_size) for i in range(batch_size): class_id = np.random.choice(self.class_ids) object_id = np.random.randint(0, self.num_data[class_id]) viewpoint_id_a = np.random.randint(0, 24) viewpoint_id_b = np.random.randint(0, 24) data_id_a = (object_id + self.pos[class_id]) * 24 + viewpoint_id_a data_id_b = (object_id + self.pos[class_id]) * 24 + viewpoint_id_b data_ids_a[i] = data_id_a data_ids_b[i] = data_id_b viewpoint_ids_a[i] = viewpoint_id_a viewpoint_ids_b[i] = viewpoint_id_b images_a = torch.from_numpy(self.images[data_ids_a].astype('float32') / 255.) images_b = torch.from_numpy(self.images[data_ids_b].astype('float32') / 255.) distances = torch.ones(batch_size).float() * self.distance elevations_a = torch.ones(batch_size).float() * self.elevation elevations_b = torch.ones(batch_size).float() * self.elevation viewpoints_a = srf.get_points_from_angles(distances, elevations_a, -viewpoint_ids_a * 15) viewpoints_b = srf.get_points_from_angles(distances, elevations_b, -viewpoint_ids_b * 15) return images_a, images_b, viewpoints_a, viewpoints_b
def get_random_batch(self, batch_size): data_ids_a = np.zeros(batch_size, 'int32') data_ids_b = np.zeros(batch_size, 'int32') viewpoint_ids_a = torch.zeros(batch_size) viewpoint_ids_b = torch.zeros(batch_size) batch_a = [] batch_b = [] for i in range(batch_size): class_idx = np.random.randint(0, len(self.class_ids)) class_id = self.class_ids[class_idx] object_id = np.random.randint(0, self.num_data[class_id]) viewpoint_id_a = np.random.randint(0, 24) viewpoint_id_b = np.random.randint(0, 24) batch_a.append(self.images[class_idx][object_id, viewpoint_id_a]) batch_b.append(self.images[class_idx][object_id, viewpoint_id_b]) viewpoint_ids_a[i] = viewpoint_id_a viewpoint_ids_b[i] = viewpoint_id_b images_a = torch.from_numpy(np.stack(batch_a).astype('float32') / 255.) images_b = torch.from_numpy(np.stack(batch_b).astype('float32') / 255.) distances = torch.ones(batch_size).float() * self.distance elevations_a = torch.ones(batch_size).float() * self.elevation elevations_b = torch.ones(batch_size).float() * self.elevation viewpoints_a = srf.get_points_from_angles(distances, elevations_a, -viewpoint_ids_a * 15) viewpoints_b = srf.get_points_from_angles(distances, elevations_b, -viewpoint_ids_b * 15) return images_a, images_b, viewpoints_a, viewpoints_b
def get_all_batches_for_evaluation(self, batch_size, class_id): data_ids = np.arange(self.num_data[class_id]) + self.pos[class_id] viewpoint_ids = np.tile(np.arange(24), data_ids.size) data_ids = np.repeat(data_ids, 24) * 24 + viewpoint_ids distances = torch.ones(data_ids.size).float() * self.distance elevations = torch.ones(data_ids.size).float() * self.elevation viewpoints_all = srf.get_points_from_angles( distances, elevations, -torch.from_numpy(viewpoint_ids).float() * 15) for i in range((data_ids.size - 1) // batch_size + 1): images = torch.from_numpy( self.images_rgba[data_ids[i * batch_size:(i + 1) * batch_size]].astype('float32') / 255.) images_depth = torch.from_numpy( self.images_depth[data_ids[i * batch_size:(i + 1) * batch_size]].astype('float32')) images_normal = torch.from_numpy( self.images_normal[data_ids[i * batch_size:(i + 1) * batch_size]].astype('float32')) voxels = torch.from_numpy( self.voxels[data_ids[i * batch_size:(i + 1) * batch_size] // 24].astype('float32')) yield images, images_depth, images_normal, voxels
def get_specific_view_batch(self, batch_size,view_id): data_ids_a = np.zeros(batch_size, 'int32') viewpoint_ids_a = torch.zeros(batch_size) for i in range(batch_size): class_id = np.random.choice(self.class_ids) object_id = np.random.randint(0, self.num_data[class_id]) viewpoint_id_a = view_id data_id_a = (object_id + self.pos[class_id]) * 24 + viewpoint_id_a data_ids_a[i] = data_id_a viewpoint_ids_a[i] = viewpoint_id_a images_a = torch.from_numpy(self.images[data_ids_a].astype('float32') / 255.) distances = torch.ones(batch_size).float() * self.distance elevations_a = torch.ones(batch_size).float() * self.elevation viewpoints_a = nr.get_points_from_angles(distances, elevations_a, -viewpoint_ids_a * 15 + 90) views_a = torch.cat([distances.unsqueeze(0),elevations_a.unsqueeze(0),-viewpoint_ids_a.unsqueeze(0) * 15 + 90]) return images_a, viewpoints_a,views_a
def get_random_single_batch(self, batch_size): data_ids_a = np.zeros(batch_size, 'int32') viewpoint_ids_a = torch.zeros(batch_size) for i in range(batch_size): class_id = np.random.choice(self.class_ids) object_id = np.random.randint(0, self.num_data[class_id]) if self.view_range == None: viewpoint_id_a = np.random.randint(0,24) else: viewpoint_id_a = np.random.choice(self.view_range) viewpoint_id_a = np.random.randint(0, 24) data_id_a = (object_id + self.pos[class_id]) * 24 + viewpoint_id_a data_ids_a[i] = data_id_a viewpoint_ids_a[i] = viewpoint_id_a images_a = torch.from_numpy(self.images[data_ids_a].astype('float32') / 255.) distances = torch.ones(batch_size).float() * self.distance elevations_a = torch.ones(batch_size).float() * self.elevation noise = (torch.rand(batch_size)-0.5) * 2 * self.view_noise viewpoints_a = nr.get_points_from_angles(distances, elevations_a, -viewpoint_ids_a * 15 + 90 + noise) views_a = torch.cat([distances.unsqueeze(0),elevations_a.unsqueeze(0),-viewpoint_ids_a.unsqueeze(0) * 15 + 90 + noise]) return images_a, viewpoints_a, views_a
def set_eyes_from_angles(self, distances, elevations, azimuths): if self.camera_mode not in ['look', 'look_at']: raise ValueError('Projection does not need to set eyes') self.transformer._eye = srf.get_points_from_angles( distances, elevations, azimuths)
def set_eyes_from_angles(self, distances, elevations, azimuths): self._eye = srf.get_points_from_angles(distances, elevations, azimuths)