diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..fdb20bf5730b11a78ad789198f9688b90b4a96bd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,31 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_kitchen_01_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_kitchen_07_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_lectureroom_05_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_livingroom_14_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_restaurant_11_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/method_comparison/ibims_storageroom_05_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/ibims/representative_images/ours_representative_rgb_gt_pred_error.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000041_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000055_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000085_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000101_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000321_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/method_comparison/val_000441_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/nyuv2/representative_images/ours_representative_rgb_gt_pred_error.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0223_00_000600_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0303_00_001250_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0548_00_002050_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0552_01_000430_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0600_02_001350_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/method_comparison/scene0645_01_000340_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/scannet/representative_images/ours_representative_rgb_gt_pred_error.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/alley_2_frame_0028_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/ambush_2_frame_0014_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/ambush_5_frame_0026_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/ambush_7_frame_0035_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/bandage_2_frame_0027_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/method_comparison/cave_4_frame_0022_method_comparison.png filter=lfs diff=lfs merge=lfs -text +ablation/sintel/representative_images/ours_representative_rgb_gt_pred_error.png filter=lfs diff=lfs merge=lfs -text diff --git a/ablation/README.md b/ablation/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9930b0588fc1facd62990573568ae45e9b823d9b --- /dev/null +++ b/ablation/README.md @@ -0,0 +1,17 @@ +# Normal Evaluation Ablation Results + +This folder is organized by dataset. Each dataset folder contains `data/`, `representative_images/`, and `source.json`. + +Sources: +- `run_123850`: `/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50` +- `run_121747`: `/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47` + +Metric summary: + +| dataset | method | run | angle_deg | acc_11_25 | acc_22_5 | acc_30 | samples | ips | +| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| ibims | ours | run_121747 | 18.2029 | 0.6245 | 0.7906 | 0.8311 | 100.0000 | 0.5437 | +| nyuv2 | ours | run_123850 | 23.0193 | 0.3945 | 0.6669 | 0.7524 | 654.0000 | 0.5392 | +| scannet | ours | run_123850 | 21.3949 | 0.4585 | 0.7153 | 0.7848 | 300.0000 | 0.5386 | +| sintel | ours | run_123850 | 38.2628 | 0.1781 | 0.3814 | 0.4996 | 1064.0000 | 0.5471 | +| toy | ours | run_121747 | | | | | | | diff --git a/ablation/ablation_metrics_summary.csv b/ablation/ablation_metrics_summary.csv new file mode 100644 index 0000000000000000000000000000000000000000..b18f5a1e37b29416e84e348ad00a840059cae18a --- /dev/null +++ b/ablation/ablation_metrics_summary.csv @@ -0,0 +1,6 @@ +dataset,method,run,angle_deg,acc_11_25,acc_22_5,acc_30,samples,missing,inference_mean_seconds,inference_images_per_second +nyuv2,ours,run_123850,23.019315893132386,0.39451143620621176,0.6669151603446459,0.752394706238665,654.0,0.0,1.8544761400122982,0.539235840474803 +scannet,ours,run_123850,21.39486180464427,0.4585078304835285,0.7153138614818454,0.7848363836357991,300.0,0.0,1.8565222447564205,0.5386415394829821 +sintel,ours,run_123850,38.26282845583177,0.17808037532162607,0.38137201149072636,0.4995710332632849,1064.0,0.0,1.8277028220793219,0.5471348995688098 +ibims,ours,run_121747,18.20290114402771,0.6245251177251339,0.790619985461235,0.831144380569458,100.0,0.0,1.8394116687588393,0.5436520910377608 +toy,ours,run_121747,,,,,,,, diff --git a/ablation/ibims/data/eval_experiment.json b/ablation/ibims/data/eval_experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..50c72d2fc3475b7205bcfd58d38a8c20737c4ba9 --- /dev/null +++ b/ablation/ibims/data/eval_experiment.json @@ -0,0 +1,260 @@ +{ + "dataset": "ibims", + "data_root": "/root/vepfs/Infinity/data", + "partition": "val", + "pn": "1M", + "max_samples": 0, + "input_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/_eval_set/images", + "eval_set_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/_eval_set", + "source_eval_set_dir": "", + "eval_image": "", + "methods": [ + "ours" + ], + "ours_checkpoints": [ + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth" + ], + "normal_tokenizer_ckpt": "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "visible_cuda_devices": [ + "0", + "1", + "2", + "3" + ], + "parallel_shards": "auto", + "compare_inference_time": true, + "timing_warmup": 3, + "timing_repeats": 5, + "ours_kv_cache_fast": false, + "inference_time_protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "normal_conventions": { + "canonical": "camera_left_up_backward", + "dataset_targets": { + "nyuv2": { + "name": "nyuv2_raw_right_forward_up", + "to_eval_perm": [ + 0, + 2, + 1 + ], + "to_eval_signs": [ + -1, + 1, + -1 + ], + "description": "NYUv2 parquet normals. Canonical mapping: (x, y, z) -> (-x, z, -y)." + }, + "hypersim": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "scannet": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "ibims": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "sintel": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + } + }, + "model_outputs": { + "ours": { + "name": "ours_model_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Infinity normal output already matches the exported eval convention." + }, + "marigold": { + "name": "marigold_normals_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + 1, + 1 + ], + "description": "Marigold normals_npy output. Canonical mapping: (x, y, z) -> (-x, y, z)." + }, + "geowizard": { + "name": "geowizard_normal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "GeoWizard normal_npy output already matches the canonical convention." + }, + "stablenormal": { + "name": "stablenormal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "StableNormal output already matches the canonical convention." + }, + "lotusg": { + "name": "lotus_g_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-G output already matches the canonical convention." + }, + "lotusd": { + "name": "lotus_d_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-D output already matches the canonical convention." + }, + "dsine": { + "name": "dsine_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "DSINE output already matches the canonical convention." + }, + "metric3dv2": { + "name": "metric3d_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + -1, + -1 + ], + "description": "Metric3D v2 output. Canonical mapping: (x, y, z) -> (-x, -y, -z)." + }, + "omnidata_v2": { + "name": "omnidata_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Omnidata V2 adapter output already matches the canonical convention." + }, + "marigold_e2eft": { + "name": "marigold_e2eft_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Marigold E2E-FT output already matches the canonical convention." + } + }, + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ], + "description": "Direct normal-map display: RGB = (canonical normal + 1) / 2." + } + } +} \ No newline at end of file diff --git a/ablation/ibims/data/experiment_commands.json b/ablation/ibims/data/experiment_commands.json new file mode 100644 index 0000000000000000000000000000000000000000..e2848d2ad434b550971579e0cfe0350ad9126196 --- /dev/null +++ b/ablation/ibims/data/experiment_commands.json @@ -0,0 +1,112 @@ +{ + "ours": [ + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_input_shards/shard_00", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_shards/shard_00", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_input_shards/shard_01", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_shards/shard_01", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_input_shards/shard_02", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_shards/shard_02", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_input_shards/shard_03", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/_shards/shard_03", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ] + ] +} \ No newline at end of file diff --git a/ablation/ibims/data/inference_time_summary.json b/ablation/ibims/data/inference_time_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..0f7dfbb049fe83427ae5a65a5b20d395dfd29e3c --- /dev/null +++ b/ablation/ibims/data/inference_time_summary.json @@ -0,0 +1,21 @@ +{ + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "methods": { + "ours": { + "enabled": true, + "available": true, + "method": "ours", + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "timed_observations": 500, + "images": 100, + "mean_seconds": 1.8394116687588393, + "median_seconds": 1.8351657567545772, + "std_seconds": 0.017275431719267167, + "ci95_seconds": 0.0015142583548655479, + "min_seconds": 1.8134799133986235, + "max_seconds": 1.8864054400473833, + "images_per_second": 0.5436520910377608, + "per_image_file": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/ours/inference_times.json" + } + } +} \ No newline at end of file diff --git a/ablation/ibims/data/metrics_summary.json b/ablation/ibims/data/metrics_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..ccd070b2f8ab98cfe3ac34de1b15fbe1e75431d4 --- /dev/null +++ b/ablation/ibims/data/metrics_summary.json @@ -0,0 +1,19 @@ +{ + "ours": { + "acc_11_25": 0.6245251177251339, + "acc_22_5": 0.790619985461235, + "acc_30": 0.831144380569458, + "angle_deg": 18.20290114402771, + "loss_angular_rad": 0.3177005544304848, + "loss_l1": 0.14768831200897695, + "loss_latent": 0.0, + "loss_norm": 3.634137971456064e-10, + "loss_total_aux": 0.0, + "samples": 100.0, + "missing": 0.0, + "inference_mean_seconds": 1.8394116687588393, + "inference_median_seconds": 1.8351657567545772, + "inference_std_seconds": 0.017275431719267167, + "inference_images_per_second": 0.5436520910377608 + } +} \ No newline at end of file diff --git a/ablation/ibims/data/representative_method_comparison.json b/ablation/ibims/data/representative_method_comparison.json new file mode 100644 index 0000000000000000000000000000000000000000..cbd349be8d4992932cc09271d3c2de0dbec0e03f --- /dev/null +++ b/ablation/ibims/data/representative_method_comparison.json @@ -0,0 +1,82 @@ +{ + "samples": [ + { + "id": "ibims_restaurant_11", + "mean_angle": 10.338109016418457, + "methods": 1 + }, + { + "id": "ibims_lectureroom_05", + "mean_angle": 13.873883247375488, + "methods": 1 + }, + { + "id": "ibims_livingroom_14", + "mean_angle": 16.593923568725586, + "methods": 1 + }, + { + "id": "ibims_kitchen_07", + "mean_angle": 18.48088264465332, + "methods": 1 + }, + { + "id": "ibims_kitchen_01", + "mean_angle": 21.066890716552734, + "methods": 1 + }, + { + "id": "ibims_storageroom_05", + "mean_angle": 35.72504806518555, + "methods": 1 + } + ], + "methods": [ + "ours" + ], + "layout": "one image per representative sample; top row is RGB/GT, then one row per method with Pred/Error.", + "images": [ + { + "id": "ibims_restaurant_11", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_restaurant_11_method_comparison.png", + "mean_angle": 10.338109016418457 + }, + { + "id": "ibims_lectureroom_05", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_lectureroom_05_method_comparison.png", + "mean_angle": 13.873883247375488 + }, + { + "id": "ibims_livingroom_14", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_livingroom_14_method_comparison.png", + "mean_angle": 16.593923568725586 + }, + { + "id": "ibims_kitchen_07", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_kitchen_07_method_comparison.png", + "mean_angle": 18.48088264465332 + }, + { + "id": "ibims_kitchen_01", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_kitchen_01_method_comparison.png", + "mean_angle": 21.066890716552734 + }, + { + "id": "ibims_storageroom_05", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims/representative_method_comparison/ibims_storageroom_05_method_comparison.png", + "mean_angle": 35.72504806518555 + } + ], + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ] + } +} \ No newline at end of file diff --git a/ablation/ibims/representative_images/method_comparison/ibims_kitchen_01_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_kitchen_01_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..e30a86257c921deb26ec58f3376a134971cb3d7f --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_kitchen_01_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a2ef03af889783c6478f5ec5c27cd50bc685aacc4cdcab63606acf67a8252d0 +size 686912 diff --git a/ablation/ibims/representative_images/method_comparison/ibims_kitchen_07_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_kitchen_07_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9291abbd0a34fea964e230af9a85a9e0d4b63c --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_kitchen_07_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:027baf4bfc601cd148c13eb61fd2ea0aad457ff0199056f21ddcfede30f12bc4 +size 645032 diff --git a/ablation/ibims/representative_images/method_comparison/ibims_lectureroom_05_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_lectureroom_05_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd285df5d70043de5f9fb33c9a721a1e1ca19c9 --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_lectureroom_05_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ef0e3885fca513a60b4156c1ab4d44788bc48ea139191c419144edc8e91072c +size 639508 diff --git a/ablation/ibims/representative_images/method_comparison/ibims_livingroom_14_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_livingroom_14_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..b517ce557ab37cfb331d39ef74c774b8151daf9b --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_livingroom_14_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38ddf7f899ab70fefbc47f9b7aa202fa3beed954d163c264b121ee2c8f5dbb14 +size 776156 diff --git a/ablation/ibims/representative_images/method_comparison/ibims_restaurant_11_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_restaurant_11_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..96175913d245fa38329c404d5e38a19f02f592fb --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_restaurant_11_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:193ef311933dbaa2c8fb9434f1b28740feedaa45df1212871f93e682898dc072 +size 649400 diff --git a/ablation/ibims/representative_images/method_comparison/ibims_storageroom_05_method_comparison.png b/ablation/ibims/representative_images/method_comparison/ibims_storageroom_05_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..95364602cc2b3c6e43d102b6f35d5c1519157639 --- /dev/null +++ b/ablation/ibims/representative_images/method_comparison/ibims_storageroom_05_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ca4b413fe7aa02a1bd85625a88935f5f91e735adb746ec9444c6edf306caa4c +size 849905 diff --git a/ablation/ibims/representative_images/ours_representative_rgb_gt_pred_error.png b/ablation/ibims/representative_images/ours_representative_rgb_gt_pred_error.png new file mode 100644 index 0000000000000000000000000000000000000000..507518ca10b361315eec96d7cd47fd43bebe74af --- /dev/null +++ b/ablation/ibims/representative_images/ours_representative_rgb_gt_pred_error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:269ec317b899b64ee0fbb6d46d60dfd35354e2510e4ecd6d08ce4ad6671c0786 +size 2970966 diff --git a/ablation/ibims/source.json b/ablation/ibims/source.json new file mode 100644 index 0000000000000000000000000000000000000000..5b155b090560b586506f30230537e97e130210f7 --- /dev/null +++ b/ablation/ibims/source.json @@ -0,0 +1,4 @@ +{ + "run": "run_121747", + "source_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/ibims" +} diff --git a/ablation/nyuv2/data/eval_experiment.json b/ablation/nyuv2/data/eval_experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..ebeb3d839dc6e45a7bee95784563414e4320ed6c --- /dev/null +++ b/ablation/nyuv2/data/eval_experiment.json @@ -0,0 +1,260 @@ +{ + "dataset": "nyuv2", + "data_root": "/root/vepfs/Infinity/data/NYUv2/hf-parquet/tanganke/nyuv2/data", + "partition": "val", + "pn": "1M", + "max_samples": 0, + "input_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/_eval_set/images", + "eval_set_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/_eval_set", + "source_eval_set_dir": "", + "eval_image": "", + "methods": [ + "ours" + ], + "ours_checkpoints": [ + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth" + ], + "normal_tokenizer_ckpt": "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "visible_cuda_devices": [ + "0", + "1", + "2", + "3" + ], + "parallel_shards": "auto", + "compare_inference_time": true, + "timing_warmup": 3, + "timing_repeats": 5, + "ours_kv_cache_fast": false, + "inference_time_protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "normal_conventions": { + "canonical": "camera_left_up_backward", + "dataset_targets": { + "nyuv2": { + "name": "nyuv2_raw_right_forward_up", + "to_eval_perm": [ + 0, + 2, + 1 + ], + "to_eval_signs": [ + -1, + 1, + -1 + ], + "description": "NYUv2 parquet normals. Canonical mapping: (x, y, z) -> (-x, z, -y)." + }, + "hypersim": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "scannet": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "ibims": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "sintel": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + } + }, + "model_outputs": { + "ours": { + "name": "ours_model_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Infinity normal output already matches the exported eval convention." + }, + "marigold": { + "name": "marigold_normals_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + 1, + 1 + ], + "description": "Marigold normals_npy output. Canonical mapping: (x, y, z) -> (-x, y, z)." + }, + "geowizard": { + "name": "geowizard_normal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "GeoWizard normal_npy output already matches the canonical convention." + }, + "stablenormal": { + "name": "stablenormal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "StableNormal output already matches the canonical convention." + }, + "lotusg": { + "name": "lotus_g_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-G output already matches the canonical convention." + }, + "lotusd": { + "name": "lotus_d_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-D output already matches the canonical convention." + }, + "dsine": { + "name": "dsine_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "DSINE output already matches the canonical convention." + }, + "metric3dv2": { + "name": "metric3d_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + -1, + -1 + ], + "description": "Metric3D v2 output. Canonical mapping: (x, y, z) -> (-x, -y, -z)." + }, + "omnidata_v2": { + "name": "omnidata_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Omnidata V2 adapter output already matches the canonical convention." + }, + "marigold_e2eft": { + "name": "marigold_e2eft_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Marigold E2E-FT output already matches the canonical convention." + } + }, + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ], + "description": "Direct normal-map display: RGB = (canonical normal + 1) / 2." + } + } +} \ No newline at end of file diff --git a/ablation/nyuv2/data/experiment_commands.json b/ablation/nyuv2/data/experiment_commands.json new file mode 100644 index 0000000000000000000000000000000000000000..0c0d7f1c839da4e9159a3fe3f0ff0ffa75fe8db9 --- /dev/null +++ b/ablation/nyuv2/data/experiment_commands.json @@ -0,0 +1,112 @@ +{ + "ours": [ + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_input_shards/shard_00", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_shards/shard_00", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_input_shards/shard_01", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_shards/shard_01", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_input_shards/shard_02", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_shards/shard_02", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_input_shards/shard_03", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/_shards/shard_03", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ] + ] +} \ No newline at end of file diff --git a/ablation/nyuv2/data/inference_time_summary.json b/ablation/nyuv2/data/inference_time_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..382b3acd7d3ccae76924cd4846d2dbb4f5a567c3 --- /dev/null +++ b/ablation/nyuv2/data/inference_time_summary.json @@ -0,0 +1,21 @@ +{ + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "methods": { + "ours": { + "enabled": true, + "available": true, + "method": "ours", + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "timed_observations": 3270, + "images": 654, + "mean_seconds": 1.8544761400122982, + "median_seconds": 1.850359095260501, + "std_seconds": 0.019757099683185158, + "ci95_seconds": 0.0006771819693837795, + "min_seconds": 1.8171202559024096, + "max_seconds": 1.960617057979107, + "images_per_second": 0.539235840474803, + "per_image_file": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/ours/inference_times.json" + } + } +} \ No newline at end of file diff --git a/ablation/nyuv2/data/metrics_summary.json b/ablation/nyuv2/data/metrics_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..c0863ec03d069e096c8aa71c3d24fc12d3cea420 --- /dev/null +++ b/ablation/nyuv2/data/metrics_summary.json @@ -0,0 +1,19 @@ +{ + "ours": { + "acc_11_25": 0.39451143620621176, + "acc_22_5": 0.6669151603446459, + "acc_30": 0.752394706238665, + "angle_deg": 23.019315893132386, + "loss_angular_rad": 0.4017628481218574, + "loss_l1": 0.18980442463713684, + "loss_latent": 0.0, + "loss_norm": 5.238297881543678e-10, + "loss_total_aux": 0.0, + "samples": 654.0, + "missing": 0.0, + "inference_mean_seconds": 1.8544761400122982, + "inference_median_seconds": 1.850359095260501, + "inference_std_seconds": 0.019757099683185158, + "inference_images_per_second": 0.539235840474803 + } +} \ No newline at end of file diff --git a/ablation/nyuv2/data/representative_method_comparison.json b/ablation/nyuv2/data/representative_method_comparison.json new file mode 100644 index 0000000000000000000000000000000000000000..a83577dc41de0877361380a8485274df2ad5bbce --- /dev/null +++ b/ablation/nyuv2/data/representative_method_comparison.json @@ -0,0 +1,82 @@ +{ + "samples": [ + { + "id": "val_000085", + "mean_angle": 15.93188762664795, + "methods": 1 + }, + { + "id": "val_000101", + "mean_angle": 19.566728591918945, + "methods": 1 + }, + { + "id": "val_000441", + "mean_angle": 21.495540618896484, + "methods": 1 + }, + { + "id": "val_000055", + "mean_angle": 23.6015567779541, + "methods": 1 + }, + { + "id": "val_000321", + "mean_angle": 26.621543884277344, + "methods": 1 + }, + { + "id": "val_000041", + "mean_angle": 35.222721099853516, + "methods": 1 + } + ], + "methods": [ + "ours" + ], + "layout": "one image per representative sample; top row is RGB/GT, then one row per method with Pred/Error.", + "images": [ + { + "id": "val_000085", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000085_method_comparison.png", + "mean_angle": 15.93188762664795 + }, + { + "id": "val_000101", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000101_method_comparison.png", + "mean_angle": 19.566728591918945 + }, + { + "id": "val_000441", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000441_method_comparison.png", + "mean_angle": 21.495540618896484 + }, + { + "id": "val_000055", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000055_method_comparison.png", + "mean_angle": 23.6015567779541 + }, + { + "id": "val_000321", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000321_method_comparison.png", + "mean_angle": 26.621543884277344 + }, + { + "id": "val_000041", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2/representative_method_comparison/val_000041_method_comparison.png", + "mean_angle": 35.222721099853516 + } + ], + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ] + } +} \ No newline at end of file diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000041_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000041_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..b77e8ee51c8e04766d51f380ae0d2e35287396c5 --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000041_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b985622a0da2be3c94ef5c8c2f7552eb755bad5de6b379a2b52eb15fe927331a +size 665740 diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000055_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000055_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf0d51a077ab4b83af34cb64b4d180701654f3b --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000055_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad47086894688d20d5930e61bf1d53b309d68042f51b103d77157d03afb36f11 +size 595946 diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000085_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000085_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..609dd3611aacfc87c1b33ce0136a170283fe9b03 --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000085_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c830087bc93dfd88f4ff8eb35ecad1b426390d6a5adc94f0a5db303f6cb9718 +size 588649 diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000101_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000101_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cee3a298193dc90178f699c104e3afc8ca4bf0 --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000101_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f12efc0c715852418f15759a3adaf72a7a771b88ff817022632fc4b0a900529 +size 585256 diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000321_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000321_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..52c7459238e641871b1b67c2d91e37bed77fff2a --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000321_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:059519253745bd94700795937b4b4163dc1e060c9d230909f2e41c7a7d0b20cc +size 597629 diff --git a/ablation/nyuv2/representative_images/method_comparison/val_000441_method_comparison.png b/ablation/nyuv2/representative_images/method_comparison/val_000441_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..3847dbbcc2d12af8f4c593761e0f99c3bade0caa --- /dev/null +++ b/ablation/nyuv2/representative_images/method_comparison/val_000441_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7bbf23e9fff383048b35d9a64e14f8ecfd348a9e229117ffde47f768c6dee2d +size 651309 diff --git a/ablation/nyuv2/representative_images/ours_representative_rgb_gt_pred_error.png b/ablation/nyuv2/representative_images/ours_representative_rgb_gt_pred_error.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc95594c3e7353a01b668a470ccf38349a6d24c --- /dev/null +++ b/ablation/nyuv2/representative_images/ours_representative_rgb_gt_pred_error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e2edd8b0a1882420a425e26a8f7dbc8d4f7776514f13f1caec7706db04fd64b +size 2681384 diff --git a/ablation/nyuv2/source.json b/ablation/nyuv2/source.json new file mode 100644 index 0000000000000000000000000000000000000000..738492bc9f5c6b4890e6321849038c733c97b183 --- /dev/null +++ b/ablation/nyuv2/source.json @@ -0,0 +1,4 @@ +{ + "run": "run_123850", + "source_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/nyuv2" +} diff --git a/ablation/ours_vs_ablation_comparison.csv b/ablation/ours_vs_ablation_comparison.csv new file mode 100644 index 0000000000000000000000000000000000000000..8e9b34a544dd1d567b6893a778f63014090cf75a --- /dev/null +++ b/ablation/ours_vs_ablation_comparison.csv @@ -0,0 +1,6 @@ +dataset,baseline_method,baseline_angle_deg,ablation_method,ablation_run,ablation_angle_deg,delta_angle_deg,baseline_acc_11_25,ablation_acc_11_25,delta_acc_11_25 +nyuv2,ours_ckpt3500,22.75464242970178,ours,run_123850,23.019315893132386,0.2646734634306078,0.41326634905981724,0.39451143620621176,-0.018754912853605477 +scannet,ours_ckpt3500,21.15351497332255,ours,run_123850,21.39486180464427,0.2413468313217173,0.472137817904974,0.4585078304835285,-0.0136299874214455 +sintel,ours_ckpt3500,37.86511148187451,ours,run_123850,38.26282845583177,0.3977169739572659,0.18697244788632078,0.17808037532162607,-0.008892072564694709 +ibims,ours_ckpt3500,17.555685510635374,ours,run_121747,18.20290114402771,0.6472156333923351,0.6427510130405426,0.6245251177251339,-0.018225895315408747 +toy,ours_ckpt3500,,ours,run_121747,,,,, diff --git a/ablation/ours_vs_ablation_comparison.md b/ablation/ours_vs_ablation_comparison.md new file mode 100644 index 0000000000000000000000000000000000000000..ce5c0cca15f2140c4aa10fa3b064041d061ccaf0 --- /dev/null +++ b/ablation/ours_vs_ablation_comparison.md @@ -0,0 +1,14 @@ +# Ours Ablation Comparison + +Baseline values come from `../tables/mean_angular_error_table.csv` row `ours_ckpt3500`. +Ablation values come from `ablation_metrics_summary.csv` row `ours`. + +Lower angle is better; higher acc@11.25 is better. Delta is ablation minus baseline. + +| Dataset | Baseline angle | Ablation angle | Delta angle | Baseline acc@11.25 | Ablation acc@11.25 | Delta acc@11.25 | Ablation run | +|---|---:|---:|---:|---:|---:|---:|---| +| nyuv2 | 22.75 | 23.02 | +0.26 | 41.3 | 39.5 | -1.9 | run_123850 | +| scannet | 21.15 | 21.39 | +0.24 | 47.2 | 45.9 | -1.4 | run_123850 | +| sintel | 37.87 | 38.26 | +0.40 | 18.7 | 17.8 | -0.9 | run_123850 | +| ibims | 17.56 | 18.20 | +0.65 | 64.3 | 62.5 | -1.8 | run_121747 | +| toy | NA | NA | NA | NA | NA | NA | run_121747 | diff --git a/ablation/scannet/data/eval_experiment.json b/ablation/scannet/data/eval_experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..32e5a8fb25a26ec700e40df9f6c40c5a2bb5f3dd --- /dev/null +++ b/ablation/scannet/data/eval_experiment.json @@ -0,0 +1,260 @@ +{ + "dataset": "scannet", + "data_root": "/root/vepfs/Infinity/data", + "partition": "val", + "pn": "1M", + "max_samples": 0, + "input_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/_eval_set/images", + "eval_set_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/_eval_set", + "source_eval_set_dir": "", + "eval_image": "", + "methods": [ + "ours" + ], + "ours_checkpoints": [ + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth" + ], + "normal_tokenizer_ckpt": "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "visible_cuda_devices": [ + "0", + "1", + "2", + "3" + ], + "parallel_shards": "auto", + "compare_inference_time": true, + "timing_warmup": 3, + "timing_repeats": 5, + "ours_kv_cache_fast": false, + "inference_time_protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "normal_conventions": { + "canonical": "camera_left_up_backward", + "dataset_targets": { + "nyuv2": { + "name": "nyuv2_raw_right_forward_up", + "to_eval_perm": [ + 0, + 2, + 1 + ], + "to_eval_signs": [ + -1, + 1, + -1 + ], + "description": "NYUv2 parquet normals. Canonical mapping: (x, y, z) -> (-x, z, -y)." + }, + "hypersim": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "scannet": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "ibims": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "sintel": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + } + }, + "model_outputs": { + "ours": { + "name": "ours_model_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Infinity normal output already matches the exported eval convention." + }, + "marigold": { + "name": "marigold_normals_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + 1, + 1 + ], + "description": "Marigold normals_npy output. Canonical mapping: (x, y, z) -> (-x, y, z)." + }, + "geowizard": { + "name": "geowizard_normal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "GeoWizard normal_npy output already matches the canonical convention." + }, + "stablenormal": { + "name": "stablenormal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "StableNormal output already matches the canonical convention." + }, + "lotusg": { + "name": "lotus_g_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-G output already matches the canonical convention." + }, + "lotusd": { + "name": "lotus_d_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-D output already matches the canonical convention." + }, + "dsine": { + "name": "dsine_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "DSINE output already matches the canonical convention." + }, + "metric3dv2": { + "name": "metric3d_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + -1, + -1 + ], + "description": "Metric3D v2 output. Canonical mapping: (x, y, z) -> (-x, -y, -z)." + }, + "omnidata_v2": { + "name": "omnidata_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Omnidata V2 adapter output already matches the canonical convention." + }, + "marigold_e2eft": { + "name": "marigold_e2eft_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Marigold E2E-FT output already matches the canonical convention." + } + }, + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ], + "description": "Direct normal-map display: RGB = (canonical normal + 1) / 2." + } + } +} \ No newline at end of file diff --git a/ablation/scannet/data/experiment_commands.json b/ablation/scannet/data/experiment_commands.json new file mode 100644 index 0000000000000000000000000000000000000000..9ef2a44f70c51dac1e7bd8707db937f1dab0b3d8 --- /dev/null +++ b/ablation/scannet/data/experiment_commands.json @@ -0,0 +1,112 @@ +{ + "ours": [ + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_input_shards/shard_00", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_shards/shard_00", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_input_shards/shard_01", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_shards/shard_01", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_input_shards/shard_02", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_shards/shard_02", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_input_shards/shard_03", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/_shards/shard_03", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ] + ] +} \ No newline at end of file diff --git a/ablation/scannet/data/inference_time_summary.json b/ablation/scannet/data/inference_time_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..0c70be0664fcce5eec8e27b4acc024904fb23ffb --- /dev/null +++ b/ablation/scannet/data/inference_time_summary.json @@ -0,0 +1,21 @@ +{ + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "methods": { + "ours": { + "enabled": true, + "available": true, + "method": "ours", + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "timed_observations": 1500, + "images": 300, + "mean_seconds": 1.8565222447564205, + "median_seconds": 1.852135144174099, + "std_seconds": 0.01928934004573679, + "ci95_seconds": 0.00097617529201788, + "min_seconds": 1.8278531096875668, + "max_seconds": 1.9190935641527176, + "images_per_second": 0.5386415394829821, + "per_image_file": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/ours/inference_times.json" + } + } +} \ No newline at end of file diff --git a/ablation/scannet/data/metrics_summary.json b/ablation/scannet/data/metrics_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..f5078775f1ea3b83436b3ea18d78af3b3a593059 --- /dev/null +++ b/ablation/scannet/data/metrics_summary.json @@ -0,0 +1,19 @@ +{ + "ours": { + "acc_11_25": 0.4585078304835285, + "acc_22_5": 0.7153138614818454, + "acc_30": 0.7848363836357991, + "angle_deg": 21.39486180464427, + "loss_angular_rad": 0.3734107763071855, + "loss_l1": 0.1772806303203106, + "loss_latent": 0.0, + "loss_norm": 5.598008211612123e-10, + "loss_total_aux": 0.0, + "samples": 300.0, + "missing": 0.0, + "inference_mean_seconds": 1.8565222447564205, + "inference_median_seconds": 1.852135144174099, + "inference_std_seconds": 0.01928934004573679, + "inference_images_per_second": 0.5386415394829821 + } +} \ No newline at end of file diff --git a/ablation/scannet/data/representative_method_comparison.json b/ablation/scannet/data/representative_method_comparison.json new file mode 100644 index 0000000000000000000000000000000000000000..4c7a7583c69212ef496b1c8442b5ca9cd5650654 --- /dev/null +++ b/ablation/scannet/data/representative_method_comparison.json @@ -0,0 +1,82 @@ +{ + "samples": [ + { + "id": "scene0223_00_000600", + "mean_angle": 12.284090995788574, + "methods": 1 + }, + { + "id": "scene0645_01_000340", + "mean_angle": 15.68735122680664, + "methods": 1 + }, + { + "id": "scene0303_00_001250", + "mean_angle": 18.916147232055664, + "methods": 1 + }, + { + "id": "scene0552_01_000430", + "mean_angle": 21.800033569335938, + "methods": 1 + }, + { + "id": "scene0600_02_001350", + "mean_angle": 26.825334548950195, + "methods": 1 + }, + { + "id": "scene0548_00_002050", + "mean_angle": 39.613460540771484, + "methods": 1 + } + ], + "methods": [ + "ours" + ], + "layout": "one image per representative sample; top row is RGB/GT, then one row per method with Pred/Error.", + "images": [ + { + "id": "scene0223_00_000600", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0223_00_000600_method_comparison.png", + "mean_angle": 12.284090995788574 + }, + { + "id": "scene0645_01_000340", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0645_01_000340_method_comparison.png", + "mean_angle": 15.68735122680664 + }, + { + "id": "scene0303_00_001250", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0303_00_001250_method_comparison.png", + "mean_angle": 18.916147232055664 + }, + { + "id": "scene0552_01_000430", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0552_01_000430_method_comparison.png", + "mean_angle": 21.800033569335938 + }, + { + "id": "scene0600_02_001350", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0600_02_001350_method_comparison.png", + "mean_angle": 26.825334548950195 + }, + { + "id": "scene0548_00_002050", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet/representative_method_comparison/scene0548_00_002050_method_comparison.png", + "mean_angle": 39.613460540771484 + } + ], + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ] + } +} \ No newline at end of file diff --git a/ablation/scannet/representative_images/method_comparison/scene0223_00_000600_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0223_00_000600_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..51d4a390ee007834867f3bd8176b5098b103b65b --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0223_00_000600_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42c91e791f614e6806ba1aebddc8b4b140f3db01137448dba91e7d29a2bf9c15 +size 664516 diff --git a/ablation/scannet/representative_images/method_comparison/scene0303_00_001250_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0303_00_001250_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..cee386708ea1165ac0725745a02a3649802550af --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0303_00_001250_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4aecc6a9de9b2157775c5a40b2b625e2e19d1e8ca8f5ee4db38ff2a5228977d5 +size 634222 diff --git a/ablation/scannet/representative_images/method_comparison/scene0548_00_002050_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0548_00_002050_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..b93537a0401974b0800cf580f986fb58187c5c09 --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0548_00_002050_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e1e29e2c689ecd10841306d06bc2cfe75534dccd6b7a668ad2fae216d72a5f8 +size 550948 diff --git a/ablation/scannet/representative_images/method_comparison/scene0552_01_000430_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0552_01_000430_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..b54c3d432615a1b9f8d77b63a63552b0bac6f1a1 --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0552_01_000430_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10758ebe4393de683ef7622bcdbf33ab58646d7ca4dedf1035f1071fc74bea61 +size 604297 diff --git a/ablation/scannet/representative_images/method_comparison/scene0600_02_001350_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0600_02_001350_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..bb74ebf36d1bfec6cc59bddfa3fdb2e57a1aa471 --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0600_02_001350_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:361bf7b14b69f9b3a4940551b468ec8a0806437e5c624ff8c4be2aa8da78da21 +size 595472 diff --git a/ablation/scannet/representative_images/method_comparison/scene0645_01_000340_method_comparison.png b/ablation/scannet/representative_images/method_comparison/scene0645_01_000340_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..0c10dab6ed30b61728e9eb08597f4bfaff2c4c39 --- /dev/null +++ b/ablation/scannet/representative_images/method_comparison/scene0645_01_000340_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19633135dbcca66b615a28baf9e9247d0aef8daca1787448fb99bc3e06f30c71 +size 675630 diff --git a/ablation/scannet/representative_images/ours_representative_rgb_gt_pred_error.png b/ablation/scannet/representative_images/ours_representative_rgb_gt_pred_error.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdac37d442d998879e1e42ff100472c9dd572ce --- /dev/null +++ b/ablation/scannet/representative_images/ours_representative_rgb_gt_pred_error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d678a0dfbda0f37130735ba1e32836c5c73bace7ebdad68366528d77597a6ec +size 2701792 diff --git a/ablation/scannet/source.json b/ablation/scannet/source.json new file mode 100644 index 0000000000000000000000000000000000000000..8ac84f2b2ab945bad090b4fc83b4f412411844de --- /dev/null +++ b/ablation/scannet/source.json @@ -0,0 +1,4 @@ +{ + "run": "run_123850", + "source_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/scannet" +} diff --git a/ablation/sintel/data/eval_experiment.json b/ablation/sintel/data/eval_experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..faca636a8b35ea6439aa243c2fd90fd452d7c8ec --- /dev/null +++ b/ablation/sintel/data/eval_experiment.json @@ -0,0 +1,260 @@ +{ + "dataset": "sintel", + "data_root": "/root/vepfs/Infinity/data", + "partition": "val", + "pn": "1M", + "max_samples": 0, + "input_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/_eval_set/images", + "eval_set_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/_eval_set", + "source_eval_set_dir": "", + "eval_image": "", + "methods": [ + "ours" + ], + "ours_checkpoints": [ + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth" + ], + "normal_tokenizer_ckpt": "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "visible_cuda_devices": [ + "0", + "1", + "2", + "3" + ], + "parallel_shards": "auto", + "compare_inference_time": true, + "timing_warmup": 3, + "timing_repeats": 5, + "ours_kv_cache_fast": false, + "inference_time_protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "normal_conventions": { + "canonical": "camera_left_up_backward", + "dataset_targets": { + "nyuv2": { + "name": "nyuv2_raw_right_forward_up", + "to_eval_perm": [ + 0, + 2, + 1 + ], + "to_eval_signs": [ + -1, + 1, + -1 + ], + "description": "NYUv2 parquet normals. Canonical mapping: (x, y, z) -> (-x, z, -y)." + }, + "hypersim": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "scannet": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "ibims": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "sintel": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + } + }, + "model_outputs": { + "ours": { + "name": "ours_model_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Infinity normal output already matches the exported eval convention." + }, + "marigold": { + "name": "marigold_normals_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + 1, + 1 + ], + "description": "Marigold normals_npy output. Canonical mapping: (x, y, z) -> (-x, y, z)." + }, + "geowizard": { + "name": "geowizard_normal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "GeoWizard normal_npy output already matches the canonical convention." + }, + "stablenormal": { + "name": "stablenormal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "StableNormal output already matches the canonical convention." + }, + "lotusg": { + "name": "lotus_g_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-G output already matches the canonical convention." + }, + "lotusd": { + "name": "lotus_d_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-D output already matches the canonical convention." + }, + "dsine": { + "name": "dsine_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "DSINE output already matches the canonical convention." + }, + "metric3dv2": { + "name": "metric3d_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + -1, + -1 + ], + "description": "Metric3D v2 output. Canonical mapping: (x, y, z) -> (-x, -y, -z)." + }, + "omnidata_v2": { + "name": "omnidata_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Omnidata V2 adapter output already matches the canonical convention." + }, + "marigold_e2eft": { + "name": "marigold_e2eft_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Marigold E2E-FT output already matches the canonical convention." + } + }, + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ], + "description": "Direct normal-map display: RGB = (canonical normal + 1) / 2." + } + } +} \ No newline at end of file diff --git a/ablation/sintel/data/experiment_commands.json b/ablation/sintel/data/experiment_commands.json new file mode 100644 index 0000000000000000000000000000000000000000..ae9ab736678ef3c2d549ebe8dbe6bccacabb6cec --- /dev/null +++ b/ablation/sintel/data/experiment_commands.json @@ -0,0 +1,112 @@ +{ + "ours": [ + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_input_shards/shard_00", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_shards/shard_00", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_input_shards/shard_01", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_shards/shard_01", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_input_shards/shard_02", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_shards/shard_02", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_input_shards/shard_03", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/_shards/shard_03", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ] + ] +} \ No newline at end of file diff --git a/ablation/sintel/data/inference_time_summary.json b/ablation/sintel/data/inference_time_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..ecd673b7d76800a312e405057684ede993ebd33f --- /dev/null +++ b/ablation/sintel/data/inference_time_summary.json @@ -0,0 +1,21 @@ +{ + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "methods": { + "ours": { + "enabled": true, + "available": true, + "method": "ours", + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "timed_observations": 5320, + "images": 1064, + "mean_seconds": 1.8277028220793219, + "median_seconds": 1.8259914284572005, + "std_seconds": 0.014033581550791104, + "ci95_seconds": 0.0003771106329976519, + "min_seconds": 1.7931781895458698, + "max_seconds": 1.9092448819428682, + "images_per_second": 0.5471348995688098, + "per_image_file": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/ours/inference_times.json" + } + } +} \ No newline at end of file diff --git a/ablation/sintel/data/metrics_summary.json b/ablation/sintel/data/metrics_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..dd45ac896bc8275f62af8be59cd2de9c9364e6a2 --- /dev/null +++ b/ablation/sintel/data/metrics_summary.json @@ -0,0 +1,19 @@ +{ + "ours": { + "acc_11_25": 0.17808037532162607, + "acc_22_5": 0.38137201149072636, + "acc_30": 0.4995710332632849, + "angle_deg": 38.26282845583177, + "loss_angular_rad": 0.6678123309143952, + "loss_l1": 0.3118699598301174, + "loss_latent": 0.0, + "loss_norm": 9.085933116340199e-10, + "loss_total_aux": 0.0, + "samples": 1064.0, + "missing": 0.0, + "inference_mean_seconds": 1.8277028220793219, + "inference_median_seconds": 1.8259914284572005, + "inference_std_seconds": 0.014033581550791104, + "inference_images_per_second": 0.5471348995688098 + } +} \ No newline at end of file diff --git a/ablation/sintel/data/representative_method_comparison.json b/ablation/sintel/data/representative_method_comparison.json new file mode 100644 index 0000000000000000000000000000000000000000..e71f2fd16a70af0cce5ca1581aed83f71d6ee086 --- /dev/null +++ b/ablation/sintel/data/representative_method_comparison.json @@ -0,0 +1,82 @@ +{ + "samples": [ + { + "id": "alley_2_frame_0028", + "mean_angle": 20.74757957458496, + "methods": 1 + }, + { + "id": "ambush_5_frame_0026", + "mean_angle": 31.60484504699707, + "methods": 1 + }, + { + "id": "cave_4_frame_0022", + "mean_angle": 35.800350189208984, + "methods": 1 + }, + { + "id": "ambush_7_frame_0035", + "mean_angle": 39.16755676269531, + "methods": 1 + }, + { + "id": "bandage_2_frame_0027", + "mean_angle": 45.92593765258789, + "methods": 1 + }, + { + "id": "ambush_2_frame_0014", + "mean_angle": 64.7751693725586, + "methods": 1 + } + ], + "methods": [ + "ours" + ], + "layout": "one image per representative sample; top row is RGB/GT, then one row per method with Pred/Error.", + "images": [ + { + "id": "alley_2_frame_0028", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/alley_2_frame_0028_method_comparison.png", + "mean_angle": 20.74757957458496 + }, + { + "id": "ambush_5_frame_0026", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/ambush_5_frame_0026_method_comparison.png", + "mean_angle": 31.60484504699707 + }, + { + "id": "cave_4_frame_0022", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/cave_4_frame_0022_method_comparison.png", + "mean_angle": 35.800350189208984 + }, + { + "id": "ambush_7_frame_0035", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/ambush_7_frame_0035_method_comparison.png", + "mean_angle": 39.16755676269531 + }, + { + "id": "bandage_2_frame_0027", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/bandage_2_frame_0027_method_comparison.png", + "mean_angle": 45.92593765258789 + }, + { + "id": "ambush_2_frame_0014", + "path": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel/representative_method_comparison/ambush_2_frame_0014_method_comparison.png", + "mean_angle": 64.7751693725586 + } + ], + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ] + } +} \ No newline at end of file diff --git a/ablation/sintel/representative_images/method_comparison/alley_2_frame_0028_method_comparison.png b/ablation/sintel/representative_images/method_comparison/alley_2_frame_0028_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..15067885155630ad692c9ea6b74b3edbf4bcd7ae --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/alley_2_frame_0028_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aada9fecd908bef95a8072c53f52b0b2181f981b3aa41d3db3abc83724bc861c +size 661311 diff --git a/ablation/sintel/representative_images/method_comparison/ambush_2_frame_0014_method_comparison.png b/ablation/sintel/representative_images/method_comparison/ambush_2_frame_0014_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..af20b7241bccbb8e75cc44e4c1b4eeb7dc1b1cd2 --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/ambush_2_frame_0014_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:652716e4c32cfbafaf362ed4700ed1c9681d06b16480c0d572df4d55f6adcab6 +size 302344 diff --git a/ablation/sintel/representative_images/method_comparison/ambush_5_frame_0026_method_comparison.png b/ablation/sintel/representative_images/method_comparison/ambush_5_frame_0026_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..67362db781d683efd97b4c5706827ee6b9dd550c --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/ambush_5_frame_0026_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d92f484383ddfb75699ea7713a62d4e8264643aeb63ca6e2c3bcba1ebf5e62 +size 663908 diff --git a/ablation/sintel/representative_images/method_comparison/ambush_7_frame_0035_method_comparison.png b/ablation/sintel/representative_images/method_comparison/ambush_7_frame_0035_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..e269a5179a77e2ee8b68fe13ff9fa5f233a2a9c0 --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/ambush_7_frame_0035_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cf7269cc88588b8b55ad3ab3d41e01f0263437d3a6cff3613e76f83c744a06e +size 602935 diff --git a/ablation/sintel/representative_images/method_comparison/bandage_2_frame_0027_method_comparison.png b/ablation/sintel/representative_images/method_comparison/bandage_2_frame_0027_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..e5fc3debcccee05e3f6610d5711ffb8c6d62f9ac --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/bandage_2_frame_0027_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:044ee5165bb9443c6e645628412cd6bf3f08a76c2a428f7159ed1e3e44ccee6f +size 680216 diff --git a/ablation/sintel/representative_images/method_comparison/cave_4_frame_0022_method_comparison.png b/ablation/sintel/representative_images/method_comparison/cave_4_frame_0022_method_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f04b13b701f1fe436401feb4a6642ee087034e --- /dev/null +++ b/ablation/sintel/representative_images/method_comparison/cave_4_frame_0022_method_comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47082c35ca27b37d24602349edd51b7f8fb16956623528f40ed8894946129247 +size 742285 diff --git a/ablation/sintel/representative_images/ours_representative_rgb_gt_pred_error.png b/ablation/sintel/representative_images/ours_representative_rgb_gt_pred_error.png new file mode 100644 index 0000000000000000000000000000000000000000..a05a6e519e50d5e7faff8b0123ae5b90a1ff14c9 --- /dev/null +++ b/ablation/sintel/representative_images/ours_representative_rgb_gt_pred_error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e49b4ef15ae699e0e8e0eb5f39382056ad22eab3817c48edade6e35bc789fe4 +size 2588747 diff --git a/ablation/sintel/source.json b/ablation/sintel/source.json new file mode 100644 index 0000000000000000000000000000000000000000..94e277ba96ded6b043c0cccbca4a020cb883598d --- /dev/null +++ b/ablation/sintel/source.json @@ -0,0 +1,4 @@ +{ + "run": "run_123850", + "source_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-38-50/sintel" +} diff --git a/ablation/toy/data/eval_experiment.json b/ablation/toy/data/eval_experiment.json new file mode 100644 index 0000000000000000000000000000000000000000..3f5043bd73d43da10a319146825c375b8d4ceb6f --- /dev/null +++ b/ablation/toy/data/eval_experiment.json @@ -0,0 +1,260 @@ +{ + "dataset": "toy", + "data_root": "/root/vepfs/Infinity/data/infinity_toy_data", + "partition": "val", + "pn": "1M", + "max_samples": 0, + "input_dir": "/root/vepfs/Infinity/data/infinity_toy_data/images", + "eval_set_dir": "", + "source_eval_set_dir": "", + "eval_image": "", + "methods": [ + "ours" + ], + "ours_checkpoints": [ + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth" + ], + "normal_tokenizer_ckpt": "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "visible_cuda_devices": [ + "0", + "1", + "2", + "3" + ], + "parallel_shards": "auto", + "compare_inference_time": true, + "timing_warmup": 3, + "timing_repeats": 5, + "ours_kv_cache_fast": false, + "inference_time_protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "normal_conventions": { + "canonical": "camera_left_up_backward", + "dataset_targets": { + "nyuv2": { + "name": "nyuv2_raw_right_forward_up", + "to_eval_perm": [ + 0, + 2, + 1 + ], + "to_eval_signs": [ + -1, + 1, + -1 + ], + "description": "NYUv2 parquet normals. Canonical mapping: (x, y, z) -> (-x, z, -y)." + }, + "hypersim": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "scannet": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "ibims": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + }, + "sintel": { + "name": "camera_left_up_backward", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Canonical metric convention: +x left, +y up, +z backward." + } + }, + "model_outputs": { + "ours": { + "name": "ours_model_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Infinity normal output already matches the exported eval convention." + }, + "marigold": { + "name": "marigold_normals_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + 1, + 1 + ], + "description": "Marigold normals_npy output. Canonical mapping: (x, y, z) -> (-x, y, z)." + }, + "geowizard": { + "name": "geowizard_normal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "GeoWizard normal_npy output already matches the canonical convention." + }, + "stablenormal": { + "name": "stablenormal_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "StableNormal output already matches the canonical convention." + }, + "lotusg": { + "name": "lotus_g_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-G output already matches the canonical convention." + }, + "lotusd": { + "name": "lotus_d_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Lotus-D output already matches the canonical convention." + }, + "dsine": { + "name": "dsine_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "DSINE output already matches the canonical convention." + }, + "metric3dv2": { + "name": "metric3d_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + -1, + -1, + -1 + ], + "description": "Metric3D v2 output. Canonical mapping: (x, y, z) -> (-x, -y, -z)." + }, + "omnidata_v2": { + "name": "omnidata_v2_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Omnidata V2 adapter output already matches the canonical convention." + }, + "marigold_e2eft": { + "name": "marigold_e2eft_xyz", + "to_eval_perm": [ + 0, + 1, + 2 + ], + "to_eval_signs": [ + 1, + 1, + 1 + ], + "description": "Marigold E2E-FT output already matches the canonical convention." + } + }, + "display_from_eval": { + "perm": [ + 0, + 1, + 2 + ], + "signs": [ + 1, + 1, + 1 + ], + "description": "Direct normal-map display: RGB = (canonical normal + 1) / 2." + } + } +} \ No newline at end of file diff --git a/ablation/toy/data/experiment_commands.json b/ablation/toy/data/experiment_commands.json new file mode 100644 index 0000000000000000000000000000000000000000..5d5b90295eb9ddf9c1ff42a97fecc1fdb14e8d0e --- /dev/null +++ b/ablation/toy/data/experiment_commands.json @@ -0,0 +1,112 @@ +{ + "ours": [ + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_input_shards/shard_00", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_shards/shard_00", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_input_shards/shard_01", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_shards/shard_01", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_input_shards/shard_02", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_shards/shard_02", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ], + [ + "/root/vepfs/Infinity/.venv/bin/python", + "tools/run_normal_estimation.py", + "--model-path", + "/root/vepfs/Infinity/outputs/normal_estimation/2026-06-11/04-33-27/checkpoints/step_0003500_val_ar_nyu_deg_103.7338.pth", + "--input-path", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_input_shards/shard_03", + "--output-dir", + "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/_shards/shard_03", + "--seed", + "0", + "--top-k", + "1", + "--top-p", + "0.0", + "--tau", + "1.0", + "--save-npy", + "--timing-warmup", + "3", + "--timing-repeats", + "5", + "--normal-vae-ckpt", + "/root/vepfs/Infinity/outputs/results/checkpoints/original_tokenizer_infinity_vae_d32reg.pth", + "--normal-vae-type", + "32" + ] + ] +} \ No newline at end of file diff --git a/ablation/toy/data/inference_time_summary.json b/ablation/toy/data/inference_time_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..1b4861b04978cd89a5eb6b408077e59592d694cd --- /dev/null +++ b/ablation/toy/data/inference_time_summary.json @@ -0,0 +1,21 @@ +{ + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "methods": { + "ours": { + "enabled": true, + "available": true, + "method": "ours", + "protocol": "Batch-size-1 per-image model inference latency measured inside each predictor with time.perf_counter and CUDA synchronization around the model-call section only. Each image uses unmeasured warmup iterations followed by measured repeats. Model loading, process startup, dataset export, image file I/O, metric computation, visualization writing, and result serialization are excluded.", + "timed_observations": 140, + "images": 28, + "mean_seconds": 1.828554026569639, + "median_seconds": 1.8316096141934395, + "std_seconds": 0.0386702388094181, + "ci95_seconds": 0.006405734104784912, + "min_seconds": 1.765766154974699, + "max_seconds": 1.9089088086038828, + "images_per_second": 0.5468802045056315, + "per_image_file": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy/ours/inference_times.json" + } + } +} \ No newline at end of file diff --git a/ablation/toy/data/metrics_summary.json b/ablation/toy/data/metrics_summary.json new file mode 100644 index 0000000000000000000000000000000000000000..54fb2b125613f5623d9134e7335dbe4a697e4b59 --- /dev/null +++ b/ablation/toy/data/metrics_summary.json @@ -0,0 +1,3 @@ +{ + "ours": {} +} \ No newline at end of file diff --git a/ablation/toy/source.json b/ablation/toy/source.json new file mode 100644 index 0000000000000000000000000000000000000000..332fdda9761919dd7195f700fcbdb3342c0f3fee --- /dev/null +++ b/ablation/toy/source.json @@ -0,0 +1,4 @@ +{ + "run": "run_121747", + "source_dir": "/root/vepfs/Infinity/outputs/normal_eval/2026-06-17/12-17-47/toy" +}