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.
Files changed (52) hide show
  1. {euler_eval-2.0.1 → euler_eval-2.2.0}/PKG-INFO +43 -1
  2. {euler_eval-2.0.1 → euler_eval-2.2.0}/README.md +41 -0
  3. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/cli.py +62 -4
  4. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/evaluate.py +561 -67
  5. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/__init__.py +19 -0
  6. euler_eval-2.2.0/euler_eval/metrics/depth_standard.py +196 -0
  7. euler_eval-2.2.0/euler_eval/metrics/gpu_depth_batch.py +418 -0
  8. euler_eval-2.2.0/euler_eval/metrics/gpu_image_batch.py +204 -0
  9. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/PKG-INFO +43 -1
  10. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/SOURCES.txt +4 -0
  11. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/requires.txt +1 -0
  12. {euler_eval-2.0.1 → euler_eval-2.2.0}/pyproject.toml +2 -1
  13. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_depth_alignment_output.py +11 -1
  14. euler_eval-2.2.0/tests/test_depth_standard.py +89 -0
  15. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_meta_output.py +15 -3
  16. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_rgb_fid_output.py +2 -2
  17. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/__init__.py +0 -0
  18. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/data.py +0 -0
  19. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/absrel.py +0 -0
  20. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/daniel_error.py +0 -0
  21. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/depth_binned_error.py +0 -0
  22. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/depth_edge_f1.py +0 -0
  23. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/fid_kid.py +0 -0
  24. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/high_freq_energy.py +0 -0
  25. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/lpips_metric.py +0 -0
  26. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/normal_consistency.py +0 -0
  27. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/psnr.py +0 -0
  28. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_edge_f1.py +0 -0
  29. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_lpips.py +0 -0
  30. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rgb_psnr_ssim.py +0 -0
  31. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rho_a.py +0 -0
  32. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/rmse.py +0 -0
  33. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/scale_invariant_log.py +0 -0
  34. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/ssim.py +0 -0
  35. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/tail_errors.py +0 -0
  36. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/metrics/utils.py +0 -0
  37. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/sanity_checker.py +0 -0
  38. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval/utils/hierarchy_parser.py +0 -0
  39. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/dependency_links.txt +0 -0
  40. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/entry_points.txt +0 -0
  41. {euler_eval-2.0.1 → euler_eval-2.2.0}/euler_eval.egg-info/top_level.txt +0 -0
  42. {euler_eval-2.0.1 → euler_eval-2.2.0}/init_cache.py +0 -0
  43. {euler_eval-2.0.1 → euler_eval-2.2.0}/setup.cfg +0 -0
  44. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_alignment.py +0 -0
  45. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_cli_device.py +0 -0
  46. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_config.py +0 -0
  47. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_data.py +0 -0
  48. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_evaluate_helpers.py +0 -0
  49. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_init_cache.py +0 -0
  50. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_integration.py +0 -0
  51. {euler_eval-2.0.1 → euler_eval-2.2.0}/tests/test_rho_a.py +0 -0
  52. {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.1
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
- _BENCHMARK_BIN_AXIS = AxisDeclaration(
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 = {"alignment": _DEPTH_ALIGNMENT_AXIS, "category": _DEPTH_CATEGORY_AXIS}
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
- aligned.setdefault(category, {})[bn] = cleaned
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
  )