phanerozoic commited on
Commit
68b7a58
·
verified ·
1 Parent(s): 2427a15

Argus-3D: discovered class-agnostic 3D detection head on EUPE-ViT-B

Browse files
README.md CHANGED
@@ -23,13 +23,13 @@ The detector pairs a non-linear (or linear) per-patch foreground head with featu
23
 
24
  ```
25
  Per-frame:
26
- Image (768x768)
27
  -> EUPE-ViT-B (frozen, reused from phanerozoic/argus)
28
- -> patch tokens (2304, 768) on a 48x48 grid
29
  -> instance head: 2-layer MLP (default) or linear ridge -> per-patch foreground score
30
  depth head: ridge over 768 dims -> per-patch metric depth (m)
31
  k-means modes: 8 cluster centers (20-scene) -> per-patch object-type assignment
32
- -> threshold instance score, upsample mask to 768x768, connected components
33
  -> for each component:
34
  unproject to 3D using depth + K
35
  DBSCAN-split for instance separation
@@ -48,8 +48,8 @@ Multi-view (per scene):
48
 
49
  | Component | Parameters | Discovery / training |
50
  |---|---|---|
51
- | EUPE-ViT-B backbone (frozen, reused) | not part of this head | reused from phanerozoic/argus |
52
- | Instance head — MLP (default) | ~200 K | 2-layer MLP (768 → 256 → 1, ReLU + dropout 0.5), 30 epochs AdamW BCE-with-logits on 4-scene mixed split |
53
  | Instance head — linear ridge (fallback) | 769 floats + threshold | random K=20 subset search + hard-neg mining, AUC selection |
54
  | Depth head (ridge over 768 dims) | 769 floats | random K=20 subset search, RMSE selection |
55
  | K-means cluster centers | 8 × 768 floats | MiniBatchKMeans on foreground patches across 20 CA-1M val scenes |
@@ -94,17 +94,17 @@ CA-1M val sequence `ca1m-val-45662921`. Class-agnostic per-scene 3D IoU after mu
94
 
95
  ### Headline result
96
 
97
- 3D-IoU multi-view fusion + 4-scene MLP head + 20-scene size priors:
98
 
99
- | Metric | Linear ridge (v0) + position fusion | MLP + position fusion | MLP + IoU fusion + refine (default) |
100
  |---|---|---|---|
101
- | Mean 3D IoU | 0.063 | 0.076 | **0.177** |
102
- | Median 3D IoU | — | 0.019 | **0.146** |
103
- | Fraction > 0.1 IoU | 27.8 % | 25.6 % | **60.9 %** |
104
- | Fraction > 0.25 IoU | 6.9 % | 11.5 % | **34.8 %** |
105
- | Fraction > 0.5 IoU | 0.0 % | 1.3 % | **4.3 %** |
106
- | Recall (matched / GT) | 19.8 % | 24.4 % | 18.0 % |
107
- | Fused boxes per scene | 72 | 78 | 46 |
108
 
109
  Default config: 3D-IoU fusion at threshold 0.4, min 4 observations per cluster, weight floor at the 80th percentile of nonzero cluster weights, plus iterative refinement (drop observations with IoU < 0.4 to the cluster consensus, re-fuse, up to 3 iterations). Looser fusion thresholds trade per-box quality for recall:
110
 
 
23
 
24
  ```
25
  Per-frame:
26
+ Image (1024x1024)
27
  -> EUPE-ViT-B (frozen, reused from phanerozoic/argus)
28
+ -> patch tokens (4096, 768) on a 64x64 grid
29
  -> instance head: 2-layer MLP (default) or linear ridge -> per-patch foreground score
30
  depth head: ridge over 768 dims -> per-patch metric depth (m)
31
  k-means modes: 8 cluster centers (20-scene) -> per-patch object-type assignment
32
+ -> threshold instance score, upsample mask to 1024x1024, connected components
33
  -> for each component:
34
  unproject to 3D using depth + K
35
  DBSCAN-split for instance separation
 
48
 
49
  | Component | Parameters | Discovery / training |
50
  |---|---|---|
51
+ | EUPE-ViT-B backbone (frozen, reused) | not part of this head | reused from phanerozoic/argus, run at 1024x1024 input (64x64 patch grid) |
52
+ | Instance head — MLP (default) | ~200 K | 2-layer MLP (768 → 256 → 1, ReLU + dropout 0.5), 30 epochs AdamW BCE-with-logits on 20-scene patch split at 1024 input |
53
  | Instance head — linear ridge (fallback) | 769 floats + threshold | random K=20 subset search + hard-neg mining, AUC selection |
