def __getitem__(self, i): index = self.IDlist[i] mesh_id = index // 100 view_id = index % 100 if mesh_id >= 20000: mesh_id -= 20000 category = 'cat' else: category = 'horse' filename = self.file_path.format(category, mesh_id, view_id) mat = sio.loadmat( filename, variable_names=['points3d', 'correspondence', 'rotation']) points3d = mat['points3d'] corres = mat['correspondence'].reshape(-1).astype(np.int64) corres = torch.from_numpy(corres) num_points = points3d.shape[0] points3d = torch.Tensor(points3d) R = mat['rotation'].reshape(3, 3) ori_pos = torch.as_tensor(R.T.dot(points3d.numpy().T).T, dtype=torch.float) gt_feats = self.template_feats[corres, :] gt_points = self.template_points[corres, :] y = np.concatenate([gt_feats, gt_points], axis=-1) y = torch.Tensor(y) data = Data(pos=points3d, y=y, ori_pos=ori_pos) data = self.transform(data) if self.transform is not None else data return data
def voxel_sample(self, pos, corres): fake_data = Data( pos=torch.Tensor(pos), y=corres, ) data = self.voxel_sampler(fake_data) return data.pos, data.y
def __getitem__(self, i): index = self.IDlist[i] mesh_id = index // self.num_views view_id = index % self.num_views filename = self.file_path.format(mesh_id, view_id) mat = sio.loadmat(filename, variable_names=['points3d', 'correspondences', 'rotations']) points3d = mat['points3d'] corres = mat['correspondences'].reshape(-1).astype(np.int64) corres = torch.from_numpy(corres) num_points = points3d.shape[0] points3d = torch.Tensor(points3d) R = mat['rotations'].reshape(3, 3) ori_pos = torch.as_tensor(R.T.dot(points3d.numpy().T).T, dtype=torch.float) if not self.cls: gt_feats = self.template_feats[corres, :] gt_points = self.template_points[corres, :] y = np.concatenate([gt_feats, gt_points], axis=-1) y = torch.Tensor(y) else: y = torch.as_tensor(corres, dtype=torch.long) data = Data(pos=points3d, y=y, ori_pos=ori_pos) data = self.transform(data) if self.transform is not None else data return data
def __getitem__(self, i): mesh_id = self.IDlist[i] mesh = o3d.io.read_triangle_mesh(self.PLY.format(mesh_id)) points3d = torch.as_tensor(np.stack([x, y, z], -1), dtype=torch.float) corres = np.arange(points3d.shape[0]).astype(np.int32) mesh = o3d.io.read_triangle_mesh(self.PLY.format(mesh_id)) points3d = np.array(mesh.vertices) corres = np.arange(points3d.shape[0]) points3d = torch.as_tensor(points3d, dtype=torch.float) faces = torch.as_tensor(mesh.triangles, dtype=torch.long) y = torch.as_tensor(corres, dtype=torch.long) data = Data(pos=points3d, faces=faces, y=y) return data