render.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #
  2. # Copyright (C) 2023, Inria
  3. # GRAPHDECO research group, https://team.inria.fr/graphdeco
  4. # All rights reserved.
  5. #
  6. # This software is free for non-commercial, research and evaluation use
  7. # under the terms of the LICENSE.md file.
  8. #
  9. # For inquiries contact george.drettakis@inria.fr
  10. #
  11. import torch
  12. from scene import Scene
  13. import os
  14. from tqdm import tqdm
  15. from os import makedirs
  16. from gaussian_renderer import render
  17. import torchvision
  18. from utils.general_utils import safe_state
  19. from argparse import ArgumentParser
  20. from arguments import ModelParams, PipelineParams, get_combined_args
  21. from gaussian_renderer import GaussianModel
  22. def render_set(model_path, name, iteration, views, gaussians, pipeline, background):
  23. render_path = os.path.join(model_path, name, "ours_{}".format(iteration), "renders")
  24. gts_path = os.path.join(model_path, name, "ours_{}".format(iteration), "gt")
  25. makedirs(render_path, exist_ok=True)
  26. makedirs(gts_path, exist_ok=True)
  27. for idx, view in enumerate(tqdm(views, desc="Rendering progress")):
  28. rendering = render(view, gaussians, pipeline, background)["render"]
  29. gt = view.original_image[0:3, :, :]
  30. torchvision.utils.save_image(rendering, os.path.join(render_path, '{0:05d}'.format(idx) + ".png"))
  31. torchvision.utils.save_image(gt, os.path.join(gts_path, '{0:05d}'.format(idx) + ".png"))
  32. def render_sets(dataset : ModelParams, iteration : int, pipeline : PipelineParams, skip_train : bool, skip_test : bool):
  33. with torch.no_grad():
  34. gaussians = GaussianModel(dataset.sh_degree)
  35. scene = Scene(dataset, gaussians, load_iteration=iteration, shuffle=False)
  36. bg_color = [1,1,1] if dataset.white_background else [0, 0, 0]
  37. background = torch.tensor(bg_color, dtype=torch.float32, device="cuda")
  38. if not skip_train:
  39. render_set(dataset.model_path, "train", scene.loaded_iter, scene.getTrainCameras(), gaussians, pipeline, background)
  40. if not skip_test:
  41. render_set(dataset.model_path, "test", scene.loaded_iter, scene.getTestCameras(), gaussians, pipeline, background)
  42. if __name__ == "__main__":
  43. # Set up command line argument parser
  44. parser = ArgumentParser(description="Testing script parameters")
  45. model = ModelParams(parser, sentinel=True)
  46. pipeline = PipelineParams(parser)
  47. parser.add_argument("--iteration", default=-1, type=int)
  48. parser.add_argument("--skip_train", action="store_true")
  49. parser.add_argument("--skip_test", action="store_true")
  50. parser.add_argument("--quiet", action="store_true")
  51. args = get_combined_args(parser)
  52. print("Rendering " + args.model_path)
  53. # Initialize system state (RNG)
  54. safe_state(args.quiet)
  55. render_sets(model.extract(args), args.iteration, pipeline.extract(args), args.skip_train, args.skip_test)