Views
No views yet
1flow -> tracks -> flow3r -> unfreeze
2 S1 S2 S3 S4 (this)Read this before using the checkpoint
The end-point-error metric never improved. Across Stage 3 (50,000 steps, frozen backbone) and Stage 4 (20,000 steps, unfrozen + geometry supervision),epe_i2jshows no improvement: Stage 3 median 9.259 px (n=170) vs Stage 4 median 10.610 px (n=58). Two-sided Mann-Whitney U on the full logged sets: z = -0.793, p = 0.428 — not distinguishable from noise. Every objective we optimize goes down; this metric does not follow.There is no held-out evaluation of any stage in this series. All numbers published here are training-minibatch values. Do not treat this checkpoint as a demonstrated improvement over Stage 3 without running your own benchmark.
| File | Purpose | Size | SHA256 |
|---|---|---|---|
anyflow_biomegacorr_stage4_unfreeze_camera_v3_20k.pt | Exact native checkpoint (model + optimizer + scaler) | 4,933,074,741 | eb7925ec15f762475cf64e8d63e7a894ae48e1ce797ffce73fa3d0544b941d06 |
anyflow_biomegacorr_stage4_unfreeze_camera_v3_20k_changed_backbone.pt | The 34 backbone tensors Stage 4 changed relative to Stage 3 | 100,778,101 | 66394c7f96db17e486673ce277b361bd04e8a75d8b867dc799f4e5bfe17b95b0 |
anyflow_biomegacorr_stage4_unfreeze_camera_v3_20k_head_only.pt | The 86 omega_corr_head.* tensors | 51,553,105 | a6bf0b6d6b1f2fd45baa3f1c4e3198f4b60fc85a149484b8fd5b9a7f354e4074 |
The head-only package is NOT sufficient for Stage 4, unlike Stages 1-3. Stage 4 also moved the backbone. To reconstruct Stage 4 weights without the 4.93 GB download, apply bothhead_onlyandchanged_backboneon top of a Stage 3 backbone. This is why thechanged_backboneartifact exists.
| Check | Stage 3 | Stage 4 |
|---|---|---|
| optimizer state entries | 86 | 122 |
| backbone tensors changed vs parent | 0 / 1,411 | 34 / 1,411 |
| head tensors changed vs parent | 86 / 86 | 86 / 86 |
unfreeze_last_blocks | 0 | 1 |
joint_vggt_loss | false | true |
frame_blocks /
inter_frame_blocks pair of the aggregator, as selected by
--unfreeze-last-blocks 1.| Field | Value |
|---|---|
| Step | 20,000 / 20,000 |
| Source DLC job | dlc1u1vz0qr6nw9h (SG, 1 worker x 8 GPU) |
| Job status | Succeeded |
| Init | clean-init from accepted Stage 3 (f9547ee8...eccc8e2), SHA256-gated |
| Manifest | unfreeze_train_pairs.jsonl, 1,725,685 rows, release camera_v3_20260721_142007 |
| Geometry label coverage | 91.96% of sampled rows carry full vggt_depth/extrinsics/intrinsics |
| Loss | L_corr + 5.0 * L_camera + 1.0 * L_depth |
| Non-finite watchdog | armed for the whole run, never fired; 0 non-finite values logged |
| segment | corr_loss | vggt_camera | vggt_depth_reg | vggt_depth_conf |
|---|---|---|---|---|
| 1-2,060 | 0.0229 | 0.1225 | 0.0770 | +0.0088 |
| 2,080-4,140 | 0.0177 | 0.0497 | 0.0498 | -0.0728 |
| 4,160-6,240 | 0.0171 | 0.0488 | 0.0462 | -0.1018 |
| 6,260-8,320 | 0.0160 | 0.0288 | 0.0478 | -0.1013 |
| 8,340-10,420 | 0.0178 | 0.0432 | 0.0343 | -0.1440 |
corr_loss was not crushed by the 5x camera weight — it holds at
0.016-0.018 throughout. That was the main risk of turning the joint loss on.vggt_camera fell 0.12 -> 0.03-0.05, essentially all within the first ~2,000
steps; the remaining 18,000 steps bought little on this term.vggt_depth_reg is the pure residual term and cannot be inflated by the model.
It fell monotonically 0.077 -> 0.034 across all five segments, and
vggt_depth_conf went monotonically negative in step with it. Depth genuinely
improved.vggt_geometry_loss.py uses the standard confidence-weighted depth objective
gamma * residual * conf - alpha * log(conf) (gamma=1.0, alpha=0.2). The
-alpha*log(conf) term is negative whenever confidence exceeds 1, so a negative
total loss is expected for this loss family and is not divergence. The
guard against a model simply inflating confidence to farm that term is the
residual term above, which fell independently.vggt_geometry = 0). That
7% matches the manifest's measured 8.04% geometry-free fraction.1e6e356cfce908c6f82b65e2451749be362f1d5cShiym/anyflow-biomegacorr-stage3-flow3r-camera-v3-50k, SHA256 f9547ee87291e1bb9aadf49051f352abe9da139ac5ec023bbe767e562eccc8e2scripts/run_bi_omegacorr_pipeline.py STAGES["unfreeze"] definition; no
hyperparameter was invented locally.1from huggingface_hub import hf_hub_download
2import torch
3
4path = hf_hub_download(
5 repo_id="Shiym/anyflow-biomegacorr-stage4-unfreeze-camera-v3-20k",
6 filename="anyflow_biomegacorr_stage4_unfreeze_camera_v3_20k.pt",
7)
8ckpt = torch.load(path, map_location="cpu")
9print(ckpt["step"], ckpt["training_config"]["unfreeze_last_blocks"])1head = torch.load(hf_hub_download(repo_id=REPO, filename=HEAD_ONLY), map_location="cpu")
2back = torch.load(hf_hub_download(repo_id=REPO, filename=CHANGED_BACKBONE), map_location="cpu")
3model.load_state_dict(head["model"], strict=False) # 86 head tensors
4model.load_state_dict(back["model"], strict=False) # 34 backbone tensors