4latte commited on
Commit
31ac821
·
1 Parent(s): eff4211

chipoint-2: street-view + general-photo arms, organized

Browse files
.gitattributes CHANGED
@@ -1,16 +1,9 @@
1
  *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
  *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
  *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
  *.h5 filter=lfs diff=lfs merge=lfs -text
9
  *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
  *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
  *.npy filter=lfs diff=lfs merge=lfs -text
15
  *.npz filter=lfs diff=lfs merge=lfs -text
16
  *.onnx filter=lfs diff=lfs merge=lfs -text
@@ -21,15 +14,14 @@
21
  *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
  *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
  *.tar filter=lfs diff=lfs merge=lfs -text
 
29
  *.tflite filter=lfs diff=lfs merge=lfs -text
30
  *.tgz filter=lfs diff=lfs merge=lfs -text
31
  *.wasm filter=lfs diff=lfs merge=lfs -text
32
  *.xz filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
1
  *.7z filter=lfs diff=lfs merge=lfs -text
 
2
  *.bin filter=lfs diff=lfs merge=lfs -text
 
3
  *.ckpt filter=lfs diff=lfs merge=lfs -text
 
 
4
  *.h5 filter=lfs diff=lfs merge=lfs -text
5
  *.joblib filter=lfs diff=lfs merge=lfs -text
 
 
6
  *.model filter=lfs diff=lfs merge=lfs -text
 
7
  *.npy filter=lfs diff=lfs merge=lfs -text
8
  *.npz filter=lfs diff=lfs merge=lfs -text
9
  *.onnx filter=lfs diff=lfs merge=lfs -text
 
14
  *.pkl filter=lfs diff=lfs merge=lfs -text
15
  *.pt filter=lfs diff=lfs merge=lfs -text
16
  *.pth filter=lfs diff=lfs merge=lfs -text
 
17
  *.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
18
  *.tar filter=lfs diff=lfs merge=lfs -text
19
+ *.tf filter=lfs diff=lfs merge=lfs -text
20
  *.tflite filter=lfs diff=lfs merge=lfs -text
21
  *.tgz filter=lfs diff=lfs merge=lfs -text
22
  *.wasm filter=lfs diff=lfs merge=lfs -text
23
  *.xz filter=lfs diff=lfs merge=lfs -text
24
  *.zip filter=lfs diff=lfs merge=lfs -text
25
  *.zst filter=lfs diff=lfs merge=lfs -text
