File size: 3,658 Bytes
c75b162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
from argparse import ArgumentParser

dtu_scenes = ['scan24', 'scan37', 'scan40', 'scan55', 'scan63', 'scan65', 'scan69', 'scan83', 'scan97', 'scan105', 'scan106', 'scan110', 'scan114', 'scan118', 'scan122']


parser = ArgumentParser(description="Full evaluation script parameters")
parser.add_argument("--skip_training", action="store_true")
parser.add_argument("--skip_rendering", action="store_true")
parser.add_argument("--skip_metrics", action="store_true")
parser.add_argument("--output_path", default="./eval/dtu")
parser.add_argument('--dtu', "-dtu", required=True, type=str)

parser.add_argument('--max_shapes', default=500000, type=int)
parser.add_argument('--lambda_normals', default=0.0028, type=float)
parser.add_argument('--lambda_dist', default=0.014, type=float)
parser.add_argument('--iteration_mesh', default=25000, type=int)
parser.add_argument('--densify_until_iter', default=25000, type=int)
parser.add_argument('--lambda_opacity', default=0.0044, type=float)
parser.add_argument('--importance_threshold', default=0.027, type=float)
parser.add_argument('--lr_triangles_points_init', default=0.0015, type=float)


args, _ = parser.parse_known_args()

all_scenes = []
all_scenes.extend(dtu_scenes)

if not args.skip_metrics:
    parser.add_argument('--DTU_Official', "-DTU", required=True, type=str)
    args = parser.parse_args()

if not args.skip_training:
    common_args = (
        f" --test_iterations -1 --depth_ratio 1.0 -r 2 --eval --max_shapes {args.max_shapes}"
        f" --lambda_normals {args.lambda_normals}"
        f" --lambda_dist {args.lambda_dist}"
        f" --iteration_mesh {args.iteration_mesh}"
        f" --densify_until_iter {args.densify_until_iter}"
        f" --lambda_opacity {args.lambda_opacity}"
        f" --importance_threshold {args.importance_threshold}"
        f" --lr_triangles_points_init {args.lr_triangles_points_init}"
        f" --lambda_size {0.0}"
        f" --no_dome"
    )

    for scene in dtu_scenes:
        source = args.dtu + "/" + scene
        print("python train.py -s " + source + " -m " + args.output_path + "/" + scene + common_args)
        os.system("python train.py -s " + source + " -m " + args.output_path + "/" + scene + common_args)


if not args.skip_rendering:
    all_sources = []
    common_args = " --quiet --skip_train --depth_ratio 1.0 --num_cluster 1 --voxel_size 0.004 --sdf_trunc 0.016 --depth_trunc 3.0"
    for scene in dtu_scenes:
        source = args.dtu + "/" + scene
        print("python mesh.py --iteration 30000 -s " + source + " -m" + args.output_path + "/" + scene + common_args)
        os.system("python mesh.py --iteration 30000 -s " + source + " -m" + args.output_path + "/" + scene + common_args)


if not args.skip_metrics:
    script_dir = os.path.dirname(os.path.abspath(__file__))
    for scene in dtu_scenes:
        scan_id = scene[4:]
        ply_file = f"{args.output_path}/{scene}/train/ours_30000/"
        iteration = 30000
        output_dir = f"{args.output_path}/{scene}/"
        string = f"python {script_dir}/eval_dtu/evaluate_single_scene.py " + \
            f"--input_mesh {args.output_path}/{scene}/train/ours_30000/fuse_post.ply " + \
            f"--scan_id {scan_id} --output_dir {output_dir}/ " + \
            f"--mask_dir {args.dtu} " + \
            f"--DTU {args.DTU_Official}"
        print(string)
        os.system(string)


import json

average = 0
for scene in dtu_scenes:
    output_dir = f"{args.output_path}/{scene}/"
    with open(output_dir + '/results.json', 'r') as f:
        results = json.load(f)
    print("Results: ", results)
    average += results['overall']
average /= len(dtu_scenes)