options = Options() opts = options.args torch.manual_seed(opts.torch_seed) device = torch.device('cuda:{}'.format(opts.gpu) if torch.cuda.is_available() else torch.device('cpu')) print('device: {}'.format(device)) # initial mesh mesh = Mesh(opts.initial_mesh, device=device, hold_history=True) # input point cloud input_xyz, input_normals = utils.read_pts(opts.input_pc) # normalize point cloud based on initial mesh input_xyz /= mesh.scale input_xyz += mesh.translations[None, :] input_xyz = torch.Tensor(input_xyz).type(options.dtype()).to(device)[None, :, :] input_normals = torch.Tensor(input_normals).type(options.dtype()).to(device)[None, :, :] part_mesh = PartMesh(mesh, num_parts=options.get_num_parts(len(mesh.faces)), bfs_depth=opts.overlap) print(f'number of parts {part_mesh.n_submeshes}') net, optimizer, rand_verts, scheduler = init_net(mesh, part_mesh, device, opts) for i in range(opts.iterations): num_samples = options.get_num_samples(i % opts.upsamp) if opts.global_step: optimizer.zero_grad() start_time = time.time() for part_i, est_verts in enumerate(net(rand_verts, part_mesh)): if not opts.global_step: optimizer.zero_grad() part_mesh.update_verts(est_verts[0], part_i)
torch.manual_seed(opts.torch_seed) device = torch.device('cuda:{}'.format(opts.gpu) if torch.cuda.is_available( ) else torch.device('cpu')) print('device: {}'.format(device)) # initial mesh mesh = Mesh(opts.initial_mesh, device=device, hold_history=True) # input point cloud input_xyz, input_normals = utils.read_pts(opts.input_pc) # normalize point cloud based on initial mesh input_xyz /= mesh.scale input_xyz += mesh.translations[None, :] input_xyz = torch.Tensor(input_xyz).type( options.dtype()).to(device)[None, :, :] input_normals = torch.Tensor(input_normals).type( options.dtype()).to(device)[None, :, :] # Split the mesh into parts part_mesh = PartMesh(mesh, num_parts=options.get_num_parts(len(mesh.faces)), bfs_depth=opts.overlap) print(f'number of parts {part_mesh.n_submeshes}') # Initialize displacement network net, optimizer, rand_verts, scheduler = init_net(mesh, part_mesh, device, opts) # Create beamgap loss (how far is this from the surface?) beamgap_loss = BeamGapLoss(device)