26
+ *.txt filter=lfs diff=lfs merge=lfs -text
27
+ *.png filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+
3
+ license: mit
4
+
5
+ tags:
6
+
7
+ - image-geolocation
8
+
9
+ - street-view
10
+
11
+ - osv-5m
12
+
13
+ pipeline_tag: image-feature-extraction
14
+
15
+ datasets:
16
+
17
+ - osv5m/osv5m
18
+
19
+ - Jia-py/MP16-Pro
20
+
21
+ model-index:
22
+
23
+ - name: Chipoint v2
24
+
25
+ results:
26
+
27
+ - task:
28
+
29
+ type: image-feature-extraction
30
+
31
+ name: Image Geolocation
32
+
33
+ dataset:
34
+
35
+ type: osv5m
36
+
37
+ name: OSV-5M
38
+
39
+ metrics:
40
+
41
+ - name: Acc@1km
42
+
43
+ type: accuracy
44
+
45
+ value: 2.66
46
+
47
+ - name: Acc@25km
48
+
49
+ type: accuracy
50
+
51
+ value: 44.83
52
+
53
+ - name: Acc@200km
54
+
55
+ type: accuracy
56
+
57
+ value: 81.10
58
+
59
+ - name: Acc@750km
60
+
61
+ type: accuracy
62
+
63
+ value: 92.11
64
+
65
+ - name: Acc@2500km
66
+
67
+ type: accuracy
68
+
69
+ value: 96.82
70
+
71
+ - name: GeoScore
72
+
73
+ type: geoscore
74
+
75
+ value: 4485
76
+
77
+ - name: Median error (km)
78
+
79
+ type: distance-error
80
+
81
+ value: 32
82
+
83
+ - name: Mean error (km)
84
+
85
+ type: distance-error
86
+
87
+ value: 383
88
+
89
+ - task:
90
+
91
+ type: image-feature-extraction
92
+
93
+ name: Image Geolocation (cross-dataset generalization)
94
+
95
+ dataset:
96
+
97
+ type: im2gps3k
98
+
99
+ name: im2gps3k (street-view rerank)
100
+
101
+ metrics:
102
+
103
+ - name: Acc@25km
104
+
105
+ type: accuracy
106
+
107
+ value: 11.68
108
+
109
+ - name: GeoScore
110
+
111
+ type: geoscore
112
+
113
+ value: 2018.5
114
+
115
+ - name: Chipoint v2 (general-photo arm)
116
+
117
+ results:
118
+
119
+ - task:
120
+
121
+ type: image-feature-extraction
122
+
123
+ name: Image Geolocation
124
+
125
+ dataset:
126
+
127
+ type: im2gps3k
128
+
129
+ name: im2gps3k (photo)
130
+
131
+ metrics:
132
+
133
+ - name: Acc@1km
134
+
135
+ type: accuracy
136
+
137
+ value: 16.5
138
+
139
+ - name: Acc@25km
140
+
141
+ type: accuracy
142
+
143
+ value: 41.2
144
+
145
+ - name: Acc@200km
146
+
147
+ type: accuracy
148
+
149
+ value: 54.1
150
+
151
+ - name: Acc@750km
152
+
153
+ type: accuracy
154
+
155
+ value: 70.7
156
+
157
+ - name: Acc@2500km
158
+
159
+ type: accuracy
160
+
161
+ value: 84.8
162
+
163
+ - task:
164
+
165
+ type: image-feature-extraction
166
+
167
+ name: Image Geolocation
168
+
169
+ dataset:
170
+
171
+ type: yfcc4k
172
+
173
+ name: YFCC4k (photo)
174
+
175
+ metrics:
176
+
177
+ - name: Acc@1km
178
+
179
+ type: accuracy
180
+
181
+ value: 19.1
182
+
183
+ - name: Acc@25km
184
+
185
+ type: accuracy
186
+
187
+ value: 34.5
188
+
189
+ - name: Acc@200km
190
+
191
+ type: accuracy
192
+
193
+ value: 44.2
194
+
195
+ - name: Acc@750km
196
+
197
+ type: accuracy
198
+
199
+ value: 60.2
200
+
201
+ - name: Acc@2500km
202
+
203
+ type: accuracy
204
+
205
+ value: 76.0
206
+
207
+ ---
208
+
209
+
210
+
211
+ <p align="center"><img src="wordmark.svg" alt="chiikabu labs" width="340"></p>
212
+
213
+
214
+
215
+ <p align="center"><a href="https://chiikabu.cc">chiikabu.cc</a> &nbsp;·&nbsp; <a href="https://chiikabu.cc/discord">discord</a> &nbsp;·&nbsp; <a href="https://x.com/Chiikabu_Labs">twitter / x</a></p>
216
+
217
+
218
+
219
+ Chipoint v2 is a SOTA geolocation model that is open-weight and beats the
220
+
221
+ published frontier closed-weight model (Pinpoint, June 2026), its predecessor (Chipoint v1, July 2026),and all models
222
+
223
+ on the OSV-5M street-view benchmark. This repo hosts both arms:
224
+
225
+
226
+
227
+ - **street-view arm** — the 4.89M-frame OSV-5M gallery index, the
228
+
229
+ projection heads, and the 23-feature reranker pipeline
230
+
231
+ (`streetview_k512_joint.pt`, K512, per-threshold confidence head)
232
+
233
+ - **general-photo arm** — the unified 14.5M photo gallery (MP14 10.9M +
234
+
235
+ MP16-Pro 4.1M) and the 23-feature rerankers
236
+
237
+ (`photoarm_k768_thr.pt` / `photoarm_k768_sr.pt` / `photoarm_k512_thr.pt`)
238
+
239
+ - `router_osv_flickr.pt` routes queries between the two arms
240
+
241
+
242
+
243
+ ## Street-view arm
244
+
245
+
246
+
247
+ ![chipoint_v2_mean_error](images/chipoint_v2_mean_error.png)
248
+
249
+ ![chipoint_v2_geoscore](images/chipoint_v2_geoscore.png)
250
+
251
+
252
+
253
+ ### OSV-5M benchmark
254
+
255
+
256
+
257
+ OSV-5M test set (210,122 images). Acc@Xkm is the share of predictions
258
+
259
+ within X km. GeoScore is `5000·exp(-d/1492.7)`, higher is better.
260
+
261
+
262
+
263
+ | Model | @25km | @200km | @750km | @2500km | GeoScore | Mean err |
264
+
265
+ |---|---|---|---|---|---|---|
266
+
267
+ | OSV-5M Baseline | – | – | – | – | 3361 | 1814 km |
268
+
269
+ | GeoCLIP | 21.5 | 52.1 | 72.1 | – | – | – |
270
+
271
+ | GRE | 9.7 | 35.6 | 72.5 | 91.1 | – | 1192 km |
272
+
273
+ | LocDiff | 11.0 | 46.3 | 77.0 | 88.2 | – | – |
274
+
275
+ | RFM (S2S) | – | – | – | – | 3767 | 1069 km |
276
+
277
+ | HierLoc | – | – | – | – | 3963 | 861 km |
278
+
279
+ | Pinpoint (retrieval only) | 32.1 | 65.6 | 82.8 | 92.8 | 4035 | 784 km |
280
+
281
+ | Pinpoint (full) | 35.6 | 67.5 | 83.7 | 93.2 | 4114 | 743 km |
282
+
283
+ | Chipoint v1 | 37.63 | 70.56 | 84.94 | 93.36 | 4174 | 716 km |
284
+
285
+ | **Chipoint v2 · street (full pipeline)** | **44.8** | **81.1** | **92.1** | **96.8** | **4485** | **383 km** |
286
+
287
+
288
+
289
+ Chipoint v2's median error is **32 km** (v1: 51 km). The full-pipeline
290
+
291
+ line is retrieval (K=64 pool) + the K512 23-feature reranker with a
292
+
293
+ multiscale blend on the full 210,122-image test split. For reference, raw
294
+
295
+ retrieval without reranking scores 34.89 / 61.96 / 74.60 / 85.34,
296
+
297
+ GeoScore 3742, mean 1427 km.
298
+
299
+
300
+
301
+ ## General-photo arm
302
+
303
+
304
+
305
+ ![chipoint_v2_im2gps3k_acc1km](images/chipoint_v2_im2gps3k_acc1km.png)
306
+
307
+ ![chipoint_v2_yfcc4k_acc1km](images/chipoint_v2_yfcc4k_acc1km.png)
308
+
309
+
310
+
311
+
312
+
313
+ # Running the model
314
+
315
+
316
+
317
+ Instructions on how to run Chipoint v2 locally are in the RUN_GUIDE.md
318
+
319
+ file. Quick check:
320
+
321
+
322
+
323
+ ```bash
324
+
325
+ python run_chipoint.py streetview_k512_joint.pt
326
+
327
+ python run_chipoint.py photoarm_k768_thr.pt
328
+
329
+ ```
330
+
331
+
332
+
RUN_GUIDE.md ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # RUN GUIDE — chipoint-2 street-view + general-photo arms
2
+
3
+ ## Files
4
+ - `street_gallery/proj_head_gallery_512_{dinov3,so400m256,gopt}.npy` — street gallery
5
+ projection vectors (4.89M OSV-5M street frames, unit-norm 512-d fp16,
6
+ the street-arm index)
7
+ - `street_gallery/gallery_all_C_so400m256.npy` — street gallery coordinates (4.89M x 2)
8
+ - `weights/proj_head_{dinov3,so400m256,gopt}.pt` — projection heads (tower -> 512-d)
9
+ - `weights/streetview_k512_joint.pt` — street-view reranker arm (K512, 23 features)
10
+ - `photo_gallery/` — unified photo gallery, 14,541,898 rows (MP14 10.9M +
11
+ MP16-Pro 4.1M): `emb_*.npy` (512-d fp16 projected), `ll_*.npy` (lat/lon),
12
+ `ids_*.txt` (source ids, row-aligned), `manifest.json`
13
+ - `weights/photoarm_k768_thr.pt` / `weights/photoarm_k768_sr.pt` / `weights/photoarm_k512_thr.pt` —
14
+ general-photo reranker arms (23 features)
15
+ - `weights/ghead_merged_z4/z6/z8/z10.pt`, `weights/ghead_merged_reg.pt`,
16
+ `features/gallery_merged_cells.npz` — merged-head feature stack (required for the
17
+ 23-feature contract)
18
+ - `weights/router_osv_flickr.pt` — street/photo router (DINOv3 512-d -> logit;
19
+ >0 photo, else street)
20
+
21
+ ## Load
22
+ ```bash
23
+ python run_chipoint.py weights/streetview_k512_joint.pt # street arm: verify + schema
24
+ python run_chipoint.py weights/photoarm_k768_thr.pt # photo arm: verify + schema
25
+ ```
26
+ Checkpoint dict: `state` (SR), `thr_state` (ThrNet), `mu`/`sd`
27
+ (normalizers), `nf`, `names`, `thr_km`.
28
+
29
+ ## Feature contract (nf = 23)
30
+ 18 base features over the candidate pool (per-encoder sims, margins,
31
+ ranks, cross-encoder agreement, vote counts, spatial density) + 5
32
+ merged-head features from `ghead_merged_z4/z6/z8/z10/reg.pt` mapped by
33
+ `gallery_merged_cells.npz`. Feed order is `ckpt['names']`; standardize with
34
+ `(X - mu) / sd` before scoring.
35
+
36
+ ## Eval protocol (numbers in README)
37
+ Street arm: OSV-5M 4.89M gallery; 210,122-image sequence-stratified test
38
+ split. Retrieval: query tower embedding -> `proj_head_*` -> 512-d, top-K
39
+ against `street_gallery/proj_head_gallery_512_*` (same tower space), rerank with the
40
+ SR/ThrNet head on the 23-feature stack, threshold at 1/25/200/750/2500 km.
41
+
42
+ Photo arm: unified 14.5M gallery (`photo_gallery/emb_*.npy`, 512-d fp16);
43
+ im2gps3k (2997) / yfcc4k (4536) queries; blocklisted honest protocol
44
+ (184 exact-id leaks removed); 5-fold CV for the headline numbers.
features/gallery_merged_cells.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1dfa61b5ba9d7086d3db19c3347cb78987f69b892cda7583f91fc3b65c313465
3
+ size 698012606
images/chipoint_v2_geoscore.png ADDED

