(scene, config, checkpoint, outdir, res, scale, chunk_size=10000, return_all=False, val_idx=None)
| 289 | |
| 290 | |
| 291 | def eval_nerf_bacon(scene, config, checkpoint, outdir, res, scale, chunk_size=10000, return_all=False, val_idx=None): |
| 292 | |
| 293 | os.makedirs(f'./outputs/nerf/{outdir}', exist_ok=True) |
| 294 | |
| 295 | p = configargparse.DefaultConfigFileParser() |
| 296 | with open(config) as f: |
| 297 | opt = p.parse(f) |
| 298 | |
| 299 | opt = Options(**opt) |
| 300 | dataset = load_dataset(opt, res, scale) |
| 301 | models = load_model(opt, checkpoint) |
| 302 | |
| 303 | for k in models.keys(): |
| 304 | models[k].stop_after = scale |
| 305 | |
| 306 | # render images |
| 307 | psnrs = [] |
| 308 | ssims = [] |
| 309 | dataset_generator = iter(dataset) |
| 310 | for idx in range(len(dataset)): |
| 311 | |
| 312 | if val_idx is not None: |
| 313 | dataset.val_idx = val_idx |
| 314 | idx = val_idx |
| 315 | |
| 316 | in_dict, meta_dict, gt_dict = next(dataset_generator) |
| 317 | |
| 318 | images, psnr, ssim, elapsed = render_image(opt, models, dataset, chunk_size, |
| 319 | in_dict, meta_dict, gt_dict, |
| 320 | scale, return_all=return_all) |
| 321 | |
| 322 | tqdm.write(f'Scale: {scale} | PSNR: {psnr:.02f} dB, SSIM: {ssim:.02f}, Elapsed: {elapsed:.02f} ms') |
| 323 | |
| 324 | if return_all: |
| 325 | for s in range(4): |
| 326 | skimage.io.imsave(f'./outputs/nerf/{outdir}/r_{idx}_d{3-s}.png', (images[s]*255).astype(np.uint8)) |
| 327 | else: |
| 328 | np.save(f'./outputs/nerf/{outdir}/r_{idx}_d{3-scale}.npy', {'psnr': psnr, 'ssim': ssim}) |
| 329 | skimage.io.imsave(f'./outputs/nerf/{outdir}/r_{idx}_d{3-scale}.png', (images*255).astype(np.uint8)) |
| 330 | |
| 331 | psnrs.append(psnr) |
| 332 | ssims.append(ssim) |
| 333 | |
| 334 | if val_idx is not None: |
| 335 | break |
| 336 | |
| 337 | if not return_all and val_idx is not None: |
| 338 | np.save(f'./outputs/nerf/{outdir}/metrics_d{3-scale}.npy', {'psnr': psnrs, 'ssim': ssims, |
| 339 | 'avg_psnr': np.mean(psnrs), |
| 340 | 'avg_ssim': np.mean(ssims)}) |
| 341 | |
| 342 | print(f'Avg. PSNR: {np.mean(psnrs):.02f}, Avg. SSIM: {np.mean(ssims):.02f}') |
| 343 | |
| 344 | |
| 345 | if __name__ == '__main__': |
no test coverage detected