mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-12 19:04:03 +08:00
Add visualization for rendering and data
This commit is contained in:
1 parent
b5987a1989
commit
80122b627c
5 files changed
+161
-22
No files matched your search
@@ -85,8 +85,7 @@ if __name__ == '__main__':
|
||||
old_path = os.path.join(renders_lin, old_path)
|
||||
shutil.move(old_path, new_path)
|
||||
print(f"Renamed {os.path.basename(old_path)} to {new_filename}")
|
||||
|
||||
|
||||
|
||||
print("Step 4b: Verifying filename consistency between GT and renders...")
|
||||
try:
|
||||
gt_files = set(f for f in os.listdir(gt_exr) if f.endswith('.exr'))
|
||||
@@ -158,3 +157,38 @@ if __name__ == '__main__':
|
||||
"--hdr_dir", gt_exr,
|
||||
"--output_dir", gt_hdr
|
||||
], check=True)
|
||||
|
||||
# 9. Convert EXR panos to LDR format:
|
||||
print("Converting EXR panos to LDR visualization...")
|
||||
subprocess.run([
|
||||
"python", "lantern_scripts/tonemap.py",
|
||||
"--data_dir", renders_lin,
|
||||
"--out_dir", renders_lin
|
||||
], check=True)
|
||||
subprocess.run([
|
||||
"python", "lantern_scripts/tonemap.py",
|
||||
"--data_dir", gt_exr,
|
||||
"--out_dir", gt_exr
|
||||
], check=True)
|
||||
subprocess.run([
|
||||
"python", "lantern_scripts/tonemap.py",
|
||||
"--data_dir", lin_renders,
|
||||
"--out_dir", lin_renders
|
||||
], check=True)
|
||||
subprocess.run([
|
||||
"python", "lantern_scripts/tonemap.py",
|
||||
"--data_dir", gt_exr_renders,
|
||||
"--out_dir", gt_exr_renders
|
||||
], check=True)
|
||||
|
||||
# 9. Convert EXR panos to LDR format:
|
||||
print("Preparing the HTML visualization...")
|
||||
subprocess.run([
|
||||
"python", "lantern_scripts/results_visualization.py",
|
||||
"--gt_dir", gt_exr,
|
||||
"--gt_render_dir", gt_exr_renders,
|
||||
"--pandora_dir", renders_lin,
|
||||
"--pandora_render_dir", lin_renders,
|
||||
"--out_dir", args.input_dir,
|
||||
"--name", args.metric_name
|
||||
], check=True)
|
||||
@@ -0,0 +1,21 @@
|
||||
from os import makedirs
|
||||
from html4vision import Col, imagetable
|
||||
import argparse
|
||||
import json
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--input_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr')
|
||||
args = parser.parse_args()
|
||||
|
||||
cols = [
|
||||
Col('id1', 'ID'), # 1-based indexing
|
||||
Col('img', 'Left Pano', args.input_dir + 'left_e1/output_*.png'),
|
||||
Col('img', 'Left Mask', args.input_dir + 'masks/left_e1/output_*.png.masked.png'),
|
||||
Col('img', 'Right Pano', args.input_dir + 'right_e2/output_*.png'),
|
||||
Col('img', 'Right Mask', args.input_dir + 'masks/right_e2/output_*.png.masked.png'),
|
||||
]
|
||||
|
||||
# imagetable(cols, 'another-dir/pathrep.html', 'Path Replace Example', pathrep=('/mnt/data', '/home-local2/mokad6.extra.nobkp'))
|
||||
imagetable(cols, args.input_dir + 'data_index.html', 'NeRF sequence', pathrep=(args.input_dir, './'), imscale=0.1, zebra=True, sticky_header=True, overlay_toggle=True)
|
||||
@@ -92,11 +92,13 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
|
||||
si_mse = {}
|
||||
angular = {}
|
||||
psnr_error = {}
|
||||
metrics = {}
|
||||
for key in dataset_names:
|
||||
mse[key] = []
|
||||
si_mse[key] = []
|
||||
angular[key] = []
|
||||
psnr_error[key] = []
|
||||
metrics[key] = {}
|
||||
|
||||
gt_dataset_files = sorted([os.path.join(gt_dataset_root, f) for f in os.listdir(gt_dataset_root) if f.endswith('.exr')])
|
||||
|
||||
@@ -121,6 +123,15 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
|
||||
scale_invariant_mse_result = si_wrmse(gt_dataset_img_exr, result_dataset_img_exr, mask)
|
||||
angular_result = angular_error(gt_dataset_img_exr, result_dataset_img_exr, mask)
|
||||
psnr_result = psnr(gt_dataset_img_exr_for_PSNR, result_dataset_img_exr_for_PSNR)
|
||||
|
||||
key = gt_dataset_file.split('/')[-1]
|
||||
metrics[dataset_name][key] = {
|
||||
'mse': str(mse_result),
|
||||
'si_rmse': str(scale_invariant_mse_result),
|
||||
'angular': str(angular_result),
|
||||
'psnr': str(psnr_result)
|
||||
}
|
||||
|
||||
mse[dataset_name].append(mse_result)
|
||||
si_mse[dataset_name].append(scale_invariant_mse_result)
|
||||
angular[dataset_name].append(angular_result)
|
||||
@@ -128,28 +139,22 @@ def calculate_metrics(results_dataset_roots, gt_dataset_root, output_folder, dat
|
||||
si_mse[dataset_name].append(scale_invariant_mse_result)
|
||||
|
||||
mse[dataset_name] = remove_nan_and_sort(mse[dataset_name])
|
||||
|
||||
|
||||
mse_ours = np.mean(mse[dataset_name])
|
||||
si_mse_ours = np.mean(si_mse[dataset_name])
|
||||
angular_ours = np.mean(angular[dataset_name])
|
||||
psnr_ours = np.mean(psnr_error[dataset_name])
|
||||
|
||||
metrics[dataset_name]['mean'] = {
|
||||
'mse': str(mse_ours),
|
||||
'si_rmse': str(si_mse_ours),
|
||||
'angular': str(angular_ours),
|
||||
'psnr': str(psnr_ours)
|
||||
}
|
||||
|
||||
# print(dataset_name + ', si_RMSE: {}'.format(si_mse_ours))
|
||||
# print(dataset_name + ', RMSE: {}'.format(mse_ours))
|
||||
# print(dataset_name + ', angular: {}'.format(angular_ours))
|
||||
# print(dataset_name + ', PSNR: {}'.format(psnr_ours))
|
||||
|
||||
output_dict = {}
|
||||
output_dict['model_name'] = dataset_name
|
||||
output_dict['si_RMSE'] = str(si_mse_ours)
|
||||
output_dict['RMSE'] = str(mse_ours)
|
||||
output_dict['angular'] = str(angular_ours)
|
||||
output_dict['PSNR'] = str(psnr_ours)
|
||||
|
||||
output_addr = output_folder + 'render_results.json'
|
||||
|
||||
output_addr = output_folder + dataset_name + '_results.json'
|
||||
with open(output_addr, 'w') as f:
|
||||
json.dump(output_dict, f, indent=4)
|
||||
json.dump(metrics, f, indent=4)
|
||||
|
||||
if __name__ == '__main__':
|
||||
argparser = argparse.ArgumentParser()
|
||||
@@ -157,7 +162,6 @@ if __name__ == '__main__':
|
||||
argparser.add_argument("--gt_dataset_root", type=str, default="/mnt/data/coffee_room2/GT/GT_exr_renders/")
|
||||
argparser.add_argument("--output_folder", type=str, default="/mnt/data/coffee_room2/metrics/results_table/")
|
||||
argparser.add_argument("--dataset_names", type=str, default="/mnt/data/coffee_room2/metrics/results_table/")
|
||||
|
||||
args = argparser.parse_args()
|
||||
|
||||
calculate_metrics(args.results_dataset_roots, args.gt_dataset_root, args.output_folder, args.dataset_names)
|
||||
@@ -0,0 +1,77 @@
|
||||
import os
|
||||
from os import makedirs
|
||||
from html4vision import Col, imagetable
|
||||
import argparse
|
||||
import json
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--gt_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr')
|
||||
parser.add_argument('--gt_render_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/GT/GT_exr_renders')
|
||||
parser.add_argument('--pandora_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/metrics/images/pandora_cam_opt_on_lin')
|
||||
parser.add_argument('--pandora_render_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H/metrics/images/pandora_cam_opt_on_lin_renders')
|
||||
parser.add_argument('--out_dir', type=str, default='/mnt/data/nerfstudio_ds/real_data/coffeeroom_1102H')
|
||||
parser.add_argument("--name", type=str, required=True, default="unaligned", help="Name of the method, used for naming output directories")
|
||||
args = parser.parse_args()
|
||||
|
||||
results_json = os.path.join(args.out_dir, 'metrics/results_table')
|
||||
results_json = os.path.join(results_json, args.name + '_results.json')
|
||||
with open(results_json, 'r') as file:
|
||||
metrics = json.load(file)
|
||||
img_keys = metrics[args.name].keys() - ['mean']
|
||||
|
||||
gt = []
|
||||
gt_render = []
|
||||
out = []
|
||||
out_render = []
|
||||
|
||||
mse = []
|
||||
si_rmse = []
|
||||
psnr = []
|
||||
angular = []
|
||||
|
||||
for key in img_keys:
|
||||
img_name = key.replace('exr', 'png')
|
||||
|
||||
mse.append(metrics[args.name][key]['mse'])
|
||||
si_rmse.append(metrics[args.name][key]['si_rmse'])
|
||||
psnr.append(metrics[args.name][key]['psnr'])
|
||||
angular.append(metrics[args.name][key]['angular'])
|
||||
|
||||
gt.append( os.path.join(args.gt_dir, img_name) )
|
||||
gt_render.append( os.path.join(args.gt_render_dir, img_name) )
|
||||
out.append( os.path.join(args.pandora_dir, img_name) )
|
||||
out_render.append( os.path.join(args.pandora_render_dir, img_name) )
|
||||
|
||||
cols = [
|
||||
Col('text', 'Name', list(img_keys)), # Col('id1', 'ID'), # 1-based indexing
|
||||
Col('img', 'GT Pano', gt),
|
||||
Col('img', 'GT Render', gt_render),
|
||||
Col('img', 'Pandora Output', out),
|
||||
Col('img', 'Pandora Render', out_render),
|
||||
Col('text', 'MSE', mse),
|
||||
Col('text', 'si-RMSE', si_rmse),
|
||||
Col('text', 'PSNR', psnr),
|
||||
Col('text', 'Angular', angular),
|
||||
]
|
||||
|
||||
|
||||
# imagetable(cols, os.path.join(args.out_dir, 'results_' + args.name + '_index.html'), 'Pandora outputs', pathrep=(args.out_dir, './'),
|
||||
# imscale=0.1,
|
||||
# sort_style='materialize',
|
||||
# sortable=True,
|
||||
# zebra=True,
|
||||
# sticky_header=True,
|
||||
# overlay_toggle=True
|
||||
# )
|
||||
|
||||
imagetable(cols, os.path.join(args.out_dir, 'results_' + args.name + '_index.html'), 'Pandora outputs', pathrep=(args.out_dir, './'),
|
||||
sort_style='materialize',
|
||||
imsize=(300, 300),
|
||||
hori_center_img=True,
|
||||
sortable=True,
|
||||
zebra=True,
|
||||
sticky_header=True,
|
||||
overlay_toggle=True
|
||||
)
|
||||
@@ -15,7 +15,8 @@ if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--data_dir', type=str, default='/Volumes/Momo/Adobe_2023/Evaluation/test_sets/weber_test_set_original_hdr_panos/')
|
||||
parser.add_argument('--out_dir', type=str, default='/Users/momo/Desktop/camera_ready/FID_test_set_256x512/')
|
||||
parser.add_argument("--resolution", type=int, default=256)
|
||||
parser.add_argument('--do_resize', '-v', action='store_true', help='Enable verbose output')
|
||||
parser.add_argument("--resolution", type=int, default=1024)
|
||||
args = parser.parse_args()
|
||||
|
||||
test_images = []
|
||||
@@ -37,6 +38,8 @@ if __name__ == "__main__":
|
||||
pano_file = os.path.basename(pano_addr)
|
||||
pano_file = pano_file.replace('.exr', '.png')
|
||||
gt_ldr_addr = os.path.join(args.out_dir, pano_file)
|
||||
# Image.fromarray(gt_ldr).resize((2 * args.resolution, args.resolution), resample=Image.LANCZOS).save(gt_ldr_addr)
|
||||
Image.fromarray(gt_ldr).save(gt_ldr_addr)
|
||||
if args.do_resize:
|
||||
Image.fromarray(gt_ldr).resize((2 * args.resolution, args.resolution), resample=Image.LANCZOS).save(gt_ldr_addr)
|
||||
else:
|
||||
Image.fromarray(gt_ldr).save(gt_ldr_addr)
|
||||
print("Done!")
|
||||
Reference in new issue
Block a user