Git LFS Details

  • SHA256: f97fcd2b80652a952999f9b26dc7860d6e3000e5afb8308718247a10254aad9f
  • Pointer size: 131 Bytes
  • Size of remote file: 141 kB
images/chipoint_v2_im2gps3k_acc1km.png ADDED

Git LFS Details

  • SHA256: 22938b313d671ddf1f0cd5a4898487f64811881e3ee491793e212902e82ac901
  • Pointer size: 131 Bytes
  • Size of remote file: 151 kB
images/chipoint_v2_mean_error.png ADDED

Git LFS Details

  • SHA256: 25de4a06e8e873e4c5a7cb3512a21e7430f3c8f6a5eacd1efae04f9fc6d1317c
  • Pointer size: 131 Bytes
  • Size of remote file: 152 kB
images/chipoint_v2_yfcc4k_acc1km.png ADDED

Git LFS Details

  • SHA256: cf16b98a254869f534727380d80f4651eece444dc6e53c81db7c27a0755fd6db
  • Pointer size: 131 Bytes
  • Size of remote file: 140 kB
photo_gallery/emb_0000.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bb8804013eb2384ce5bab97f4277400343a8821c60e71f5f7b0e439f3ea2a8d1
3
+ size 4096000128
photo_gallery/emb_0001.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f2790668928699549702be892d08cff6c33caf4d2c634d888e20ae0360cdaead
3
+ size 4096000128
photo_gallery/emb_0002.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a51e73caef1114f6a1f0a9c073dee30578e5cf59a2bc1cda66bc6626be9a3e06
3
+ size 4096000128
photo_gallery/emb_0003.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:56950a8f56f81b04066a5daf6f9f1bcf5960590f9746f971f86a9e2194d97d9e
3
+ size 2602903680
photo_gallery/ids_0000.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:61530892aabfaffd95ef3dfc8a99aa6d0010099bdded896831769228d675eebd
3
+ size 43062052
photo_gallery/ids_0001.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8aee5d44d56204db6731a881eaa36b20aadef044ce34b569d77e8d046fa9bc0d
3
+ size 43999999
photo_gallery/ids_0002.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4e151132d6bca41523ffa06135c107cf5251c571068e06e888da85e7460a3e10
3
+ size 54533694
photo_gallery/ids_0003.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:827ec4ef79b65a835ea327671cfd1104ae7e5d3ef6ec3ec8d238daa262a1a86b
3
+ size 53096695
photo_gallery/ll_0000.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8eaebf80204bf1f698e18b44bf19d86afedc8f936fc334e756b9b8090515a431
3
+ size 32000128
photo_gallery/ll_0001.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:670d65bbb3c467a41e5ead391085377408086599fc72526450036e64dd7a5c77
3
+ size 32000128
photo_gallery/ll_0002.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:98573b23f6353114ae3f2798e2cd947e38de87df93fdb633deb7c8f773dcca0a
3
+ size 32000128
photo_gallery/ll_0003.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:70655380bfba7dd9dc6939685dee34cf90cbdfdee1a28f29e34a8cf631f9fdfe
3
+ size 20335312
photo_gallery/manifest.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "emb_0000.npy": 2048000000,
3
+ "emb_0001.npy": 2048000000,
4
+ "emb_0002.npy": 2048000000,
5
+ "emb_0003.npy": 1301451776,
6
+ "total_unique": 14541898,
7
+ "sources": [
8
+ "mp14_fetch",
9
+ "mp14_archive",
10
+ "mp16"
11
+ ],
12
+ "source_rows": [
13
+ 10382693,
14
+ 541642,
15
+ 4110903
16
+ ]
17
+ }
run_chipoint.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Load chipoint-2 reranker arms. Run: python run_chipoint.py <ckpt.pt>"""
2
+ import sys
3
+ import torch
4
+ import torch.nn as nn
5
+
6
+
7
+ class Blk(nn.Module):
8
+ def __init__(s, d, h, p=0.1):
9
+ super().__init__(); s.h = h; s.dk = d // h
10
+ s.n1 = nn.LayerNorm(d); s.n2 = nn.LayerNorm(d)
11
+ s.qkv = nn.Linear(d, 3 * d); s.proj = nn.Linear(d, d); s.dr = nn.Dropout(p)
12
+ s.ff = nn.Sequential(nn.Linear(d, 4 * d), nn.GELU(), nn.Dropout(p), nn.Linear(4 * d, d))
13
+
14
+ def forward(s, x):
15
+ B, K, D = x.shape
16
+ q, k, v = s.qkv(s.n1(x)).chunk(3, -1)
17
+ q, k, v = (t.view(B, K, s.h, s.dk).transpose(1, 2) for t in (q, k, v))
18
+ a = torch.nn.functional.scaled_dot_product_attention(q, k, v)
19
+ x = x + s.dr(s.proj(a.transpose(1, 2).reshape(B, K, D)))
20
+ return x + s.ff(s.n2(x))
21
+
22
+
23
+ class SR(nn.Module):
24
+ def __init__(s, nf, d=256, h=4, l=3, p=0.1):
25
+ super().__init__()
26
+ s.inp = nn.Sequential(nn.Linear(nf, d), nn.GELU(), nn.LayerNorm(d))
27
+ s.b = nn.ModuleList([Blk(d, h, p) for _ in range(l)])
28
+ s.n = nn.LayerNorm(d); s.o = nn.Linear(d, 1)
29
+
30
+ def forward(s, x):
31
+ h = s.inp(x)
32
+ for b in s.b:
33
+ h = b(h)
34
+ return s.o(s.n(h)).squeeze(-1)
35
+
36
+
37
+ class ThrNet(nn.Module):
38
+ def __init__(s, nf, d=256, h=4, l=3, p=0.1, n_thr=5, per_bin=False):
39
+ super().__init__()
40
+ s.inp = nn.Sequential(nn.Linear(nf, d), nn.GELU(), nn.LayerNorm(d))
41
+ s.b = nn.ModuleList([Blk(d, h, p) for _ in range(l)])
42
+ if per_bin:
43
+ s.ns = nn.ModuleList([nn.LayerNorm(d) for _ in range(n_thr)])
44
+ s.os = nn.ModuleList([nn.Linear(d, 1) for _ in range(n_thr)])
45
+ else:
46
+ s.n = nn.LayerNorm(d); s.o = nn.Linear(d, n_thr)
47
+
48
+ def forward(s, x):
49
+ h = s.inp(x)
50
+ for b in s.b:
51
+ h = b(h)
52
+ if hasattr(s, 'ns'):
53
+ return torch.cat([o(n(h)) for n, o in zip(s.ns, s.os)], -1)
54
+ return s.o(s.n(h))
55
+
56
+
57
+ def main():
58
+ ck = torch.load(sys.argv[1], map_location='cpu', weights_only=False)
59
+ nf = ck['nf']
60
+ net = SR(nf)
61
+ net.load_state_dict(ck['state'])
62
+ net.eval()
63
+ print('nf', nf, '| names', len(ck['names']), '| mu/sd', tuple(ck['mu'].shape))
64
+ if 'thr_state' in ck:
65
+ per_bin = any(k.startswith('ns.') for k in ck['thr_state'])
66
+ thr = ThrNet(nf, per_bin=per_bin)
67
+ thr.load_state_dict(ck['thr_state'])
68
+ thr.eval()
69
+ print('thr_km', ck['thr_km'], '| per_bin', per_bin)
70
+ print('OK — feed (Nq,K,nf) features standardized by ck[mu]/ck[sd]')
71
+
72
+
73
+ if __name__ == '__main__':
74
+ main()
street_gallery/gallery_all_C_so400m256.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:57546309fb3fdc7beaaf8ede63190aef10199da0ca2726a528c3e09f65326b11
3
+ size 39157600
street_gallery/proj_head_gallery_512_dinov3.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3527fccb1f1ad6961254105318ad61fdf60a5b935e6e23ecd9e82d658e784552
3
+ size 5012156544
street_gallery/proj_head_gallery_512_gopt.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0b46f74e298bda45af3485c727c46e771d67356e2b9afe80fdcb56b3bb423dfd
3
+ size 5012156544
street_gallery/proj_head_gallery_512_so400m256.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:30c7af4fb7c7afce39bd0279e15a33c1546d96878f56bb87c5350e8dd48e6890
3
+ size 5012156544
weights/ghead_merged_reg.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fd3cc14efb34fd5bd04bfb55bad70740ed353c29c05381c9d4b8e1b0ad49fe06
3
+ size 2129483
weights/ghead_merged_z10.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:081524b93a69205fdde5851dfa0cc5b2e521e84bc34bca6e171cec044c0cb0d3
3
+ size 209711307
weights/ghead_merged_z4.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ceb1bbdfb320ed8e423c02c78bf648d2bd7fb6132f79f5bb990427f9c56eeb95
3
+ size 3166781
weights/ghead_merged_z6.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3458bb052ee4853e04e3d7b67f1c46b57796b4fcad576c9ea126c273253b798d
3
+ size 18906685
weights/ghead_merged_z8.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:119c69def5330b516ccad9bcd89fe5836e723eaacd883e5ec856f31e1e336ee5
3
+ size 270794237
weights/photoarm_k512_thr.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:795ee161e2fe6a11875e64af9879e20a07a6f53c3fc38950a618f2cd7c56db11
3
+ size 19047925
weights/photoarm_k768_sr.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7ab63b83bc9c906e57cb168dc29ec0ec93138df3366593eef02473e7cc524ae8
3
+ size 9523129
weights/photoarm_k768_thr.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4a8266ab2c8580f98e19d301484f433e82df033a7ab066a7ac9c07c3bfd43ca3
3
+ size 19061275
weights/proj_head_dinov3.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e88528e1f8d1a06669a36764db69d1dff6c14c0a62eb9a37ce5c76c282f62daa
3
+ size 139420540
weights/proj_head_gopt.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:36a399124ead993f00444b530a2e9b5526868fe2655d16cad640a6ab6ad8c814
3
+ size 110797670
weights/proj_head_so400m256.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:41dfc4f87bfa19edcc8664123869bb782ca0dcfffbe7153129b2444efe48d1b4
3
+ size 109224861
weights/router_osv_flickr.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ea57124d833076d7562f1d69179f9ca346b680c98bce82b8ac4a9f397c0dcbf7
3
+ size 271617
weights/streetview_k512_joint.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:04952d4d025e3a4ea081871af5066e2345821aa9661ca636deb1bcb033c3930f
3
+ size 19047925
wordmark.svg ADDED