euler-eval 2.0.1__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {euler_eval-2.0.1 → euler_eval-2.2.0}/PKG-INFO +43 -1
- {euler_eval-2.0.1 → euler_eval-2.2.0}/README.md +41 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/cli.py +62 -4
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/evaluate.py +561 -67
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/__init__.py +19 -0
- euler_eval-2.2.0/euler_eval/metrics/depth_standard.py +196 -0
- euler_eval-2.2.0/euler_eval/metrics/gpu_depth_batch.py +418 -0
- euler_eval-2.2.0/euler_eval/metrics/gpu_image_batch.py +204 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/PKG-INFO +43 -1
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/SOURCES.txt +4 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/requires.txt +1 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/pyproject.toml +2 -1
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_depth_alignment_output.py +11 -1
- euler_eval-2.2.0/tests/test_depth_standard.py +89 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_meta_output.py +15 -3
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_rgb_fid_output.py +2 -2
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/__init__.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/data.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/absrel.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/daniel_error.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/depth_binned_error.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/depth_edge_f1.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/fid_kid.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/high_freq_energy.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/lpips_metric.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/normal_consistency.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/psnr.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_edge_f1.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_lpips.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_psnr_ssim.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rho_a.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rmse.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/scale_invariant_log.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/ssim.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/tail_errors.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/utils.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/sanity_checker.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/utils/hierarchy_parser.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/dependency_links.txt +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/entry_points.txt +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/top_level.txt +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/init_cache.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/setup.cfg +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_alignment.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_cli_device.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_config.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_data.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_evaluate_helpers.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_init_cache.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_integration.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_rho_a.py +0 -0
- {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_save_results.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: euler-eval
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: Depth map evaluation toolkit with comprehensive metrics
|
|
5
5
|
Author: Depth Eval Contributors
|
|
6
6
|
License: MIT
|
|
@@ -22,6 +22,7 @@ Requires-Dist: Pillow>=8.0.0
|
|
|
22
22
|
Requires-Dist: torch>=1.9.0
|
|
23
23
|
Requires-Dist: torchvision>=0.10.0
|
|
24
24
|
Requires-Dist: lpips>=0.1.4
|
|
25
|
+
Requires-Dist: torchmetrics>=1.0
|
|
25
26
|
Requires-Dist: tqdm>=4.62.0
|
|
26
27
|
Requires-Dist: euler-loading
|
|
27
28
|
Requires-Dist: ds-crawler
|
|
@@ -294,6 +295,7 @@ Controls sanity check thresholds. See [metrics_config.json](metrics_config.json)
|
|
|
294
295
|
| LPIPS | `depth.image_quality.lpips` | Learned Perceptual Image Patch Similarity |
|
|
295
296
|
| FID | `depth.image_quality.fid` | Fréchet Inception Distance (dataset-level distribution metric) |
|
|
296
297
|
| KID | `depth.image_quality.kid_mean`, `kid_std` | Kernel Inception Distance (mean and std) |
|
|
298
|
+
| Standard depth metrics | `depth.standard.{image_mean,image_median,pixel_pool}.*` | Monocular-depth metrics with explicit reducers: `absrel`, `sqrel`, `mae`, `rmse`, `rmse_log`, `log10`, `silog`, `delta1`, `delta2`, `delta3` |
|
|
297
299
|
| AbsRel | `depth.depth_metrics.absrel` | Absolute Relative Error (\|pred-gt\|/gt), reported as median and p90 |
|
|
298
300
|
| RMSE | `depth.depth_metrics.rmse` | Root Mean Square Error, reported as median and p90 |
|
|
299
301
|
| SILog | `depth.depth_metrics.silog` | Scale-Invariant Log Error, reported as mean, median, and p90 |
|
|
@@ -375,6 +377,8 @@ For depth outputs:
|
|
|
375
377
|
- `depth_raw`: metric-space depth without any post-hoc alignment.
|
|
376
378
|
- `depth_aligned`: metric-space depth after configured alignment mode.
|
|
377
379
|
- `depth`: backward-compatible alias of `depth_aligned`.
|
|
380
|
+
- `standard`: explicit monocular-depth metrics with three reducers:
|
|
381
|
+
`image_mean`, `image_median`, and `pixel_pool`.
|
|
378
382
|
|
|
379
383
|
Previous single-depth structure (kept under `depth`) is:
|
|
380
384
|
|
|
@@ -389,6 +393,44 @@ Previous single-depth structure (kept under `depth`) is:
|
|
|
389
393
|
"kid_mean": 0.005,
|
|
390
394
|
"kid_std": 0.002
|
|
391
395
|
},
|
|
396
|
+
"standard": {
|
|
397
|
+
"image_mean": {
|
|
398
|
+
"absrel": 0.08,
|
|
399
|
+
"sqrel": 0.04,
|
|
400
|
+
"mae": 0.62,
|
|
401
|
+
"rmse": 1.20,
|
|
402
|
+
"rmse_log": 0.11,
|
|
403
|
+
"log10": 0.04,
|
|
404
|
+
"silog": 0.08,
|
|
405
|
+
"delta1": 0.91,
|
|
406
|
+
"delta2": 0.97,
|
|
407
|
+
"delta3": 0.99
|
|
408
|
+
},
|
|
409
|
+
"image_median": {
|
|
410
|
+
"absrel": 0.07,
|
|
411
|
+
"sqrel": 0.03,
|
|
412
|
+
"mae": 0.58,
|
|
413
|
+
"rmse": 1.10,
|
|
414
|
+
"rmse_log": 0.10,
|
|
415
|
+
"log10": 0.04,
|
|
416
|
+
"silog": 0.07,
|
|
417
|
+
"delta1": 0.92,
|
|
418
|
+
"delta2": 0.98,
|
|
419
|
+
"delta3": 0.99
|
|
420
|
+
},
|
|
421
|
+
"pixel_pool": {
|
|
422
|
+
"absrel": 0.08,
|
|
423
|
+
"sqrel": 0.04,
|
|
424
|
+
"mae": 0.61,
|
|
425
|
+
"rmse": 1.18,
|
|
426
|
+
"rmse_log": 0.11,
|
|
427
|
+
"log10": 0.04,
|
|
428
|
+
"silog": 0.08,
|
|
429
|
+
"delta1": 0.91,
|
|
430
|
+
"delta2": 0.97,
|
|
431
|
+
"delta3": 0.99
|
|
432
|
+
}
|
|
433
|
+
},
|
|
392
434
|
"depth_metrics": {
|
|
393
435
|
"absrel": { "median": 0.05, "p90": 0.12 },
|
|
394
436
|
"rmse": { "median": 1.2, "p90": 3.1 },
|
|
@@ -257,6 +257,7 @@ Controls sanity check thresholds. See [metrics_config.json](metrics_config.json)
|
|
|
257
257
|
| LPIPS | `depth.image_quality.lpips` | Learned Perceptual Image Patch Similarity |
|
|
258
258
|
| FID | `depth.image_quality.fid` | Fréchet Inception Distance (dataset-level distribution metric) |
|
|
259
259
|
| KID | `depth.image_quality.kid_mean`, `kid_std` | Kernel Inception Distance (mean and std) |
|
|
260
|
+
| Standard depth metrics | `depth.standard.{image_mean,image_median,pixel_pool}.*` | Monocular-depth metrics with explicit reducers: `absrel`, `sqrel`, `mae`, `rmse`, `rmse_log`, `log10`, `silog`, `delta1`, `delta2`, `delta3` |
|
|
260
261
|
| AbsRel | `depth.depth_metrics.absrel` | Absolute Relative Error (\|pred-gt\|/gt), reported as median and p90 |
|
|
261
262
|
| RMSE | `depth.depth_metrics.rmse` | Root Mean Square Error, reported as median and p90 |
|
|
262
263
|
| SILog | `depth.depth_metrics.silog` | Scale-Invariant Log Error, reported as mean, median, and p90 |
|
|
@@ -338,6 +339,8 @@ For depth outputs:
|
|
|
338
339
|
- `depth_raw`: metric-space depth without any post-hoc alignment.
|
|
339
340
|
- `depth_aligned`: metric-space depth after configured alignment mode.
|
|
340
341
|
- `depth`: backward-compatible alias of `depth_aligned`.
|
|
342
|
+
- `standard`: explicit monocular-depth metrics with three reducers:
|
|
343
|
+
`image_mean`, `image_median`, and `pixel_pool`.
|
|
341
344
|
|
|
342
345
|
Previous single-depth structure (kept under `depth`) is:
|
|
343
346
|
|
|
@@ -352,6 +355,44 @@ Previous single-depth structure (kept under `depth`) is:
|
|
|
352
355
|
"kid_mean": 0.005,
|
|
353
356
|
"kid_std": 0.002
|
|
354
357
|
},
|
|
358
|
+
"standard": {
|
|
359
|
+
"image_mean": {
|
|
360
|
+
"absrel": 0.08,
|
|
361
|
+
"sqrel": 0.04,
|
|
362
|
+
"mae": 0.62,
|
|
363
|
+
"rmse": 1.20,
|
|
364
|
+
"rmse_log": 0.11,
|
|
365
|
+
"log10": 0.04,
|
|
366
|
+
"silog": 0.08,
|
|
367
|
+
"delta1": 0.91,
|
|
368
|
+
"delta2": 0.97,
|
|
369
|
+
"delta3": 0.99
|
|
370
|
+
},
|
|
371
|
+
"image_median": {
|
|
372
|
+
"absrel": 0.07,
|
|
373
|
+
"sqrel": 0.03,
|
|
374
|
+
"mae": 0.58,
|
|
375
|
+
"rmse": 1.10,
|
|
376
|
+
"rmse_log": 0.10,
|
|
377
|
+
"log10": 0.04,
|
|
378
|
+
"silog": 0.07,
|
|
379
|
+
"delta1": 0.92,
|
|
380
|
+
"delta2": 0.98,
|
|
381
|
+
"delta3": 0.99
|
|
382
|
+
},
|
|
383
|
+
"pixel_pool": {
|
|
384
|
+
"absrel": 0.08,
|
|
385
|
+
"sqrel": 0.04,
|
|
386
|
+
"mae": 0.61,
|
|
387
|
+
"rmse": 1.18,
|
|
388
|
+
"rmse_log": 0.11,
|
|
389
|
+
"log10": 0.04,
|
|
390
|
+
"silog": 0.08,
|
|
391
|
+
"delta1": 0.91,
|
|
392
|
+
"delta2": 0.97,
|
|
393
|
+
"delta3": 0.99
|
|
394
|
+
}
|
|
395
|
+
},
|
|
355
396
|
"depth_metrics": {
|
|
356
397
|
"absrel": { "median": 0.05, "p90": 0.12 },
|
|
357
398
|
"rmse": { "median": 1.2, "p90": 3.1 },
|
|
@@ -65,13 +65,20 @@ _DEPTH_ALIGNMENT_AXIS = AxisDeclaration(
|
|
|
65
65
|
|
|
66
66
|
_DEPTH_CATEGORY_AXIS = AxisDeclaration(
|
|
67
67
|
position=1,
|
|
68
|
-
values=("image_quality", "depth_metrics", "geometric_metrics"),
|
|
68
|
+
values=("image_quality", "standard", "depth_metrics", "geometric_metrics"),
|
|
69
69
|
optional=True,
|
|
70
70
|
description="Metric category",
|
|
71
71
|
)
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
_DEPTH_REDUCTION_AXIS = AxisDeclaration(
|
|
74
74
|
position=2,
|
|
75
|
+
values=("image_mean", "image_median", "pixel_pool"),
|
|
76
|
+
optional=True,
|
|
77
|
+
description="Dataset reduction mode",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
_BENCHMARK_BIN_AXIS = AxisDeclaration(
|
|
81
|
+
position=3,
|
|
75
82
|
values=("all", "near", "mid", "far"),
|
|
76
83
|
optional=True,
|
|
77
84
|
description="Depth benchmark bin",
|
|
@@ -99,7 +106,11 @@ _RGB_BENCHMARK_BIN_AXIS = AxisDeclaration(
|
|
|
99
106
|
|
|
100
107
|
|
|
101
108
|
def _depth_eval_axes(*, benchmark: bool = False) -> dict[str, AxisDeclaration]:
|
|
102
|
-
axes = {
|
|
109
|
+
axes = {
|
|
110
|
+
"alignment": _DEPTH_ALIGNMENT_AXIS,
|
|
111
|
+
"category": _DEPTH_CATEGORY_AXIS,
|
|
112
|
+
"reduction": _DEPTH_REDUCTION_AXIS,
|
|
113
|
+
}
|
|
103
114
|
if benchmark:
|
|
104
115
|
axes["bin"] = _BENCHMARK_BIN_AXIS
|
|
105
116
|
return axes
|
|
@@ -126,6 +137,46 @@ _DEPTH_EVAL_DESCRIPTIONS = {
|
|
|
126
137
|
"lpips": MetricDescription(is_higher_better=False, display_name="LPIPS"),
|
|
127
138
|
"fid": MetricDescription(is_higher_better=False, display_name="FID"),
|
|
128
139
|
"kid_mean": MetricDescription(is_higher_better=False, display_name="KID Mean"),
|
|
140
|
+
"kid_std": MetricDescription(is_higher_better=False, display_name="KID Std"),
|
|
141
|
+
"absrel": MetricDescription(
|
|
142
|
+
is_higher_better=False, display_name="AbsRel"
|
|
143
|
+
),
|
|
144
|
+
"sqrel": MetricDescription(
|
|
145
|
+
is_higher_better=False, display_name="SqRel"
|
|
146
|
+
),
|
|
147
|
+
"mae": MetricDescription(
|
|
148
|
+
is_higher_better=False, unit="meters", display_name="MAE"
|
|
149
|
+
),
|
|
150
|
+
"rmse": MetricDescription(
|
|
151
|
+
is_higher_better=False, unit="meters", display_name="RMSE"
|
|
152
|
+
),
|
|
153
|
+
"rmse_log": MetricDescription(
|
|
154
|
+
is_higher_better=False, scale="log", display_name="RMSE Log"
|
|
155
|
+
),
|
|
156
|
+
"log10": MetricDescription(
|
|
157
|
+
is_higher_better=False, scale="log", display_name="Log10 Error"
|
|
158
|
+
),
|
|
159
|
+
"silog": MetricDescription(
|
|
160
|
+
is_higher_better=False, scale="log", display_name="SILog"
|
|
161
|
+
),
|
|
162
|
+
"delta1": MetricDescription(
|
|
163
|
+
is_higher_better=True,
|
|
164
|
+
min_value=0.0,
|
|
165
|
+
max_value=1.0,
|
|
166
|
+
display_name="δ < 1.25",
|
|
167
|
+
),
|
|
168
|
+
"delta2": MetricDescription(
|
|
169
|
+
is_higher_better=True,
|
|
170
|
+
min_value=0.0,
|
|
171
|
+
max_value=1.0,
|
|
172
|
+
display_name="δ < 1.25²",
|
|
173
|
+
),
|
|
174
|
+
"delta3": MetricDescription(
|
|
175
|
+
is_higher_better=True,
|
|
176
|
+
min_value=0.0,
|
|
177
|
+
max_value=1.0,
|
|
178
|
+
display_name="δ < 1.25³",
|
|
179
|
+
),
|
|
129
180
|
"absrel.median": MetricDescription(
|
|
130
181
|
is_higher_better=False, display_name="AbsRel (Median)"
|
|
131
182
|
),
|
|
@@ -869,6 +920,7 @@ def main():
|
|
|
869
920
|
|
|
870
921
|
# Inject benchmark bin metrics under the existing category
|
|
871
922
|
# keys so that the bin axis decomposes correctly:
|
|
923
|
+
# depth.eval.aligned.standard.image_mean.{bin}.absrel
|
|
872
924
|
# depth.eval.aligned.depth_metrics.{bin}.absrel.median
|
|
873
925
|
# depth.eval.aligned.geometric_metrics.{bin}.normal_consistency.mean_angle
|
|
874
926
|
depth_benchmark = depth_results.get("depth_benchmark")
|
|
@@ -879,7 +931,12 @@ def main():
|
|
|
879
931
|
for category, metrics in bin_summary.items():
|
|
880
932
|
cleaned = _clean_metric_tree(metrics)
|
|
881
933
|
if cleaned:
|
|
882
|
-
|
|
934
|
+
if category == "standard":
|
|
935
|
+
bucket = aligned.setdefault(category, {})
|
|
936
|
+
for reduction, reduction_metrics in cleaned.items():
|
|
937
|
+
bucket.setdefault(reduction, {})[bn] = reduction_metrics
|
|
938
|
+
else:
|
|
939
|
+
aligned.setdefault(category, {})[bn] = cleaned
|
|
883
940
|
depth_save["metricSet"]["metadata"]["benchmark"] = {
|
|
884
941
|
"depth_range": depth_benchmark["boundaries"]["range"],
|
|
885
942
|
"boundaries": depth_benchmark["boundaries"],
|
|
@@ -1084,6 +1141,7 @@ def main():
|
|
|
1084
1141
|
fov_domain=rays_meta["fov_domain"],
|
|
1085
1142
|
gt_name=gt.get("name", "GT"),
|
|
1086
1143
|
pred_name=ds_name,
|
|
1144
|
+
num_workers=args.num_workers,
|
|
1087
1145
|
verbose=args.verbose,
|
|
1088
1146
|
sanity_checker=sanity_checker,
|
|
1089
1147
|
)
|