54
  | Depth head (ridge over 768 dims) | 769 floats | random K=20 subset search, RMSE selection |
55
  | K-means cluster centers | 8 × 768 floats | MiniBatchKMeans on foreground patches across 20 CA-1M val scenes |
 
94
 
95
  ### Headline result
96
 
97
+ 1024-input MLP head + 20-scene size priors + 3D-IoU multi-view fusion + iterative refinement:
98
 
99
+ | Metric | Linear ridge (v0) + 768 + position fusion | MLP + 768 + IoU fusion | MLP + 1024 + IoU fusion (default) |
100
  |---|---|---|---|
101
+ | Mean 3D IoU | 0.063 | 0.177 | **0.216** |
102
+ | Median 3D IoU | — | 0.146 | **0.175** |
103
+ | Fraction > 0.1 IoU | 27.8 % | 60.9 % | **68.2 %** |
104
+ | Fraction > 0.25 IoU | 6.9 % | 34.8 % | **36.4 %** |
105
+ | Fraction > 0.5 IoU | 0.0 % | 4.3 % | **9.1 %** |
106
+ | Recall (matched / GT) | 19.8 % | 18.0 % | 17.5 % |
107
+ | Fused boxes per scene | 72 | 46 | 44 |
108
 
109
  Default config: 3D-IoU fusion at threshold 0.4, min 4 observations per cluster, weight floor at the 80th percentile of nonzero cluster weights, plus iterative refinement (drop observations with IoU < 0.4 to the cluster consensus, re-fuse, up to 3 iterations). Looser fusion thresholds trade per-box quality for recall:
110
 
config.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
- "input_res": 768,
3
- "patch_grid": 48,
4
  "patch_size": 16,
5
  "feature_dim": 768,
6
  "prior_weight": 80.0,
@@ -9,5 +9,10 @@
9
  0.1,
10
  10.0
11
  ],
12
- "fg_threshold": 0.31326109170913696
 
 
 
 
 
13
  }
 
1
  {
2
+ "input_res": 1024,
3
+ "patch_grid": 64,
4
  "patch_size": 16,
5
  "feature_dim": 768,
6
  "prior_weight": 80.0,
 
9
  0.1,
10
  10.0
11
  ],
12
+ "fg_threshold": 0.569353461265564,
13
+ "fusion_iou_thresh": 0.4,
14
+ "fusion_min_obs": 4,
15
+ "fusion_weight_pct": 80,
16
+ "fusion_refine_iou": 0.4,
17
+ "fusion_refine_iters": 3
18
  }
instance_head_mlp.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:25da02eb73105206bc26d313481fad4b6fe9686615b0696dcbc020e0fff10c10
3
  size 788780
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f8531239d67617aebd377c0cbdbb2dfd6ed59d690bfcb25cbf1ae11c2996a2c5
3
  size 788780
instance_head_mlp_meta.json CHANGED
@@ -1,10 +1,35 @@
1
  {
2
- "method": "2-layer MLP (in-distribution)",
3
  "in_dim": 768,
4
  "hidden": 256,
5
  "dropout": 0.5,
6
  "epochs": 30,
7
- "auc": 0.9795503411078317,
8
- "best_f1": 0.815474970975893,
9
- "best_threshold": 1.1412171125411987
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  }
 
1
  {
2
+ "method": "2-layer MLP",
3
  "in_dim": 768,
4
  "hidden": 256,
5
  "dropout": 0.5,
6
  "epochs": 30,
7
+ "train_scenes": [
8
+ "42446540",
9
+ "42897501",
10
+ "42897521",
11
+ "42897538",
12
+ "42897545",
13
+ "42897552",
14
+ "42897561",
15
+ "42898486",
16
+ "45260903",
17
+ "45261133",
18
+ "45261143",
19
+ "45261179",
20
+ "45261587",
21
+ "45261615",
22
+ "45662921",
23
+ "45663113",
24
+ "47115543",
25
+ "47204559",
26
+ "47331068",
27
+ "47331262"
28
+ ],
29
+ "val_scenes": [
30
+ "45662921"
31
+ ],
32
+ "auc": 0.9806332802845262,
33
+ "best_f1": 0.8387126179329744,
34
+ "best_threshold": 0.569353461265564
35
  }
size_priors.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:ba90168daf451ea21bf5009df47bd5353bb455b160f6c2b718ba33ce1f97fd61
3
  size 24832
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:047ccb36af9d535b252ad66d0370cd37bc24ec7f0a78aadaab4f9cd325b94b24
3
  size 24832