UncleanCode's picture
Upload via Autoresearch export_data
8e02a28 verified
Raw History Blame Contribute Delete
1.58 kB
import argparse, json
from pathlib import Path
import torch
from arguments import ModelParams, PipelineParams, OptimizationParams
from scene import Scene, FourierModel
parser = argparse.ArgumentParser()
lp = ModelParams(parser); op = OptimizationParams(parser); pp = PipelineParams(parser)
parser.add_argument('--load_iteration', type=int, default=6000)
args = parser.parse_args()
dataset = lp.extract(args)
gaussians = FourierModel(dataset.sh_degree, fourier_K=dataset.fourier_K,
use_beta_color=dataset.beta_color, sb_lobes=dataset.sb_lobes)
scene = Scene(dataset, gaussians, load_iteration=args.load_iteration, shuffle=False)
out = Path(dataset.model_path) / 'lod_models'
out.mkdir(parents=True, exist_ok=True)
full_r = gaussians._radii_logits.detach().clone()
full_p = gaussians._phases_raw.detach().clone()
full_k = gaussians.fourier_K
rows = []
for k in range(1, full_k+1):
gaussians._radii_logits = torch.nn.Parameter(full_r[:, :k].clone().requires_grad_(False))
gaussians._phases_raw = torch.nn.Parameter(full_p[:, :k].clone().requires_grad_(False))
gaussians.fourier_K = k
gaussians.active_K = k
path = out / f'fourier_k{k}.ply'
gaussians.save_ply(str(path))
rows.append({'K':k,'path':str(path),'bytes':path.stat().st_size,'primitives':int(gaussians.get_xyz.shape[0])})
gaussians._radii_logits = torch.nn.Parameter(full_r)
gaussians._phases_raw = torch.nn.Parameter(full_p)
gaussians.fourier_K = full_k
gaussians.active_K = full_k
(out/'sizes.json').write_text(json.dumps(rows,indent=2))
print(json.dumps(rows,indent=2))