(self, save_dir, triplane_feat, reso, n_faces=10000, only_largest_cc=True)
| 474 | |
| 475 | @torch.no_grad() |
| 476 | def decode_voxel(self, save_dir, triplane_feat, reso, n_faces=10000, only_largest_cc=True): |
| 477 | H, W = triplane_feat[0].shape[-2:] |
| 478 | D = triplane_feat[1].shape[-1] |
| 479 | new_aabb = self._resize_aabb((H, W, D)) |
| 480 | |
| 481 | # maching cubes on sdf grid |
| 482 | os.makedirs(save_dir, exist_ok=True) |
| 483 | sdf_grid = self.decode_grid(triplane_feat, reso, aabb=new_aabb)[..., 0].detach().cpu().numpy() # (H, W, D, 1) |
| 484 | # sdf_grid = -F.max_pool3d(-sdf_grid[None, None], 2, 2)[0, 0].detach().cpu().numpy() |
| 485 | vox_grid = sdf_grid < 0 |
| 486 | |
| 487 | save_path = os.path.join(save_dir, f"r{reso}_voxel.npz") |
| 488 | np.savez_compressed(save_path, vox_grid=vox_grid) |
| 489 | |
| 490 | |
| 491 | def evaluate_tsdf_prediction(pred_sdf, gt_sdf, sdf_threshold): |
no test coverage detected