render.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import torch
  2. from scene import Scene
  3. import os
  4. from tqdm import tqdm
  5. from os import makedirs
  6. from gaussian_renderer import render
  7. import torchvision
  8. from utils.general_utils import safe_state
  9. from argparse import ArgumentParser
  10. from arguments import ModelParams, PipelineParams, get_combined_args
  11. from gaussian_renderer import GaussianModel
  12. def render_set(model_path, name, iteration, views, gaussians, pipeline, background):
  13. render_path = os.path.join(model_path, name, "ours_{}".format(iteration), "renders")
  14. gts_path = os.path.join(model_path, name, "ours_{}".format(iteration), "gt")
  15. makedirs(render_path, exist_ok=True)
  16. makedirs(gts_path, exist_ok=True)
  17. for idx, view in enumerate(tqdm(views, desc="Rendering progress")):
  18. rendering = render(view, gaussians, pipeline, background)["render"]
  19. gt = view.original_image[0:3, :, :]
  20. torchvision.utils.save_image(rendering, os.path.join(render_path, '{0:05d}'.format(idx) + ".png"))
  21. torchvision.utils.save_image(gt, os.path.join(gts_path, '{0:05d}'.format(idx) + ".png"))
  22. def render_sets(dataset : ModelParams, iteration : int, pipeline : PipelineParams, skip_train : bool, skip_test : bool):
  23. with torch.no_grad():
  24. gaussians = GaussianModel(dataset.sh_degree)
  25. scene = Scene(dataset, gaussians, load_iteration=iteration, shuffle=False)
  26. bg_color = [1,1,1] if dataset.white_background else [0, 0, 0]
  27. background = torch.tensor(bg_color, dtype=torch.float32, device="cuda")
  28. if not skip_train:
  29. render_set(dataset.model_path, "train", scene.loaded_iter, scene.getTrainCameras(), gaussians, pipeline, background)
  30. if not skip_test:
  31. render_set(dataset.model_path, "test", scene.loaded_iter, scene.getTestCameras(), gaussians, pipeline, background)
  32. if __name__ == "__main__":
  33. # Set up command line argument parser
  34. parser = ArgumentParser(description="Testing script parameters")
  35. model = ModelParams(parser, sentinel=True)
  36. pipeline = PipelineParams(parser)
  37. parser.add_argument("--iteration", default=-1, type=int)
  38. parser.add_argument("--skip_train", action="store_true")
  39. parser.add_argument("--skip_test", action="store_true")
  40. parser.add_argument("--quiet", action="store_true")
  41. args = get_combined_args(parser)
  42. print("Rendering " + args.model_path)
  43. # Initialize system state (RNG)
  44. safe_state(args.quiet)
  45. render_sets(model.extract(args), args.iteration, pipeline.extract(args), args.skip_train, args.skip_test)