siddsuresh97 commited on
Commit
d6c8a4f
·
0 Parent(s):

Initial commit: ICLR 2026 Representational Alignment Challenge

Browse files

Public leaderboard for the Re-Align hackathon. Evaluation backend
lives in a separate private repository.

Assisted by Claude

Files changed (49) hide show
  1. .gitattributes +35 -0
  2. .gitignore +17 -0
  3. .pre-commit-config.yaml +53 -0
  4. AGENTS.md +92 -0
  5. Makefile +13 -0
  6. README.md +184 -0
  7. app.py +573 -0
  8. cka-data/submissions.json +72 -0
  9. condaenv.4_q_6r3k.requirements.txt +1 -0
  10. configs/blue_team_model_registry.json +2963 -0
  11. configs/dataset_roots.example.json +4 -0
  12. configs/one_model_per_family.json +143 -0
  13. configs/red_team_stimuli_catalog.jsonl +0 -0
  14. configs/red_team_stimuli_catalog_1000.jsonl +1000 -0
  15. docs/evaluation_contract.md +140 -0
  16. docs/storage_layout.md +71 -0
  17. environment.yml +9 -0
  18. hackathon-data/blue_submissions.json +200 -0
  19. hackathon-data/red_submissions.json +362 -0
  20. pyproject.toml +13 -0
  21. requirements.txt +18 -0
  22. scripts/blue_family_smoke_test.py +100 -0
  23. scripts/blue_team_submit.py +107 -0
  24. scripts/generate_blue_registry.py +225 -0
  25. scripts/pipeline_smoke_test.py +70 -0
  26. scripts/red_team_smoke_test.py +143 -0
  27. scripts/run_local.sh +20 -0
  28. scripts/smoke_test_registry.py +230 -0
  29. scripts/smoke_test_submission.py +266 -0
  30. scripts/submit_blue_hf_dataset.py +36 -0
  31. scripts/submit_red_hf_dataset.py +36 -0
  32. scripts/validate_submission.py +71 -0
  33. scripts/verify_cka.py +55 -0
  34. slurm-verify-8056978.out +2 -0
  35. src/about.py +153 -0
  36. src/cka/__init__.py +11 -0
  37. src/cka/compute.py +75 -0
  38. src/cka/embeddings.py +29 -0
  39. src/cka/storage.py +46 -0
  40. src/display/css_html_js.py +243 -0
  41. src/display/formatting.py +27 -0
  42. src/hackathon/__init__.py +17 -0
  43. src/hackathon/data.py +121 -0
  44. src/hackathon/modal_client.py +155 -0
  45. src/hackathon/scoring.py +136 -0
  46. src/hackathon/storage.py +151 -0
  47. src/hackathon/validation.py +232 -0
  48. test_submissions/blue_submission.jsonl +2 -0
  49. test_submissions/red_submission.jsonl +8 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
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
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ scale-hf-logo.png filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ auto_evals/
2
+ venv/
3
+ __pycache__/
4
+ .env
5
+ .ipynb_checkpoints
6
+ *ipynb
7
+ .vscode/
8
+ .cursor/
9
+
10
+ eval-queue/
11
+ eval-results/
12
+ eval-queue-bk/
13
+ eval-results-bk/
14
+ logs/
15
+ activations/
16
+
17
+ .env
.pre-commit-config.yaml ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ default_language_version:
16
+ python: python3
17
+
18
+ ci:
19
+ autofix_prs: true
20
+ autoupdate_commit_msg: '[pre-commit.ci] pre-commit suggestions'
21
+ autoupdate_schedule: quarterly
22
+
23
+ repos:
24
+ - repo: https://github.com/pre-commit/pre-commit-hooks
25
+ rev: v4.3.0
26
+ hooks:
27
+ - id: check-yaml
28
+ - id: check-case-conflict
29
+ - id: detect-private-key
30
+ - id: check-added-large-files
31
+ args: ['--maxkb=1000']
32
+ - id: requirements-txt-fixer
33
+ - id: end-of-file-fixer
34
+ - id: trailing-whitespace
35
+
36
+ - repo: https://github.com/PyCQA/isort
37
+ rev: 5.12.0
38
+ hooks:
39
+ - id: isort
40
+ name: Format imports
41
+
42
+ - repo: https://github.com/psf/black
43
+ rev: 22.12.0
44
+ hooks:
45
+ - id: black
46
+ name: Format code
47
+ additional_dependencies: ['click==8.0.2']
48
+
49
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
50
+ # Ruff version.
51
+ rev: 'v0.0.267'
52
+ hooks:
53
+ - id: ruff
AGENTS.md ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AGENTS.md - Engaging (OpenMind/BCS) Cluster Guide (Project-Agnostic)
2
+
3
+ This repo runs on MIT Engaging (EO) BCS resources. Use this file as the source of truth for job submission, storage, and path hygiene.
4
+
5
+ ## Login nodes and OS
6
+ - Rocky 8 login nodes for BCS and MIT Rocky 8 partitions: `orcd-login001`..`orcd-login004` (or OOD Engaging Shell Access).
7
+ - CentOS 7 login nodes only for `sched_mit_hill`: `orcd-vlogin001`..`orcd-vlogin004` (OOD Engaging Legacy Shell).
8
+ - Do not run training or large jobs on login nodes; submit everything to Slurm.
9
+ - Do not use interactive nodes; use `sbatch` for all compute, installs, and env verification.
10
+
11
+ ## BCS GPU partitions (Rocky 8)
12
+ - `ou_bcs_high`: 4h walltime, up to 1 GPU, 32 CPUs, 1 node; reserved for interactive use only.
13
+ - `ou_bcs_normal`: 12h walltime, up to 8 GPUs, 256 CPUs, 2 nodes; use for all batch jobs.
14
+ - `ou_bcs_low`: 12h walltime, up to 16 GPUs, 512 CPUs, 4 nodes; preemptible, require checkpointing.
15
+ - No Slurm account string is required for `ou_bcs_*` partitions; omit `#SBATCH --account`.
16
+ - Always use `ou_bcs_normal` for installs, experiments, and verification jobs.
17
+
18
+ ## MIT partitions (Rocky 8, optional overflow)
19
+ - `mit_normal`, `mit_normal_gpu`, `mit_preemptible` (Rocky 8 only).
20
+ - Use `sched_mit_hill` only from CentOS 7 login nodes.
21
+
22
+ ## Storage layout (summary)
23
+ - `/home/<user>`: small files, source code, 200 GB, snapshot backup.
24
+ - `/home/<user>/orcd/pool`: medium I/O, 1 TB, no backup.
25
+ - `/home/<user>/orcd/scratch`: fast scratch, 1 TB, no backup.
26
+ - `/orcd/data/<PI>/001`: shared lab storage, medium I/O, no backup.
27
+ - `/orcd/scratch/bcs/001` and `/orcd/scratch/bcs/002`: shared fast scratch, no backup.
28
+ - `/orcd/compute/bcs/001` and `/orcd/datasets/001`: public datasets (read-only).
29
+
30
+ ## Path hygiene (important)
31
+ Avoid hard-coded absolute paths. Centralize via environment variables so scripts are portable across nodes.
32
+
33
+ Recommended pattern:
34
+ - `PROJECT_ROOT=/orcd/data/<PI>/001/<user>/<project>`
35
+ - `DATA_ROOT=/orcd/data/<PI>/001/<user>/datasets`
36
+ - `OUTPUT_ROOT=/orcd/scratch/bcs/001/<user>/<project>`
37
+ - `HF_HOME=/orcd/scratch/bcs/001/<user>/.cache/huggingface`
38
+ - `TORCH_HOME=/orcd/scratch/bcs/001/<user>/.cache/torch`
39
+
40
+ ## Slurm template (BCS)
41
+ ```bash
42
+ #!/bin/bash
43
+ #SBATCH --job-name=experiment
44
+ #SBATCH --partition=ou_bcs_normal
45
+ #SBATCH --time=12:00:00
46
+ #SBATCH --gpus=1
47
+ #SBATCH --cpus-per-task=8
48
+ #SBATCH --mem=32G
49
+ #SBATCH --output=/orcd/data/<PI>/001/<user>/<project>/logs/%x_%j.out
50
+ #SBATCH --error=/orcd/data/<PI>/001/<user>/<project>/logs/%x_%j.err
51
+
52
+ set -euo pipefail
53
+ set +u
54
+ source "$HOME/miniconda3/etc/profile.d/conda.sh"
55
+ set -u
56
+ conda activate <env-name>
57
+
58
+ export HF_HOME=/orcd/scratch/bcs/001/$USER/.cache/huggingface
59
+ export TORCH_HOME=/orcd/scratch/bcs/001/$USER/.cache/torch
60
+ export OUTPUT_ROOT=/orcd/scratch/bcs/001/$USER/<project>
61
+
62
+ python -u <script>.py --out_dir "${OUTPUT_ROOT}/runs/run_${SLURM_JOB_ID}"
63
+ ```
64
+
65
+ For sweeps, use arrays and include `%A_%a` in log paths:
66
+ ```bash
67
+ #SBATCH --array=0-65%8
68
+ ```
69
+
70
+ ## Common Slurm commands
71
+ - `sbatch <script.sh>`
72
+ - `squeue -u $USER`
73
+ - `sacct -j <job_id> --format=JobID,State,Elapsed,MaxRSS,AllocTRES`
74
+ - `scontrol show job <job_id>`
75
+ - `scancel <job_id>`
76
+
77
+ ## Checkpointing and preemption
78
+ - Jobs on `ou_bcs_low` can be preempted. Always enable checkpoint writes and resume logic.
79
+ - Store checkpoints and final outputs on `/orcd/data/<PI>/001` (longer term) or `/home/<user>/orcd/pool`.
80
+ - Use `/orcd/scratch/bcs/001` or `/orcd/scratch/bcs/002` for intermediate outputs and large I/O.
81
+
82
+ ## Launch tips
83
+ - Prefer `ou_bcs_normal` for installs and experiments; `ou_bcs_high` is often limited to one concurrent job.
84
+ - Do large conda installs on compute nodes (Slurm job), not on login nodes.
85
+ - Avoid `source ~/.bashrc` when using `set -u` (it can error on unbound vars); source `conda.sh` directly.
86
+ - Use `/bin/mkdir -p` in batch scripts to avoid shell aliases or unexpected failures.
87
+ - Set `CONDA_PKGS_DIRS=/orcd/scratch/bcs/001/$USER/.conda/pkgs` to speed installs and avoid home quota.
88
+ - Chain setup → run with `sbatch --dependency=afterok:<jobid> <script.sh>` to ensure env is ready.
89
+
90
+ ## Local environment check
91
+ - Login nodes vary; check with `hostname`.
92
+ - Default base Python does not include GPU libraries; verify with `python -c "import torch"` via a short `sbatch` job after activating your env.
Makefile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .PHONY: style format
2
+
3
+
4
+ style:
5
+ python -m black --line-length 119 .
6
+ python -m isort .
7
+ ruff check --fix .
8
+
9
+
10
+ quality:
11
+ python -m black --check --line-length 119 .
12
+ python -m isort --check-only .
13
+ ruff check .
README.md ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Re-Align Hackathon Leaderboard
3
+ emoji: 🥇
4
+ colorFrom: green
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ app_file: app.py
8
+ pinned: true
9
+ license: apache-2.0
10
+ short_description: Submit Blue/Red hackathon JSON and rank by alignment scores.
11
+ sdk_version: 5.43.1
12
+ tags:
13
+ - leaderboard
14
+ ---
15
+
16
+ # Overview
17
+
18
+ This app runs the Re-Align Hackathon leaderboards. Blue Team submissions select model sets
19
+ and are ranked by mean pairwise CKA. Red Team submissions select stimuli and are ranked by
20
+ divergence (1 - avg CKA) computed across cached dummy embeddings.
21
+
22
+ # Local run
23
+
24
+ ```bash
25
+ conda env create -f environment.yml
26
+ conda activate iclr2026-challenge
27
+ python app.py
28
+ ```
29
+
30
+ # Submission formats
31
+
32
+ ## Blue Team JSON
33
+
34
+ ```json
35
+ {
36
+ "models": [
37
+ {
38
+ "model_name": "vit_base_patch16_224",
39
+ "source": "dummy_cache",
40
+ "model_parameters": null
41
+ },
42
+ {
43
+ "model_name": "resnet50",
44
+ "source": "dummy_cache",
45
+ "model_parameters": null
46
+ }
47
+ ]
48
+ }
49
+ ```
50
+
51
+ ## Red Team JSON
52
+
53
+ ```json
54
+ {
55
+ "differentiating_images": [
56
+ {
57
+ "dataset_name": "cifar100",
58
+ "image_identifier": "test/bear/image_0007.png"
59
+ },
60
+ {
61
+ "dataset_name": "imagenet1k",
62
+ "image_identifier": "val/n03445777/ILSVRC2012_val_00003572.JPEG"
63
+ }
64
+ ]
65
+ }
66
+ ```
67
+
68
+ # Hugging Face datasets (private only)
69
+
70
+ You can optionally host the model/stimulus selections as a Hugging Face Dataset and paste the
71
+ dataset link into the app. These datasets must be private (do not publish public submissions).
72
+
73
+ ## Blue Team dataset
74
+
75
+ Expected column:
76
+ - `model_names`: list of model name strings
77
+
78
+ Example dataset row:
79
+ ```json
80
+ {
81
+ "model_names": [
82
+ "vit_base_patch16_224",
83
+ "resnet50",
84
+ "convnext_base"
85
+ ]
86
+ }
87
+ ```
88
+
89
+ Create the dataset (example with `datasets` + `huggingface_hub`):
90
+ ```bash
91
+ pip install datasets huggingface_hub
92
+ ```
93
+ ```py
94
+ from datasets import Dataset
95
+ from huggingface_hub import login
96
+
97
+ login(token="hf_...") # optional if you already ran `huggingface-cli login`
98
+
99
+ rows = [
100
+ {"model_names": ["vit_base_patch16_224", "resnet50", "convnext_base"]},
101
+ ]
102
+ ds = Dataset.from_list(rows)
103
+ ds.push_to_hub("your-username/blue-team-submission", private=True)
104
+ ```
105
+
106
+ Paste the dataset link into the app:
107
+ ```
108
+ https://huggingface.co/datasets/your-username/blue-team-submission
109
+ ```
110
+
111
+ ## Red Team dataset
112
+
113
+ Expected column:
114
+ - `stimulus_id`: list of stimulus key strings (the keys shown in the app dropdown)
115
+
116
+ Example dataset row:
117
+ ```json
118
+ {
119
+ "stimulus_id": [
120
+ "cifar100:test/bear/image_0007.png",
121
+ "imagenet1k:val/n03445777/ILSVRC2012_val_00003572.JPEG"
122
+ ]
123
+ }
124
+ ```
125
+
126
+ Create the dataset:
127
+ ```bash
128
+ pip install datasets huggingface_hub
129
+ ```
130
+ ```py
131
+ from datasets import Dataset
132
+ from huggingface_hub import login
133
+
134
+ login(token="hf_...") # optional if you already ran `huggingface-cli login`
135
+
136
+ rows = [
137
+ {
138
+ "stimulus_id": [
139
+ "cifar100:test/bear/image_0007.png",
140
+ "imagenet1k:val/n03445777/ILSVRC2012_val_00003572.JPEG",
141
+ ]
142
+ },
143
+ ]
144
+ ds = Dataset.from_list(rows)
145
+ ds.push_to_hub("your-username/red-team-submission", private=True)
146
+ ```
147
+
148
+ Paste the dataset link into the app:
149
+ ```
150
+ https://huggingface.co/datasets/your-username/red-team-submission
151
+ ```
152
+
153
+ ## Access token (for private datasets)
154
+
155
+ 1. Go to your Hugging Face account settings: `https://huggingface.co/settings/tokens`
156
+ 2. Create a new token with the `Read` scope.
157
+ 3. Copy the token (it starts with `hf_...`).
158
+ 4. Paste it into the "HuggingFace access token (optional)" textbox in the app.
159
+
160
+ # Where submissions are stored
161
+
162
+ Submissions are stored locally in:
163
+
164
+ - `hackathon-data/blue_submissions.json`
165
+ - `hackathon-data/red_submissions.json`
166
+
167
+ You can override storage paths with:
168
+
169
+ - `HACKATHON_DATA_DIR=/your/path`
170
+ - `HACKATHON_BLUE_DATA_PATH=/your/path/blue.json`
171
+ - `HACKATHON_RED_DATA_PATH=/your/path/red.json`
172
+
173
+ # Cached embeddings
174
+
175
+ Dummy cached embeddings live in `src/hackathon/data.py`. Replace `get_dummy_model_embeddings()` and
176
+ `list_dummy_stimuli()` with real data when it is ready.
177
+
178
+ See `docs/evaluation_contract.md` for the draft contract and model registry spec for real
179
+ forward-pass evaluation.
180
+
181
+ For storage layout and path hygiene conventions, see `docs/storage_layout.md`.
182
+
183
+ To enable Modal-backed scoring, set `HACKATHON_MODAL_ENABLE=true` and provide
184
+ `HACKATHON_MODEL_REGISTRY` plus `HACKATHON_STIMULI_CATALOG`.
app.py ADDED
@@ -0,0 +1,573 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ load_dotenv()
3
+
4
+ import json
5
+ import os
6
+
7
+ from datetime import datetime, timezone
8
+ from uuid import uuid4
9
+
10
+ import gradio as gr
11
+ import pandas as pd
12
+ from datasets import load_dataset
13
+
14
+ from src.about import BLUE_SUBMISSION_TEXT, GETTING_STARTED_TEXT, INTRODUCTION_TEXT, RED_SUBMISSION_TEXT, TITLE
15
+ from src.display.css_html_js import custom_css
16
+ from src.display.formatting import styled_error, styled_message
17
+ from src.hackathon import (
18
+ append_submission,
19
+ list_dummy_models,
20
+ list_dummy_stimuli,
21
+ load_submissions,
22
+ score_blue_with_pairwise,
23
+ score_red_with_pairwise,
24
+ stimulus_key,
25
+ )
26
+ from src.hackathon.modal_client import fetch_volume_submissions, is_modal_enabled
27
+ from src.hackathon.validation import (
28
+ MODEL_REGISTRY_ENV,
29
+ BLUE_MODEL_REGISTRY_ENV,
30
+ BLUE_TEAM_REQUIRED_MODELS,
31
+ STIMULI_CATALOG_ENV,
32
+ load_model_registry,
33
+ load_model_registry_specs,
34
+ load_stimuli_catalog,
35
+ )
36
+
37
+
38
+ BLUE_LEADERBOARD_COLUMNS = ["Rank", "Submitter", "Score", "Submitted"]
39
+ BLUE_LEADERBOARD_TYPES = ["number", "str", "number", "str"]
40
+
41
+ RED_LEADERBOARD_COLUMNS = ["Rank", "Submitter", "Score", "Submitted"]
42
+ RED_LEADERBOARD_TYPES = ["number", "str", "number", "str"]
43
+
44
+ PAIRWISE_COLUMNS = ["Model A", "Model B", "CKA"]
45
+ PAIRWISE_TYPES = ["str", "str", "number"]
46
+
47
+ def _load_catalogs() -> tuple[list[str], list[dict[str, str]], dict[str, dict]]:
48
+ if is_modal_enabled():
49
+ # Prefer HACKATHON_BLUE_MODEL_REGISTRY over HACKATHON_MODEL_REGISTRY
50
+ registry_path = os.environ.get(BLUE_MODEL_REGISTRY_ENV, "").strip()
51
+ if not registry_path:
52
+ registry_path = os.environ.get(MODEL_REGISTRY_ENV, "").strip()
53
+ stimuli_path = os.environ.get(STIMULI_CATALOG_ENV, "").strip()
54
+ if not registry_path or not stimuli_path:
55
+ raise ValueError(
56
+ "HACKATHON_MODAL_ENABLE is set but model registry or stimuli catalog is missing. "
57
+ "Set HACKATHON_BLUE_MODEL_REGISTRY (or HACKATHON_MODEL_REGISTRY) and HACKATHON_STIMULI_CATALOG."
58
+ )
59
+ model_names = sorted(load_model_registry(registry_path))
60
+ stimuli_catalog = load_stimuli_catalog(stimuli_path)
61
+ registry_specs = load_model_registry_specs(registry_path)
62
+ return model_names, stimuli_catalog, registry_specs
63
+
64
+ return list_dummy_models(), list_dummy_stimuli(), {}
65
+
66
+
67
+ MODEL_CHOICES, STIMULI_CATALOG, BLUE_REGISTRY_SPECS = _load_catalogs()
68
+ STIMULUS_LOOKUP = {stimulus_key(stimulus): stimulus for stimulus in STIMULI_CATALOG}
69
+ STIMULUS_CHOICES = list(STIMULUS_LOOKUP.keys())
70
+
71
+ DEFAULT_BLUE_MODELS = MODEL_CHOICES[:3]
72
+ DEFAULT_RED_STIMULI = STIMULUS_CHOICES[:3]
73
+ DEFAULT_SOURCE = "dummy_cache"
74
+
75
+
76
+ def _empty_leaderboard_df(columns: list[str]) -> pd.DataFrame:
77
+ return pd.DataFrame(columns=columns)
78
+
79
+
80
+ def _empty_pairwise_df() -> pd.DataFrame:
81
+ return pd.DataFrame(columns=PAIRWISE_COLUMNS)
82
+
83
+
84
+ def _format_score(score: float) -> float:
85
+ return round(float(score), 4)
86
+
87
+
88
+ def _build_leaderboard_df(
89
+ submissions: list[dict],
90
+ *,
91
+ columns: list[str],
92
+ count_key: str,
93
+ selections_key: str,
94
+ ascending: bool = False,
95
+ ) -> pd.DataFrame:
96
+ rows = []
97
+ for entry in submissions:
98
+ rows.append(
99
+ {
100
+ "Submitter": entry.get("submitter", "anonymous"),
101
+ "Score": _format_score(entry.get("score", 0.0)),
102
+ "Submitted": entry.get("submitted_time", ""),
103
+ }
104
+ )
105
+
106
+ if not rows:
107
+ return _empty_leaderboard_df(columns)
108
+
109
+ df = pd.DataFrame.from_records(rows, columns=columns[1:])
110
+ df = df.sort_values(by="Score", ascending=ascending).reset_index(drop=True)
111
+ df.insert(0, "Rank", range(1, len(df) + 1))
112
+ return df
113
+
114
+
115
+ def _load_hf_dataset(hf_link: str, hf_token: str) -> dict | None:
116
+ cleaned_link = hf_link.strip()
117
+ if not cleaned_link:
118
+ return None
119
+ token = hf_token.strip() or None
120
+ return load_dataset(cleaned_link, token=token)
121
+
122
+
123
+ def _select_dataset_split(dataset: dict) -> dict:
124
+ if hasattr(dataset, "column_names") and not isinstance(dataset.column_names, dict):
125
+ return dataset
126
+ return dataset.get("train") or next(iter(dataset.values()))
127
+
128
+
129
+ def _build_blue_payload(model_names: list[str], hf_link: str, hf_token: str) -> dict:
130
+ if hf_link.strip() == "":
131
+ raise ValueError("HF dataset link is required for Blue Team submissions.")
132
+
133
+ dataset = _load_hf_dataset(hf_link, hf_token)
134
+ dataset_split = _select_dataset_split(dataset)
135
+ model_layer_list = []
136
+ if "model_name" in dataset_split.column_names and "layer_name" in dataset_split.column_names:
137
+ for model_name, layer_name in zip(dataset_split["model_name"], dataset_split["layer_name"]):
138
+ model_name_str = str(model_name).strip()
139
+ layer_name_str = str(layer_name).strip()
140
+ if model_name_str and layer_name_str:
141
+ model_layer_list.append({"model_name": model_name_str, "layer_name": layer_name_str})
142
+
143
+ return {"models": model_layer_list, "hf_dataset": hf_link.strip()}
144
+
145
+
146
+ def _build_red_payload(stimulus_keys: list[str], hf_link: str, hf_token: str) -> dict:
147
+ if hf_link.strip() == "":
148
+ raise ValueError("HF dataset link is required for Red Team submissions.")
149
+
150
+ dataset = _load_hf_dataset(hf_link, hf_token)
151
+
152
+ dataset_split = _select_dataset_split(dataset)
153
+ dataset_list = []
154
+ if "dataset_name" in dataset_split.column_names and "image_identifier" in dataset_split.column_names:
155
+ for dataset_name, image_identifier in zip(dataset_split["dataset_name"], dataset_split["image_identifier"]):
156
+ dataset_name_str = str(dataset_name).strip()
157
+ image_identifier_str = str(image_identifier).strip()
158
+ if dataset_name_str and image_identifier_str:
159
+ dataset_list.append({"dataset_name": dataset_name_str, "image_identifier": image_identifier_str})
160
+
161
+ return {"differentiating_images": dataset_list, "hf_dataset": hf_link.strip()}
162
+
163
+
164
+ def _json_dumps(payload: dict) -> str:
165
+ return json.dumps(payload, indent=2)
166
+
167
+
168
+ def _parse_json_payload(payload: str) -> dict:
169
+ if not payload or not payload.strip():
170
+ raise ValueError("Paste a JSON submission payload.")
171
+
172
+ try:
173
+ data = json.loads(payload)
174
+ except json.JSONDecodeError as exc:
175
+ raise ValueError(f"Invalid JSON: {exc}") from exc
176
+
177
+ if not isinstance(data, dict):
178
+ raise ValueError("Submission JSON must be an object.")
179
+
180
+ return data
181
+
182
+
183
+ def _extract_blue_models(payload: dict) -> tuple[list[dict], list[str]]:
184
+ models = payload.get("models")
185
+ if not isinstance(models, list):
186
+ raise ValueError("Blue submission must include a list of models.")
187
+
188
+ model_names = []
189
+ missing_layers: list[str] = []
190
+ layer_mismatches: list[str] = []
191
+ for idx, model in enumerate(models, start=1):
192
+ if isinstance(model, dict) and "model_name" in model:
193
+ name = str(model["model_name"]).strip()
194
+ layer_name = str(model.get("layer_name", "")).strip() or None
195
+ elif isinstance(model, str):
196
+ name = model.strip()
197
+ layer_name = None
198
+ else:
199
+ raise ValueError(f"Model entry {idx} must be a string or object with model_name.")
200
+ if name:
201
+ model_names.append(name)
202
+
203
+ # Validate layer_name when registry specs are available
204
+ if BLUE_REGISTRY_SPECS:
205
+ if not layer_name:
206
+ missing_layers.append(f"Model entry {idx} ({name}) is missing layer_name.")
207
+ elif name in BLUE_REGISTRY_SPECS:
208
+ expected_layer = BLUE_REGISTRY_SPECS[name].get("layer", "")
209
+ if layer_name != expected_layer:
210
+ layer_mismatches.append(
211
+ f"{name}: submitted layer_name '{layer_name}' "
212
+ f"does not match registry layer '{expected_layer}'"
213
+ )
214
+
215
+ if len(model_names) != len(set(model_names)):
216
+ raise ValueError("Model selections must be unique.")
217
+
218
+ if len(model_names) != BLUE_TEAM_REQUIRED_MODELS:
219
+ raise ValueError(
220
+ f"Blue team submission must contain exactly {BLUE_TEAM_REQUIRED_MODELS} "
221
+ f"unique models, but got {len(model_names)}."
222
+ )
223
+
224
+ # Validate all models are in the registry
225
+ registry_set = set(MODEL_CHOICES)
226
+ missing = [name for name in model_names if name not in registry_set]
227
+ if missing:
228
+ raise ValueError(f"Unknown models not in registry: {', '.join(missing)}")
229
+
230
+ if missing_layers:
231
+ raise ValueError(
232
+ f"Missing layer_name for {len(missing_layers)} model(s):\n"
233
+ + "\n".join(f" - {m}" for m in missing_layers)
234
+ )
235
+
236
+ if layer_mismatches:
237
+ raise ValueError(
238
+ f"Layer name mismatch for {len(layer_mismatches)} model(s):\n"
239
+ + "\n".join(f" - {m}" for m in layer_mismatches)
240
+ )
241
+
242
+ return models, model_names
243
+
244
+
245
+ def _extract_red_stimuli(payload: dict) -> tuple[list[dict], list[str]]:
246
+ images = payload.get("differentiating_images")
247
+ if not isinstance(images, list):
248
+ raise ValueError("Red submission must include differentiating_images.")
249
+ if len(images) < 2:
250
+ raise ValueError("Select at least two stimuli.")
251
+
252
+ stimuli = []
253
+ stimulus_keys = []
254
+ for idx, item in enumerate(images, start=1):
255
+ if not isinstance(item, dict):
256
+ raise ValueError(f"Stimulus entry {idx} must be an object.")
257
+ dataset_name = str(item.get("dataset_name", "")).strip()
258
+ image_identifier = str(item.get("image_identifier", "")).strip()
259
+ if not dataset_name or not image_identifier:
260
+ raise ValueError(f"Stimulus entry {idx} must include dataset_name and image_identifier.")
261
+ stimulus = {"dataset_name": dataset_name, "image_identifier": image_identifier}
262
+ stimuli.append(stimulus)
263
+ stimulus_keys.append(stimulus_key(stimulus))
264
+
265
+ if len(stimulus_keys) != len(set(stimulus_keys)):
266
+ raise ValueError("Stimulus selections must be unique.")
267
+
268
+ missing = [key for key in stimulus_keys if key not in STIMULUS_LOOKUP]
269
+ if missing:
270
+ missing_str = ", ".join(missing)
271
+ raise ValueError(f"Unknown stimuli requested: {missing_str}")
272
+
273
+ return stimuli, stimulus_keys
274
+
275
+
276
+ def _build_pairwise_df(results: list[dict]) -> pd.DataFrame:
277
+ if not results:
278
+ return _empty_pairwise_df()
279
+
280
+ df = pd.DataFrame.from_records(results, columns=PAIRWISE_COLUMNS)
281
+ df = df.sort_values(by="CKA", ascending=False).reset_index(drop=True)
282
+ return df
283
+
284
+
285
+ def refresh_blue_leaderboard():
286
+ try:
287
+ submissions = load_submissions("blue")
288
+ except Exception as exc:
289
+ return styled_error(f"Failed to load blue submissions: {exc}"), _empty_leaderboard_df(
290
+ BLUE_LEADERBOARD_COLUMNS
291
+ )
292
+
293
+ df = _build_leaderboard_df(
294
+ submissions,
295
+ columns=BLUE_LEADERBOARD_COLUMNS,
296
+ count_key="num_models",
297
+ selections_key="model_names",
298
+ )
299
+ return styled_message(f"Loaded {len(submissions)} blue submissions."), df
300
+
301
+
302
+ def refresh_red_leaderboard():
303
+ try:
304
+ submissions = load_submissions("red")
305
+ except Exception as exc:
306
+ return styled_error(f"Failed to load red submissions: {exc}"), _empty_leaderboard_df(RED_LEADERBOARD_COLUMNS)
307
+
308
+ df = _build_leaderboard_df(
309
+ submissions,
310
+ columns=RED_LEADERBOARD_COLUMNS,
311
+ count_key="num_stimuli",
312
+ selections_key="stimuli_keys",
313
+ ascending=True, # Lower CKA = better for red team
314
+ )
315
+ return styled_message(f"Loaded {len(submissions)} red submissions."), df
316
+
317
+
318
+ def generate_blue_json(hf_link: str, hf_token: str):
319
+ try:
320
+ payload = _build_blue_payload([], hf_link, hf_token)
321
+ except Exception as exc:
322
+ return "", styled_error(str(exc))
323
+
324
+ return _json_dumps(payload), styled_message("Generated JSON from the Blue Team form.")
325
+
326
+
327
+ def generate_red_json(hf_link: str, hf_token: str):
328
+ try:
329
+ payload = _build_red_payload([], hf_link, hf_token)
330
+ except Exception as exc:
331
+ return "", styled_error(str(exc))
332
+
333
+ return _json_dumps(payload), styled_message("Generated JSON from the Red Team form.")
334
+
335
+
336
+ def submit_blue(submitter: str, payload: str):
337
+ try:
338
+ data = _parse_json_payload(payload)
339
+ models, model_names = _extract_blue_models(data)
340
+ submission_id = uuid4().hex
341
+ submitter_name = submitter.strip() or "anonymous"
342
+ score, pairwise_results = score_blue_with_pairwise(
343
+ model_names, submission_id=submission_id, submitter=submitter_name,
344
+ )
345
+
346
+ submission = {
347
+ "submission_id": submission_id,
348
+ "team": "blue",
349
+ "submitter": submitter_name,
350
+ "model_names": model_names,
351
+ "num_models": len(model_names),
352
+ "score": score,
353
+ "submitted_time": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
354
+ }
355
+
356
+ submissions = append_submission("blue", submission)
357
+ leaderboard_df = _build_leaderboard_df(
358
+ submissions,
359
+ columns=BLUE_LEADERBOARD_COLUMNS,
360
+ count_key="num_models",
361
+ selections_key="model_names",
362
+ )
363
+ pairwise_df = _build_pairwise_df(pairwise_results)
364
+ except Exception as exc:
365
+ return (
366
+ styled_error(f"Blue submission failed: {exc}"),
367
+ _empty_leaderboard_df(BLUE_LEADERBOARD_COLUMNS),
368
+ _empty_pairwise_df(),
369
+ )
370
+
371
+ return (
372
+ styled_message(f"Blue submission added. Score: {_format_score(score):.4f}."),
373
+ leaderboard_df,
374
+ pairwise_df,
375
+ )
376
+
377
+
378
+ def submit_red(submitter: str, payload: str):
379
+ try:
380
+ data = _parse_json_payload(payload)
381
+ stimuli, stimulus_keys = _extract_red_stimuli(data)
382
+ submission_id = uuid4().hex
383
+ submitter_name = submitter.strip() or "anonymous"
384
+ score, pairwise_results = score_red_with_pairwise(
385
+ stimuli, stimuli_catalog=STIMULI_CATALOG,
386
+ submission_id=submission_id, submitter=submitter_name,
387
+ )
388
+
389
+ submission = {
390
+ "submission_id": submission_id,
391
+ "team": "red",
392
+ "submitter": submitter_name,
393
+ "differentiating_images": stimuli,
394
+ "stimuli_keys": stimulus_keys,
395
+ "num_stimuli": len(stimulus_keys),
396
+ "score": score,
397
+ "submitted_time": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
398
+ }
399
+
400
+ submissions = append_submission("red", submission)
401
+ leaderboard_df = _build_leaderboard_df(
402
+ submissions,
403
+ columns=RED_LEADERBOARD_COLUMNS,
404
+ count_key="num_stimuli",
405
+ selections_key="stimuli_keys",
406
+ ascending=True, # Lower CKA = better for red team
407
+ )
408
+ pairwise_df = _build_pairwise_df(pairwise_results)
409
+ except Exception as exc:
410
+ return (
411
+ styled_error(f"Red submission failed: {exc}"),
412
+ _empty_leaderboard_df(RED_LEADERBOARD_COLUMNS),
413
+ _empty_pairwise_df(),
414
+ )
415
+
416
+ return (
417
+ styled_message(f"Red submission added. Score: {_format_score(score):.4f}."),
418
+ leaderboard_df,
419
+ pairwise_df,
420
+ )
421
+
422
+
423
+ def _sync_submissions_from_volume():
424
+ """Backfill any submissions saved on the Modal volume but missing from the HF dataset."""
425
+ if not is_modal_enabled():
426
+ return
427
+ for team in ("blue", "red"):
428
+ try:
429
+ volume_subs = fetch_volume_submissions(team=team)
430
+ if not volume_subs:
431
+ continue
432
+ existing = load_submissions(team)
433
+ existing_ids = {s.get("submission_id") for s in existing}
434
+ missing = [s for s in volume_subs if s.get("submission_id") not in existing_ids]
435
+ if missing:
436
+ for sub in missing:
437
+ append_submission(team, sub)
438
+ print(f"Synced {len(missing)} missing {team} submission(s) from Modal volume.")
439
+ except Exception as exc:
440
+ print(f"Warning: failed to sync {team} submissions from Modal volume: {exc}")
441
+
442
+
443
+ _sync_submissions_from_volume()
444
+
445
+ initial_blue_status, initial_blue_leaderboard = refresh_blue_leaderboard()
446
+ initial_red_status, initial_red_leaderboard = refresh_red_leaderboard()
447
+
448
+
449
+ demo = gr.Blocks(css=custom_css, theme=gr.themes.Base(primary_hue="blue", neutral_hue="slate").set(body_background_fill="#0d1117", block_background_fill="#1c2128", input_background_fill="#0d1117", body_text_color="#e6edf3", block_label_text_color="#e6edf3", block_title_text_color="#e6edf3", border_color_primary="#30363d"))
450
+ with demo:
451
+ gr.HTML(TITLE)
452
+ gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text")
453
+
454
+ with gr.Tabs():
455
+ with gr.Tab("Getting Started"):
456
+ gr.Markdown(GETTING_STARTED_TEXT, elem_classes="markdown-text")
457
+
458
+ with gr.Tab("Blue Team"):
459
+ with gr.Row(elem_classes="blue-team"):
460
+ with gr.Column(scale=1):
461
+ gr.Markdown(BLUE_SUBMISSION_TEXT, elem_classes="markdown-text")
462
+ blue_submitter_name = gr.Textbox(label="Display name", placeholder="anonymous")
463
+ blue_hf_link = gr.Textbox(
464
+ label="HuggingFace dataset link",
465
+ placeholder="{username}/{dataset_name}",
466
+ )
467
+ blue_hf_token = gr.Textbox(
468
+ label="HuggingFace access token",
469
+ placeholder="hf_...",
470
+ type="password",
471
+ )
472
+ blue_generate_button = gr.Button("Generate JSON", variant="secondary")
473
+ blue_json = gr.Textbox(
474
+ label="Blue Team JSON submission",
475
+ lines=14,
476
+ interactive=True,
477
+ )
478
+ blue_submit_button = gr.Button("Submit", variant="primary")
479
+ blue_status = gr.Markdown(value=initial_blue_status)
480
+
481
+ with gr.Accordion("Latest Blue submission pairwise CKA", open=False):
482
+ blue_pairwise_table = gr.Dataframe(
483
+ value=_empty_pairwise_df(),
484
+ headers=PAIRWISE_COLUMNS,
485
+ datatype=PAIRWISE_TYPES,
486
+ row_count=8,
487
+ )
488
+
489
+ with gr.Column(scale=2):
490
+ gr.HTML("<h3 class='blue-team-header'>Blue Team Leaderboard</h3>")
491
+ blue_leaderboard_table = gr.Dataframe(
492
+ value=initial_blue_leaderboard,
493
+ headers=BLUE_LEADERBOARD_COLUMNS,
494
+ datatype=BLUE_LEADERBOARD_TYPES,
495
+ row_count=10,
496
+ )
497
+ blue_refresh_button = gr.Button("Refresh Blue leaderboard", variant="secondary")
498
+
499
+ with gr.Tab("Red Team"):
500
+ with gr.Row(elem_classes="red-team"):
501
+ with gr.Column(scale=1):
502
+ gr.Markdown(RED_SUBMISSION_TEXT, elem_classes="markdown-text")
503
+ red_submitter_name = gr.Textbox(label="Display name", placeholder="anonymous")
504
+ red_hf_link = gr.Textbox(
505
+ label="HuggingFace dataset link",
506
+ placeholder="{username}/{dataset_name}",
507
+ )
508
+ red_hf_token = gr.Textbox(
509
+ label="HuggingFace access token",
510
+ placeholder="hf_...",
511
+ type="password",
512
+ )
513
+ red_generate_button = gr.Button("Generate JSON", variant="secondary")
514
+ red_json = gr.Textbox(
515
+ label="Red Team JSON submission",
516
+ lines=14,
517
+ interactive=True,
518
+ )
519
+ red_submit_button = gr.Button("Submit", variant="primary")
520
+ red_status = gr.Markdown(value=initial_red_status)
521
+
522
+ with gr.Accordion("Latest Red submission pairwise CKA", open=False):
523
+ red_pairwise_table = gr.Dataframe(
524
+ value=_empty_pairwise_df(),
525
+ headers=PAIRWISE_COLUMNS,
526
+ datatype=PAIRWISE_TYPES,
527
+ row_count=8,
528
+ )
529
+
530
+ with gr.Column(scale=2):
531
+ gr.HTML("<h3 class='red-team-header'>Red Team Leaderboard</h3>")
532
+ red_leaderboard_table = gr.Dataframe(
533
+ value=initial_red_leaderboard,
534
+ headers=RED_LEADERBOARD_COLUMNS,
535
+ datatype=RED_LEADERBOARD_TYPES,
536
+ row_count=10,
537
+ )
538
+ red_refresh_button = gr.Button("Refresh Red leaderboard", variant="secondary")
539
+
540
+ blue_generate_button.click(
541
+ generate_blue_json,
542
+ inputs=[blue_hf_link, blue_hf_token],
543
+ outputs=[blue_json, blue_status],
544
+ )
545
+ blue_submit_button.click(
546
+ submit_blue,
547
+ inputs=[blue_submitter_name, blue_json],
548
+ outputs=[blue_status, blue_leaderboard_table, blue_pairwise_table],
549
+ )
550
+ blue_refresh_button.click(
551
+ refresh_blue_leaderboard,
552
+ inputs=[],
553
+ outputs=[blue_status, blue_leaderboard_table],
554
+ )
555
+
556
+ red_generate_button.click(
557
+ generate_red_json,
558
+ inputs=[red_hf_link, red_hf_token],
559
+ outputs=[red_json, red_status],
560
+ )
561
+ red_submit_button.click(
562
+ submit_red,
563
+ inputs=[red_submitter_name, red_json],
564
+ outputs=[red_status, red_leaderboard_table, red_pairwise_table],
565
+ )
566
+ red_refresh_button.click(
567
+ refresh_red_leaderboard,
568
+ inputs=[],
569
+ outputs=[red_status, red_leaderboard_table],
570
+ )
571
+
572
+ if __name__ == "__main__":
573
+ demo.queue(default_concurrency_limit=20).launch()
cka-data/submissions.json ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "submission_id": "651769b1660c4bf9aa1f3b6dc2b09e4e",
4
+ "submitter": "anonymous",
5
+ "embeddings": [
6
+ "base",
7
+ "base_noise_medium",
8
+ "base_noise_small"
9
+ ],
10
+ "num_embeddings": 3,
11
+ "avg_cka": 0.9819666666666667,
12
+ "submitted_time": "2026-01-14T18:16:10Z"
13
+ },
14
+ {
15
+ "submission_id": "3fe95096bd45448aa49d349b874ae35a",
16
+ "submitter": "anonymous",
17
+ "embeddings": [
18
+ "base",
19
+ "base_noise_medium",
20
+ "base_noise_small"
21
+ ],
22
+ "num_embeddings": 3,
23
+ "avg_cka": 0.9819666666666667,
24
+ "submitted_time": "2026-01-14T18:16:12Z"
25
+ },
26
+ {
27
+ "submission_id": "299d9edd3eb54fd5b44d06d080a6c32d",
28
+ "submitter": "anonymous",
29
+ "embeddings": [
30
+ "base",
31
+ "base_noise_small"
32
+ ],
33
+ "num_embeddings": 2,
34
+ "avg_cka": 0.9984,
35
+ "submitted_time": "2026-01-14T18:16:17Z"
36
+ },
37
+ {
38
+ "submission_id": "b5106b8d9b3b41b0950b69eb22da7c7a",
39
+ "submitter": "anonymous",
40
+ "embeddings": [
41
+ "base",
42
+ "base_noise_medium",
43
+ "base_noise_small",
44
+ "random_2"
45
+ ],
46
+ "num_embeddings": 4,
47
+ "avg_cka": 0.6566500000000001,
48
+ "submitted_time": "2026-01-14T22:07:36Z"
49
+ },
50
+ {
51
+ "submission_id": "ace7404ac6754b4e9ba91ce7616da300",
52
+ "submitter": "anonymous",
53
+ "embeddings": [
54
+ "random_2",
55
+ "random_3"
56
+ ],
57
+ "num_embeddings": 2,
58
+ "avg_cka": 0.3314,
59
+ "submitted_time": "2026-01-14T22:24:12Z"
60
+ },
61
+ {
62
+ "submission_id": "0cebb975323749d8a3c3f72fa18873e2",
63
+ "submitter": "anonymous",
64
+ "embeddings": [
65
+ "random_3",
66
+ "random_2"
67
+ ],
68
+ "num_embeddings": 2,
69
+ "avg_cka": 0.3314,
70
+ "submitted_time": "2026-01-14T22:24:34Z"
71
+ }
72
+ ]
condaenv.4_q_6r3k.requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ -r requirements.txt
configs/blue_team_model_registry.json ADDED
@@ -0,0 +1,2963 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "model_name": "aimv2_1b_patch14_224.apple_pt",
4
+ "source": "timm",
5
+ "weights": "imagenet",
6
+ "layer": "fc_norm",
7
+ "embedding": "flatten",
8
+ "preprocess": {
9
+ "resize": 224,
10
+ "crop": 224,
11
+ "mean": [
12
+ 0.481,
13
+ 0.458,
14
+ 0.408
15
+ ],
16
+ "std": [
17
+ 0.269,
18
+ 0.261,
19
+ 0.276
20
+ ]
21
+ }
22
+ },
23
+ {
24
+ "model_name": "bat_resnext26ts.ch_in1k",
25
+ "source": "timm",
26
+ "weights": "imagenet",
27
+ "layer": "head.global_pool",
28
+ "embedding": "flatten",
29
+ "preprocess": {
30
+ "resize": 284,
31
+ "crop": 256,
32
+ "mean": [
33
+ 0.485,
34
+ 0.456,
35
+ 0.406
36
+ ],
37
+ "std": [
38
+ 0.229,
39
+ 0.224,
40
+ 0.225
41
+ ]
42
+ }
43
+ },
44
+ {
45
+ "model_name": "beit_base_patch16_224.in22k_ft_in22k",
46
+ "source": "timm",
47
+ "weights": "imagenet",
48
+ "layer": "fc_norm",
49
+ "embedding": "flatten",
50
+ "preprocess": {
51
+ "resize": 249,
52
+ "crop": 224,
53
+ "mean": [
54
+ 0.5,
55
+ 0.5,
56
+ 0.5
57
+ ],
58
+ "std": [
59
+ 0.5,
60
+ 0.5,
61
+ 0.5
62
+ ]
63
+ }
64
+ },
65
+ {
66
+ "model_name": "beitv2_base_patch16_224.in1k_ft_in1k",
67
+ "source": "timm",
68
+ "weights": "imagenet",
69
+ "layer": "fc_norm",
70
+ "embedding": "flatten",
71
+ "preprocess": {
72
+ "resize": 249,
73
+ "crop": 224,
74
+ "mean": [
75
+ 0.485,
76
+ 0.456,
77
+ 0.406
78
+ ],
79
+ "std": [
80
+ 0.229,
81
+ 0.224,
82
+ 0.225
83
+ ]
84
+ }
85
+ },
86
+ {
87
+ "model_name": "botnet26t_256.c1_in1k",
88
+ "source": "timm",
89
+ "weights": "imagenet",
90
+ "layer": "head.global_pool",
91
+ "embedding": "flatten",
92
+ "preprocess": {
93
+ "resize": 269,
94
+ "crop": 256,
95
+ "mean": [
96
+ 0.485,
97
+ 0.456,
98
+ 0.406
99
+ ],
100
+ "std": [
101
+ 0.229,
102
+ 0.224,
103
+ 0.225
104
+ ]
105
+ }
106
+ },
107
+ {
108
+ "model_name": "caformer_b36.sail_in1k",
109
+ "source": "timm",
110
+ "weights": "imagenet",
111
+ "layer": "head.global_pool",
112
+ "embedding": "flatten",
113
+ "preprocess": {
114
+ "resize": 224,
115
+ "crop": 224,
116
+ "mean": [
117
+ 0.485,
118
+ 0.456,
119
+ 0.406
120
+ ],
121
+ "std": [
122
+ 0.229,
123
+ 0.224,
124
+ 0.225
125
+ ]
126
+ }
127
+ },
128
+ {
129
+ "model_name": "cait_m36_384.fb_dist_in1k",
130
+ "source": "timm",
131
+ "weights": "imagenet",
132
+ "layer": "norm",
133
+ "embedding": "flatten",
134
+ "preprocess": {
135
+ "resize": 384,
136
+ "crop": 384,
137
+ "mean": [
138
+ 0.485,
139
+ 0.456,
140
+ 0.406
141
+ ],
142
+ "std": [
143
+ 0.229,
144
+ 0.224,
145
+ 0.225
146
+ ]
147
+ }
148
+ },
149
+ {
150
+ "model_name": "coat_lite_medium.in1k",
151
+ "source": "timm",
152
+ "weights": "imagenet",
153
+ "layer": "norm4",
154
+ "embedding": "flatten",
155
+ "preprocess": {
156
+ "resize": 249,
157
+ "crop": 224,
158
+ "mean": [
159
+ 0.485,
160
+ 0.456,
161
+ 0.406
162
+ ],
163
+ "std": [
164
+ 0.229,
165
+ 0.224,
166
+ 0.225
167
+ ]
168
+ }
169
+ },
170
+ {
171
+ "model_name": "coatnet_0_rw_224.sw_in1k",
172
+ "source": "timm",
173
+ "weights": "imagenet",
174
+ "layer": "head.global_pool",
175
+ "embedding": "flatten",
176
+ "preprocess": {
177
+ "resize": 236,
178
+ "crop": 224,
179
+ "mean": [
180
+ 0.5,
181
+ 0.5,
182
+ 0.5
183
+ ],
184
+ "std": [
185
+ 0.5,
186
+ 0.5,
187
+ 0.5
188
+ ]
189
+ }
190
+ },
191
+ {
192
+ "model_name": "coatnext_nano_rw_224.sw_in1k",
193
+ "source": "timm",
194
+ "weights": "imagenet",
195
+ "layer": "head.global_pool",
196
+ "embedding": "flatten",
197
+ "preprocess": {
198
+ "resize": 249,
199
+ "crop": 224,
200
+ "mean": [
201
+ 0.5,
202
+ 0.5,
203
+ 0.5
204
+ ],
205
+ "std": [
206
+ 0.5,
207
+ 0.5,
208
+ 0.5
209
+ ]
210
+ }
211
+ },
212
+ {
213
+ "model_name": "convformer_b36.sail_in1k",
214
+ "source": "timm",
215
+ "weights": "imagenet",
216
+ "layer": "head.global_pool",
217
+ "embedding": "flatten",
218
+ "preprocess": {
219
+ "resize": 224,
220
+ "crop": 224,
221
+ "mean": [
222
+ 0.485,
223
+ 0.456,
224
+ 0.406
225
+ ],
226
+ "std": [
227
+ 0.229,
228
+ 0.224,
229
+ 0.225
230
+ ]
231
+ }
232
+ },
233
+ {
234
+ "model_name": "convit_base.fb_in1k",
235
+ "source": "timm",
236
+ "weights": "imagenet",
237
+ "layer": "norm",
238
+ "embedding": "flatten",
239
+ "preprocess": {
240
+ "resize": 256,
241
+ "crop": 224,
242
+ "mean": [
243
+ 0.485,
244
+ 0.456,
245
+ 0.406
246
+ ],
247
+ "std": [
248
+ 0.229,
249
+ 0.224,
250
+ 0.225
251
+ ]
252
+ }
253
+ },
254
+ {
255
+ "model_name": "convmixer_1024_20_ks9_p14.in1k",
256
+ "source": "timm",
257
+ "weights": "imagenet",
258
+ "layer": "pooling",
259
+ "embedding": "flatten",
260
+ "preprocess": {
261
+ "resize": 233,
262
+ "crop": 224,
263
+ "mean": [
264
+ 0.485,
265
+ 0.456,
266
+ 0.406
267
+ ],
268
+ "std": [
269
+ 0.229,
270
+ 0.224,
271
+ 0.225
272
+ ]
273
+ }
274
+ },
275
+ {
276
+ "model_name": "convnext_atto.d2_in1k",
277
+ "source": "timm",
278
+ "weights": "imagenet",
279
+ "layer": "head.global_pool",
280
+ "embedding": "flatten",
281
+ "preprocess": {
282
+ "resize": 256,
283
+ "crop": 224,
284
+ "mean": [
285
+ 0.485,
286
+ 0.456,
287
+ 0.406
288
+ ],
289
+ "std": [
290
+ 0.229,
291
+ 0.224,
292
+ 0.225
293
+ ]
294
+ }
295
+ },
296
+ {
297
+ "model_name": "convnextv2_atto.fcmae",
298
+ "source": "timm",
299
+ "weights": "imagenet",
300
+ "layer": "head.global_pool",
301
+ "embedding": "flatten",
302
+ "preprocess": {
303
+ "resize": 256,
304
+ "crop": 224,
305
+ "mean": [
306
+ 0.485,
307
+ 0.456,
308
+ 0.406
309
+ ],
310
+ "std": [
311
+ 0.229,
312
+ 0.224,
313
+ 0.225
314
+ ]
315
+ }
316
+ },
317
+ {
318
+ "model_name": "crossvit_15_240.in1k",
319
+ "source": "timm",
320
+ "weights": "imagenet",
321
+ "layer": "norm.1",
322
+ "embedding": "flatten",
323
+ "preprocess": {
324
+ "resize": 274,
325
+ "crop": 240,
326
+ "mean": [
327
+ 0.485,
328
+ 0.456,
329
+ 0.406
330
+ ],
331
+ "std": [
332
+ 0.229,
333
+ 0.224,
334
+ 0.225
335
+ ]
336
+ }
337
+ },
338
+ {
339
+ "model_name": "cs3darknet_focus_l.c2ns_in1k",
340
+ "source": "timm",
341
+ "weights": "imagenet",
342
+ "layer": "head.global_pool",
343
+ "embedding": "flatten",
344
+ "preprocess": {
345
+ "resize": 289,
346
+ "crop": 256,
347
+ "mean": [
348
+ 0.485,
349
+ 0.456,
350
+ 0.406
351
+ ],
352
+ "std": [
353
+ 0.229,
354
+ 0.224,
355
+ 0.225
356
+ ]
357
+ }
358
+ },
359
+ {
360
+ "model_name": "cspdarknet53.ra_in1k",
361
+ "source": "timm",
362
+ "weights": "imagenet",
363
+ "layer": "head.global_pool",
364
+ "embedding": "flatten",
365
+ "preprocess": {
366
+ "resize": 289,
367
+ "crop": 256,
368
+ "mean": [
369
+ 0.485,
370
+ 0.456,
371
+ 0.406
372
+ ],
373
+ "std": [
374
+ 0.229,
375
+ 0.224,
376
+ 0.225
377
+ ]
378
+ }
379
+ },
380
+ {
381
+ "model_name": "cspresnet50.ra_in1k",
382
+ "source": "timm",
383
+ "weights": "imagenet",
384
+ "layer": "head.global_pool",
385
+ "embedding": "flatten",
386
+ "preprocess": {
387
+ "resize": 289,
388
+ "crop": 256,
389
+ "mean": [
390
+ 0.485,
391
+ 0.456,
392
+ 0.406
393
+ ],
394
+ "std": [
395
+ 0.229,
396
+ 0.224,
397
+ 0.225
398
+ ]
399
+ }
400
+ },
401
+ {
402
+ "model_name": "cspresnext50.ra_in1k",
403
+ "source": "timm",
404
+ "weights": "imagenet",
405
+ "layer": "head.global_pool",
406
+ "embedding": "flatten",
407
+ "preprocess": {
408
+ "resize": 289,
409
+ "crop": 256,
410
+ "mean": [
411
+ 0.485,
412
+ 0.456,
413
+ 0.406
414
+ ],
415
+ "std": [
416
+ 0.229,
417
+ 0.224,
418
+ 0.225
419
+ ]
420
+ }
421
+ },
422
+ {
423
+ "model_name": "darknet53.c2ns_in1k",
424
+ "source": "timm",
425
+ "weights": "imagenet",
426
+ "layer": "head.global_pool",
427
+ "embedding": "flatten",
428
+ "preprocess": {
429
+ "resize": 289,
430
+ "crop": 256,
431
+ "mean": [
432
+ 0.485,
433
+ 0.456,
434
+ 0.406
435
+ ],
436
+ "std": [
437
+ 0.229,
438
+ 0.224,
439
+ 0.225
440
+ ]
441
+ }
442
+ },
443
+ {
444
+ "model_name": "darknetaa53.c2ns_in1k",
445
+ "source": "timm",
446
+ "weights": "imagenet",
447
+ "layer": "head.global_pool",
448
+ "embedding": "flatten",
449
+ "preprocess": {
450
+ "resize": 289,
451
+ "crop": 256,
452
+ "mean": [
453
+ 0.485,
454
+ 0.456,
455
+ 0.406
456
+ ],
457
+ "std": [
458
+ 0.229,
459
+ 0.224,
460
+ 0.225
461
+ ]
462
+ }
463
+ },
464
+ {
465
+ "model_name": "davit_base.msft_in1k",
466
+ "source": "timm",
467
+ "weights": "imagenet",
468
+ "layer": "head.global_pool",
469
+ "embedding": "flatten",
470
+ "preprocess": {
471
+ "resize": 236,
472
+ "crop": 224,
473
+ "mean": [
474
+ 0.485,
475
+ 0.456,
476
+ 0.406
477
+ ],
478
+ "std": [
479
+ 0.229,
480
+ 0.224,
481
+ 0.225
482
+ ]
483
+ }
484
+ },
485
+ {
486
+ "model_name": "deit3_base_patch16_224.fb_in1k",
487
+ "source": "timm",
488
+ "weights": "imagenet",
489
+ "layer": "fc_norm",
490
+ "embedding": "flatten",
491
+ "preprocess": {
492
+ "resize": 249,
493
+ "crop": 224,
494
+ "mean": [
495
+ 0.485,
496
+ 0.456,
497
+ 0.406
498
+ ],
499
+ "std": [
500
+ 0.229,
501
+ 0.224,
502
+ 0.225
503
+ ]
504
+ }
505
+ },
506
+ {
507
+ "model_name": "densenet121.ra_in1k",
508
+ "source": "timm",
509
+ "weights": "imagenet",
510
+ "layer": "global_pool",
511
+ "embedding": "flatten",
512
+ "preprocess": {
513
+ "resize": 256,
514
+ "crop": 224,
515
+ "mean": [
516
+ 0.485,
517
+ 0.456,
518
+ 0.406
519
+ ],
520
+ "std": [
521
+ 0.229,
522
+ 0.224,
523
+ 0.225
524
+ ]
525
+ }
526
+ },
527
+ {
528
+ "model_name": "densenetblur121d.ra_in1k",
529
+ "source": "timm",
530
+ "weights": "imagenet",
531
+ "layer": "global_pool",
532
+ "embedding": "flatten",
533
+ "preprocess": {
534
+ "resize": 256,
535
+ "crop": 224,
536
+ "mean": [
537
+ 0.485,
538
+ 0.456,
539
+ 0.406
540
+ ],
541
+ "std": [
542
+ 0.229,
543
+ 0.224,
544
+ 0.225
545
+ ]
546
+ }
547
+ },
548
+ {
549
+ "model_name": "dla102.in1k",
550
+ "source": "timm",
551
+ "weights": "imagenet",
552
+ "layer": "global_pool",
553
+ "embedding": "flatten",
554
+ "preprocess": {
555
+ "resize": 256,
556
+ "crop": 224,
557
+ "mean": [
558
+ 0.485,
559
+ 0.456,
560
+ 0.406
561
+ ],
562
+ "std": [
563
+ 0.229,
564
+ 0.224,
565
+ 0.225
566
+ ]
567
+ }
568
+ },
569
+ {
570
+ "model_name": "dm_nfnet_f0.dm_in1k",
571
+ "source": "timm",
572
+ "weights": "imagenet",
573
+ "layer": "head.global_pool",
574
+ "embedding": "flatten",
575
+ "preprocess": {
576
+ "resize": 213,
577
+ "crop": 192,
578
+ "mean": [
579
+ 0.485,
580
+ 0.456,
581
+ 0.406
582
+ ],
583
+ "std": [
584
+ 0.229,
585
+ 0.224,
586
+ 0.225
587
+ ]
588
+ }
589
+ },
590
+ {
591
+ "model_name": "dpn107.mx_in1k",
592
+ "source": "timm",
593
+ "weights": "imagenet",
594
+ "layer": "global_pool",
595
+ "embedding": "flatten",
596
+ "preprocess": {
597
+ "resize": 256,
598
+ "crop": 224,
599
+ "mean": [
600
+ 0.486,
601
+ 0.459,
602
+ 0.408
603
+ ],
604
+ "std": [
605
+ 0.235,
606
+ 0.235,
607
+ 0.235
608
+ ]
609
+ }
610
+ },
611
+ {
612
+ "model_name": "eca_botnext26ts_256.c1_in1k",
613
+ "source": "timm",
614
+ "weights": "imagenet",
615
+ "layer": "head.global_pool",
616
+ "embedding": "flatten",
617
+ "preprocess": {
618
+ "resize": 269,
619
+ "crop": 256,
620
+ "mean": [
621
+ 0.485,
622
+ 0.456,
623
+ 0.406
624
+ ],
625
+ "std": [
626
+ 0.229,
627
+ 0.224,
628
+ 0.225
629
+ ]
630
+ }
631
+ },
632
+ {
633
+ "model_name": "ecaresnet101d.miil_in1k",
634
+ "source": "timm",
635
+ "weights": "imagenet",
636
+ "layer": "global_pool",
637
+ "embedding": "flatten",
638
+ "preprocess": {
639
+ "resize": 256,
640
+ "crop": 224,
641
+ "mean": [
642
+ 0.485,
643
+ 0.456,
644
+ 0.406
645
+ ],
646
+ "std": [
647
+ 0.229,
648
+ 0.224,
649
+ 0.225
650
+ ]
651
+ }
652
+ },
653
+ {
654
+ "model_name": "ecaresnetlight.miil_in1k",
655
+ "source": "timm",
656
+ "weights": "imagenet",
657
+ "layer": "global_pool",
658
+ "embedding": "flatten",
659
+ "preprocess": {
660
+ "resize": 256,
661
+ "crop": 224,
662
+ "mean": [
663
+ 0.485,
664
+ 0.456,
665
+ 0.406
666
+ ],
667
+ "std": [
668
+ 0.229,
669
+ 0.224,
670
+ 0.225
671
+ ]
672
+ }
673
+ },
674
+ {
675
+ "model_name": "edgenext_base.in21k_ft_in1k",
676
+ "source": "timm",
677
+ "weights": "imagenet",
678
+ "layer": "head.global_pool",
679
+ "embedding": "flatten",
680
+ "preprocess": {
681
+ "resize": 269,
682
+ "crop": 256,
683
+ "mean": [
684
+ 0.485,
685
+ 0.456,
686
+ 0.406
687
+ ],
688
+ "std": [
689
+ 0.229,
690
+ 0.224,
691
+ 0.225
692
+ ]
693
+ }
694
+ },
695
+ {
696
+ "model_name": "efficientformer_l1.snap_dist_in1k",
697
+ "source": "timm",
698
+ "weights": "imagenet",
699
+ "layer": "norm",
700
+ "embedding": "flatten",
701
+ "preprocess": {
702
+ "resize": 236,
703
+ "crop": 224,
704
+ "mean": [
705
+ 0.485,
706
+ 0.456,
707
+ 0.406
708
+ ],
709
+ "std": [
710
+ 0.229,
711
+ 0.224,
712
+ 0.225
713
+ ]
714
+ }
715
+ },
716
+ {
717
+ "model_name": "efficientformerv2_l.snap_dist_in1k",
718
+ "source": "timm",
719
+ "weights": "imagenet",
720
+ "layer": "norm",
721
+ "embedding": "flatten",
722
+ "preprocess": {
723
+ "resize": 236,
724
+ "crop": 224,
725
+ "mean": [
726
+ 0.485,
727
+ 0.456,
728
+ 0.406
729
+ ],
730
+ "std": [
731
+ 0.229,
732
+ 0.224,
733
+ 0.225
734
+ ]
735
+ }
736
+ },
737
+ {
738
+ "model_name": "efficientnet_b0.ra4_e3600_r224_in1k",
739
+ "source": "timm",
740
+ "weights": "imagenet",
741
+ "layer": "global_pool",
742
+ "embedding": "flatten",
743
+ "preprocess": {
744
+ "resize": 249,
745
+ "crop": 224,
746
+ "mean": [
747
+ 0.5,
748
+ 0.5,
749
+ 0.5
750
+ ],
751
+ "std": [
752
+ 0.5,
753
+ 0.5,
754
+ 0.5
755
+ ]
756
+ }
757
+ },
758
+ {
759
+ "model_name": "efficientnetv2_rw_m.agc_in1k",
760
+ "source": "timm",
761
+ "weights": "imagenet",
762
+ "layer": "global_pool",
763
+ "embedding": "flatten",
764
+ "preprocess": {
765
+ "resize": 320,
766
+ "crop": 320,
767
+ "mean": [
768
+ 0.485,
769
+ 0.456,
770
+ 0.406
771
+ ],
772
+ "std": [
773
+ 0.229,
774
+ 0.224,
775
+ 0.225
776
+ ]
777
+ }
778
+ },
779
+ {
780
+ "model_name": "efficientvit_b0.r224_in1k",
781
+ "source": "timm",
782
+ "weights": "imagenet",
783
+ "layer": "head.global_pool",
784
+ "embedding": "flatten",
785
+ "preprocess": {
786
+ "resize": 236,
787
+ "crop": 224,
788
+ "mean": [
789
+ 0.485,
790
+ 0.456,
791
+ 0.406
792
+ ],
793
+ "std": [
794
+ 0.229,
795
+ 0.224,
796
+ 0.225
797
+ ]
798
+ }
799
+ },
800
+ {
801
+ "model_name": "ese_vovnet19b_dw.ra_in1k",
802
+ "source": "timm",
803
+ "weights": "imagenet",
804
+ "layer": "head.global_pool",
805
+ "embedding": "flatten",
806
+ "preprocess": {
807
+ "resize": 256,
808
+ "crop": 224,
809
+ "mean": [
810
+ 0.485,
811
+ 0.456,
812
+ 0.406
813
+ ],
814
+ "std": [
815
+ 0.229,
816
+ 0.224,
817
+ 0.225
818
+ ]
819
+ }
820
+ },
821
+ {
822
+ "model_name": "eva02_base_patch14_224.mim_in22k",
823
+ "source": "timm",
824
+ "weights": "imagenet",
825
+ "layer": "fc_norm",
826
+ "embedding": "flatten",
827
+ "preprocess": {
828
+ "resize": 249,
829
+ "crop": 224,
830
+ "mean": [
831
+ 0.481,
832
+ 0.458,
833
+ 0.408
834
+ ],
835
+ "std": [
836
+ 0.269,
837
+ 0.261,
838
+ 0.276
839
+ ]
840
+ }
841
+ },
842
+ {
843
+ "model_name": "fastvit_ma36.apple_dist_in1k",
844
+ "source": "timm",
845
+ "weights": "imagenet",
846
+ "layer": "head.global_pool",
847
+ "embedding": "flatten",
848
+ "preprocess": {
849
+ "resize": 269,
850
+ "crop": 256,
851
+ "mean": [
852
+ 0.485,
853
+ 0.456,
854
+ 0.406
855
+ ],
856
+ "std": [
857
+ 0.229,
858
+ 0.224,
859
+ 0.225
860
+ ]
861
+ }
862
+ },
863
+ {
864
+ "model_name": "fbnetc_100.rmsp_in1k",
865
+ "source": "timm",
866
+ "weights": "imagenet",
867
+ "layer": "global_pool",
868
+ "embedding": "flatten",
869
+ "preprocess": {
870
+ "resize": 256,
871
+ "crop": 224,
872
+ "mean": [
873
+ 0.485,
874
+ 0.456,
875
+ 0.406
876
+ ],
877
+ "std": [
878
+ 0.229,
879
+ 0.224,
880
+ 0.225
881
+ ]
882
+ }
883
+ },
884
+ {
885
+ "model_name": "fbnetv3_b.ra2_in1k",
886
+ "source": "timm",
887
+ "weights": "imagenet",
888
+ "layer": "global_pool",
889
+ "embedding": "flatten",
890
+ "preprocess": {
891
+ "resize": 236,
892
+ "crop": 224,
893
+ "mean": [
894
+ 0.485,
895
+ 0.456,
896
+ 0.406
897
+ ],
898
+ "std": [
899
+ 0.229,
900
+ 0.224,
901
+ 0.225
902
+ ]
903
+ }
904
+ },
905
+ {
906
+ "model_name": "flexivit_base.1000ep_in21k",
907
+ "source": "timm",
908
+ "weights": "imagenet",
909
+ "layer": "fc_norm",
910
+ "embedding": "flatten",
911
+ "preprocess": {
912
+ "resize": 253,
913
+ "crop": 240,
914
+ "mean": [
915
+ 0.5,
916
+ 0.5,
917
+ 0.5
918
+ ],
919
+ "std": [
920
+ 0.5,
921
+ 0.5,
922
+ 0.5
923
+ ]
924
+ }
925
+ },
926
+ {
927
+ "model_name": "focalnet_base_lrf.ms_in1k",
928
+ "source": "timm",
929
+ "weights": "imagenet",
930
+ "layer": "head.global_pool",
931
+ "embedding": "flatten",
932
+ "preprocess": {
933
+ "resize": 249,
934
+ "crop": 224,
935
+ "mean": [
936
+ 0.485,
937
+ 0.456,
938
+ 0.406
939
+ ],
940
+ "std": [
941
+ 0.229,
942
+ 0.224,
943
+ 0.225
944
+ ]
945
+ }
946
+ },
947
+ {
948
+ "model_name": "gc_efficientnetv2_rw_t.agc_in1k",
949
+ "source": "timm",
950
+ "weights": "imagenet",
951
+ "layer": "global_pool",
952
+ "embedding": "flatten",
953
+ "preprocess": {
954
+ "resize": 224,
955
+ "crop": 224,
956
+ "mean": [
957
+ 0.485,
958
+ 0.456,
959
+ 0.406
960
+ ],
961
+ "std": [
962
+ 0.229,
963
+ 0.224,
964
+ 0.225
965
+ ]
966
+ }
967
+ },
968
+ {
969
+ "model_name": "gcresnet33ts.ra2_in1k",
970
+ "source": "timm",
971
+ "weights": "imagenet",
972
+ "layer": "head.global_pool",
973
+ "embedding": "flatten",
974
+ "preprocess": {
975
+ "resize": 284,
976
+ "crop": 256,
977
+ "mean": [
978
+ 0.485,
979
+ 0.456,
980
+ 0.406
981
+ ],
982
+ "std": [
983
+ 0.229,
984
+ 0.224,
985
+ 0.225
986
+ ]
987
+ }
988
+ },
989
+ {
990
+ "model_name": "gcresnext26ts.ch_in1k",
991
+ "source": "timm",
992
+ "weights": "imagenet",
993
+ "layer": "head.global_pool",
994
+ "embedding": "flatten",
995
+ "preprocess": {
996
+ "resize": 284,
997
+ "crop": 256,
998
+ "mean": [
999
+ 0.485,
1000
+ 0.456,
1001
+ 0.406
1002
+ ],
1003
+ "std": [
1004
+ 0.229,
1005
+ 0.224,
1006
+ 0.225
1007
+ ]
1008
+ }
1009
+ },
1010
+ {
1011
+ "model_name": "gcvit_base.in1k",
1012
+ "source": "timm",
1013
+ "weights": "imagenet",
1014
+ "layer": "head.global_pool",
1015
+ "embedding": "flatten",
1016
+ "preprocess": {
1017
+ "resize": 256,
1018
+ "crop": 224,
1019
+ "mean": [
1020
+ 0.485,
1021
+ 0.456,
1022
+ 0.406
1023
+ ],
1024
+ "std": [
1025
+ 0.229,
1026
+ 0.224,
1027
+ 0.225
1028
+ ]
1029
+ }
1030
+ },
1031
+ {
1032
+ "model_name": "gernet_l.idstcv_in1k",
1033
+ "source": "timm",
1034
+ "weights": "imagenet",
1035
+ "layer": "head.global_pool",
1036
+ "embedding": "flatten",
1037
+ "preprocess": {
1038
+ "resize": 293,
1039
+ "crop": 256,
1040
+ "mean": [
1041
+ 0.485,
1042
+ 0.456,
1043
+ 0.406
1044
+ ],
1045
+ "std": [
1046
+ 0.229,
1047
+ 0.224,
1048
+ 0.225
1049
+ ]
1050
+ }
1051
+ },
1052
+ {
1053
+ "model_name": "ghostnet_100.in1k",
1054
+ "source": "timm",
1055
+ "weights": "imagenet",
1056
+ "layer": "global_pool",
1057
+ "embedding": "flatten",
1058
+ "preprocess": {
1059
+ "resize": 256,
1060
+ "crop": 224,
1061
+ "mean": [
1062
+ 0.485,
1063
+ 0.456,
1064
+ 0.406
1065
+ ],
1066
+ "std": [
1067
+ 0.229,
1068
+ 0.224,
1069
+ 0.225
1070
+ ]
1071
+ }
1072
+ },
1073
+ {
1074
+ "model_name": "ghostnetv2_100.in1k",
1075
+ "source": "timm",
1076
+ "weights": "imagenet",
1077
+ "layer": "global_pool",
1078
+ "embedding": "flatten",
1079
+ "preprocess": {
1080
+ "resize": 256,
1081
+ "crop": 224,
1082
+ "mean": [
1083
+ 0.485,
1084
+ 0.456,
1085
+ 0.406
1086
+ ],
1087
+ "std": [
1088
+ 0.229,
1089
+ 0.224,
1090
+ 0.225
1091
+ ]
1092
+ }
1093
+ },
1094
+ {
1095
+ "model_name": "gmixer_24_224.ra3_in1k",
1096
+ "source": "timm",
1097
+ "weights": "imagenet",
1098
+ "layer": "norm",
1099
+ "embedding": "flatten",
1100
+ "preprocess": {
1101
+ "resize": 256,
1102
+ "crop": 224,
1103
+ "mean": [
1104
+ 0.485,
1105
+ 0.456,
1106
+ 0.406
1107
+ ],
1108
+ "std": [
1109
+ 0.229,
1110
+ 0.224,
1111
+ 0.225
1112
+ ]
1113
+ }
1114
+ },
1115
+ {
1116
+ "model_name": "gmlp_s16_224.ra3_in1k",
1117
+ "source": "timm",
1118
+ "weights": "imagenet",
1119
+ "layer": "norm",
1120
+ "embedding": "flatten",
1121
+ "preprocess": {
1122
+ "resize": 256,
1123
+ "crop": 224,
1124
+ "mean": [
1125
+ 0.5,
1126
+ 0.5,
1127
+ 0.5
1128
+ ],
1129
+ "std": [
1130
+ 0.5,
1131
+ 0.5,
1132
+ 0.5
1133
+ ]
1134
+ }
1135
+ },
1136
+ {
1137
+ "model_name": "halo2botnet50ts_256.a1h_in1k",
1138
+ "source": "timm",
1139
+ "weights": "imagenet",
1140
+ "layer": "head.global_pool",
1141
+ "embedding": "flatten",
1142
+ "preprocess": {
1143
+ "resize": 269,
1144
+ "crop": 256,
1145
+ "mean": [
1146
+ 0.485,
1147
+ 0.456,
1148
+ 0.406
1149
+ ],
1150
+ "std": [
1151
+ 0.229,
1152
+ 0.224,
1153
+ 0.225
1154
+ ]
1155
+ }
1156
+ },
1157
+ {
1158
+ "model_name": "halonet26t.a1h_in1k",
1159
+ "source": "timm",
1160
+ "weights": "imagenet",
1161
+ "layer": "head.global_pool",
1162
+ "embedding": "flatten",
1163
+ "preprocess": {
1164
+ "resize": 269,
1165
+ "crop": 256,
1166
+ "mean": [
1167
+ 0.485,
1168
+ 0.456,
1169
+ 0.406
1170
+ ],
1171
+ "std": [
1172
+ 0.229,
1173
+ 0.224,
1174
+ 0.225
1175
+ ]
1176
+ }
1177
+ },
1178
+ {
1179
+ "model_name": "haloregnetz_b.ra3_in1k",
1180
+ "source": "timm",
1181
+ "weights": "imagenet",
1182
+ "layer": "head.global_pool",
1183
+ "embedding": "flatten",
1184
+ "preprocess": {
1185
+ "resize": 238,
1186
+ "crop": 224,
1187
+ "mean": [
1188
+ 0.5,
1189
+ 0.5,
1190
+ 0.5
1191
+ ],
1192
+ "std": [
1193
+ 0.5,
1194
+ 0.5,
1195
+ 0.5
1196
+ ]
1197
+ }
1198
+ },
1199
+ {
1200
+ "model_name": "hardcorenas_a.miil_green_in1k",
1201
+ "source": "timm",
1202
+ "weights": "imagenet",
1203
+ "layer": "global_pool",
1204
+ "embedding": "flatten",
1205
+ "preprocess": {
1206
+ "resize": 256,
1207
+ "crop": 224,
1208
+ "mean": [
1209
+ 0.485,
1210
+ 0.456,
1211
+ 0.406
1212
+ ],
1213
+ "std": [
1214
+ 0.229,
1215
+ 0.224,
1216
+ 0.225
1217
+ ]
1218
+ }
1219
+ },
1220
+ {
1221
+ "model_name": "hgnet_base.ssld_in1k",
1222
+ "source": "timm",
1223
+ "weights": "imagenet",
1224
+ "layer": "head.global_pool",
1225
+ "embedding": "flatten",
1226
+ "preprocess": {
1227
+ "resize": 232,
1228
+ "crop": 224,
1229
+ "mean": [
1230
+ 0.485,
1231
+ 0.456,
1232
+ 0.406
1233
+ ],
1234
+ "std": [
1235
+ 0.229,
1236
+ 0.224,
1237
+ 0.225
1238
+ ]
1239
+ }
1240
+ },
1241
+ {
1242
+ "model_name": "hgnetv2_b0.ssld_stage1_in22k_in1k",
1243
+ "source": "timm",
1244
+ "weights": "imagenet",
1245
+ "layer": "head.global_pool",
1246
+ "embedding": "flatten",
1247
+ "preprocess": {
1248
+ "resize": 232,
1249
+ "crop": 224,
1250
+ "mean": [
1251
+ 0.485,
1252
+ 0.456,
1253
+ 0.406
1254
+ ],
1255
+ "std": [
1256
+ 0.229,
1257
+ 0.224,
1258
+ 0.225
1259
+ ]
1260
+ }
1261
+ },
1262
+ {
1263
+ "model_name": "hiera_base_224.mae",
1264
+ "source": "timm",
1265
+ "weights": "imagenet",
1266
+ "layer": "head.norm",
1267
+ "embedding": "flatten",
1268
+ "preprocess": {
1269
+ "resize": 249,
1270
+ "crop": 224,
1271
+ "mean": [
1272
+ 0.485,
1273
+ 0.456,
1274
+ 0.406
1275
+ ],
1276
+ "std": [
1277
+ 0.229,
1278
+ 0.224,
1279
+ 0.225
1280
+ ]
1281
+ }
1282
+ },
1283
+ {
1284
+ "model_name": "hrnet_w18.ms_aug_in1k",
1285
+ "source": "timm",
1286
+ "weights": "imagenet",
1287
+ "layer": "global_pool",
1288
+ "embedding": "flatten",
1289
+ "preprocess": {
1290
+ "resize": 236,
1291
+ "crop": 224,
1292
+ "mean": [
1293
+ 0.485,
1294
+ 0.456,
1295
+ 0.406
1296
+ ],
1297
+ "std": [
1298
+ 0.229,
1299
+ 0.224,
1300
+ 0.225
1301
+ ]
1302
+ }
1303
+ },
1304
+ {
1305
+ "model_name": "inception_next_atto.sail_in1k",
1306
+ "source": "timm",
1307
+ "weights": "imagenet",
1308
+ "layer": "head.global_pool",
1309
+ "embedding": "flatten",
1310
+ "preprocess": {
1311
+ "resize": 256,
1312
+ "crop": 224,
1313
+ "mean": [
1314
+ 0.485,
1315
+ 0.456,
1316
+ 0.406
1317
+ ],
1318
+ "std": [
1319
+ 0.229,
1320
+ 0.224,
1321
+ 0.225
1322
+ ]
1323
+ }
1324
+ },
1325
+ {
1326
+ "model_name": "lambda_resnet26rpt_256.c1_in1k",
1327
+ "source": "timm",
1328
+ "weights": "imagenet",
1329
+ "layer": "head.global_pool",
1330
+ "embedding": "flatten",
1331
+ "preprocess": {
1332
+ "resize": 272,
1333
+ "crop": 256,
1334
+ "mean": [
1335
+ 0.485,
1336
+ 0.456,
1337
+ 0.406
1338
+ ],
1339
+ "std": [
1340
+ 0.229,
1341
+ 0.224,
1342
+ 0.225
1343
+ ]
1344
+ }
1345
+ },
1346
+ {
1347
+ "model_name": "lamhalobotnet50ts_256.a1h_in1k",
1348
+ "source": "timm",
1349
+ "weights": "imagenet",
1350
+ "layer": "head.global_pool",
1351
+ "embedding": "flatten",
1352
+ "preprocess": {
1353
+ "resize": 269,
1354
+ "crop": 256,
1355
+ "mean": [
1356
+ 0.485,
1357
+ 0.456,
1358
+ 0.406
1359
+ ],
1360
+ "std": [
1361
+ 0.229,
1362
+ 0.224,
1363
+ 0.225
1364
+ ]
1365
+ }
1366
+ },
1367
+ {
1368
+ "model_name": "lcnet_050.ra2_in1k",
1369
+ "source": "timm",
1370
+ "weights": "imagenet",
1371
+ "layer": "global_pool",
1372
+ "embedding": "flatten",
1373
+ "preprocess": {
1374
+ "resize": 256,
1375
+ "crop": 224,
1376
+ "mean": [
1377
+ 0.485,
1378
+ 0.456,
1379
+ 0.406
1380
+ ],
1381
+ "std": [
1382
+ 0.229,
1383
+ 0.224,
1384
+ 0.225
1385
+ ]
1386
+ }
1387
+ },
1388
+ {
1389
+ "model_name": "legacy_senet154.in1k",
1390
+ "source": "timm",
1391
+ "weights": "imagenet",
1392
+ "layer": "global_pool",
1393
+ "embedding": "flatten",
1394
+ "preprocess": {
1395
+ "resize": 256,
1396
+ "crop": 224,
1397
+ "mean": [
1398
+ 0.485,
1399
+ 0.456,
1400
+ 0.406
1401
+ ],
1402
+ "std": [
1403
+ 0.229,
1404
+ 0.224,
1405
+ 0.225
1406
+ ]
1407
+ }
1408
+ },
1409
+ {
1410
+ "model_name": "levit_128.fb_dist_in1k",
1411
+ "source": "timm",
1412
+ "weights": "imagenet",
1413
+ "layer": "head.bn",
1414
+ "embedding": "flatten",
1415
+ "preprocess": {
1416
+ "resize": 249,
1417
+ "crop": 224,
1418
+ "mean": [
1419
+ 0.485,
1420
+ 0.456,
1421
+ 0.406
1422
+ ],
1423
+ "std": [
1424
+ 0.229,
1425
+ 0.224,
1426
+ 0.225
1427
+ ]
1428
+ }
1429
+ },
1430
+ {
1431
+ "model_name": "mambaout_base.in1k",
1432
+ "source": "timm",
1433
+ "weights": "imagenet",
1434
+ "layer": "head.norm",
1435
+ "embedding": "flatten",
1436
+ "preprocess": {
1437
+ "resize": 224,
1438
+ "crop": 224,
1439
+ "mean": [
1440
+ 0.485,
1441
+ 0.456,
1442
+ 0.406
1443
+ ],
1444
+ "std": [
1445
+ 0.229,
1446
+ 0.224,
1447
+ 0.225
1448
+ ]
1449
+ }
1450
+ },
1451
+ {
1452
+ "model_name": "maxvit_base_tf_224.in1k",
1453
+ "source": "timm",
1454
+ "weights": "imagenet",
1455
+ "layer": "head.global_pool",
1456
+ "embedding": "flatten",
1457
+ "preprocess": {
1458
+ "resize": 236,
1459
+ "crop": 224,
1460
+ "mean": [
1461
+ 0.485,
1462
+ 0.456,
1463
+ 0.406
1464
+ ],
1465
+ "std": [
1466
+ 0.229,
1467
+ 0.224,
1468
+ 0.225
1469
+ ]
1470
+ }
1471
+ },
1472
+ {
1473
+ "model_name": "maxxvit_rmlp_nano_rw_256.sw_in1k",
1474
+ "source": "timm",
1475
+ "weights": "imagenet",
1476
+ "layer": "head.global_pool",
1477
+ "embedding": "flatten",
1478
+ "preprocess": {
1479
+ "resize": 269,
1480
+ "crop": 256,
1481
+ "mean": [
1482
+ 0.5,
1483
+ 0.5,
1484
+ 0.5
1485
+ ],
1486
+ "std": [
1487
+ 0.5,
1488
+ 0.5,
1489
+ 0.5
1490
+ ]
1491
+ }
1492
+ },
1493
+ {
1494
+ "model_name": "maxxvitv2_nano_rw_256.sw_in1k",
1495
+ "source": "timm",
1496
+ "weights": "imagenet",
1497
+ "layer": "head.global_pool",
1498
+ "embedding": "flatten",
1499
+ "preprocess": {
1500
+ "resize": 269,
1501
+ "crop": 256,
1502
+ "mean": [
1503
+ 0.5,
1504
+ 0.5,
1505
+ 0.5
1506
+ ],
1507
+ "std": [
1508
+ 0.5,
1509
+ 0.5,
1510
+ 0.5
1511
+ ]
1512
+ }
1513
+ },
1514
+ {
1515
+ "model_name": "mixer_b16_224.goog_in21k",
1516
+ "source": "timm",
1517
+ "weights": "imagenet",
1518
+ "layer": "norm",
1519
+ "embedding": "flatten",
1520
+ "preprocess": {
1521
+ "resize": 256,
1522
+ "crop": 224,
1523
+ "mean": [
1524
+ 0.5,
1525
+ 0.5,
1526
+ 0.5
1527
+ ],
1528
+ "std": [
1529
+ 0.5,
1530
+ 0.5,
1531
+ 0.5
1532
+ ]
1533
+ }
1534
+ },
1535
+ {
1536
+ "model_name": "mixnet_l.ft_in1k",
1537
+ "source": "timm",
1538
+ "weights": "imagenet",
1539
+ "layer": "global_pool",
1540
+ "embedding": "flatten",
1541
+ "preprocess": {
1542
+ "resize": 256,
1543
+ "crop": 224,
1544
+ "mean": [
1545
+ 0.485,
1546
+ 0.456,
1547
+ 0.406
1548
+ ],
1549
+ "std": [
1550
+ 0.229,
1551
+ 0.224,
1552
+ 0.225
1553
+ ]
1554
+ }
1555
+ },
1556
+ {
1557
+ "model_name": "mnasnet_100.rmsp_in1k",
1558
+ "source": "timm",
1559
+ "weights": "imagenet",
1560
+ "layer": "global_pool",
1561
+ "embedding": "flatten",
1562
+ "preprocess": {
1563
+ "resize": 256,
1564
+ "crop": 224,
1565
+ "mean": [
1566
+ 0.485,
1567
+ 0.456,
1568
+ 0.406
1569
+ ],
1570
+ "std": [
1571
+ 0.229,
1572
+ 0.224,
1573
+ 0.225
1574
+ ]
1575
+ }
1576
+ },
1577
+ {
1578
+ "model_name": "mobilenet_edgetpu_v2_m.ra4_e3600_r224_in1k",
1579
+ "source": "timm",
1580
+ "weights": "imagenet",
1581
+ "layer": "global_pool",
1582
+ "embedding": "flatten",
1583
+ "preprocess": {
1584
+ "resize": 249,
1585
+ "crop": 224,
1586
+ "mean": [
1587
+ 0.5,
1588
+ 0.5,
1589
+ 0.5
1590
+ ],
1591
+ "std": [
1592
+ 0.5,
1593
+ 0.5,
1594
+ 0.5
1595
+ ]
1596
+ }
1597
+ },
1598
+ {
1599
+ "model_name": "mobilenetv1_100.ra4_e3600_r224_in1k",
1600
+ "source": "timm",
1601
+ "weights": "imagenet",
1602
+ "layer": "global_pool",
1603
+ "embedding": "flatten",
1604
+ "preprocess": {
1605
+ "resize": 256,
1606
+ "crop": 224,
1607
+ "mean": [
1608
+ 0.5,
1609
+ 0.5,
1610
+ 0.5
1611
+ ],
1612
+ "std": [
1613
+ 0.5,
1614
+ 0.5,
1615
+ 0.5
1616
+ ]
1617
+ }
1618
+ },
1619
+ {
1620
+ "model_name": "mobileone_s0.apple_in1k",
1621
+ "source": "timm",
1622
+ "weights": "imagenet",
1623
+ "layer": "head.global_pool",
1624
+ "embedding": "flatten",
1625
+ "preprocess": {
1626
+ "resize": 256,
1627
+ "crop": 224,
1628
+ "mean": [
1629
+ 0.485,
1630
+ 0.456,
1631
+ 0.406
1632
+ ],
1633
+ "std": [
1634
+ 0.229,
1635
+ 0.224,
1636
+ 0.225
1637
+ ]
1638
+ }
1639
+ },
1640
+ {
1641
+ "model_name": "mobilevit_s.cvnets_in1k",
1642
+ "source": "timm",
1643
+ "weights": "imagenet",
1644
+ "layer": "head.global_pool",
1645
+ "embedding": "flatten",
1646
+ "preprocess": {
1647
+ "resize": 284,
1648
+ "crop": 256,
1649
+ "mean": [
1650
+ 0.0,
1651
+ 0.0,
1652
+ 0.0
1653
+ ],
1654
+ "std": [
1655
+ 1.0,
1656
+ 1.0,
1657
+ 1.0
1658
+ ]
1659
+ }
1660
+ },
1661
+ {
1662
+ "model_name": "mobilevitv2_050.cvnets_in1k",
1663
+ "source": "timm",
1664
+ "weights": "imagenet",
1665
+ "layer": "head.global_pool",
1666
+ "embedding": "flatten",
1667
+ "preprocess": {
1668
+ "resize": 288,
1669
+ "crop": 256,
1670
+ "mean": [
1671
+ 0.0,
1672
+ 0.0,
1673
+ 0.0
1674
+ ],
1675
+ "std": [
1676
+ 1.0,
1677
+ 1.0,
1678
+ 1.0
1679
+ ]
1680
+ }
1681
+ },
1682
+ {
1683
+ "model_name": "mvitv2_base.fb_in1k",
1684
+ "source": "timm",
1685
+ "weights": "imagenet",
1686
+ "layer": "norm",
1687
+ "embedding": "flatten",
1688
+ "preprocess": {
1689
+ "resize": 249,
1690
+ "crop": 224,
1691
+ "mean": [
1692
+ 0.485,
1693
+ 0.456,
1694
+ 0.406
1695
+ ],
1696
+ "std": [
1697
+ 0.229,
1698
+ 0.224,
1699
+ 0.225
1700
+ ]
1701
+ }
1702
+ },
1703
+ {
1704
+ "model_name": "nasnetalarge.tf_in1k",
1705
+ "source": "timm",
1706
+ "weights": "imagenet",
1707
+ "layer": "global_pool",
1708
+ "embedding": "flatten",
1709
+ "preprocess": {
1710
+ "resize": 363,
1711
+ "crop": 331,
1712
+ "mean": [
1713
+ 0.5,
1714
+ 0.5,
1715
+ 0.5
1716
+ ],
1717
+ "std": [
1718
+ 0.5,
1719
+ 0.5,
1720
+ 0.5
1721
+ ]
1722
+ }
1723
+ },
1724
+ {
1725
+ "model_name": "nest_base_jx.goog_in1k",
1726
+ "source": "timm",
1727
+ "weights": "imagenet",
1728
+ "layer": "global_pool",
1729
+ "embedding": "flatten",
1730
+ "preprocess": {
1731
+ "resize": 256,
1732
+ "crop": 224,
1733
+ "mean": [
1734
+ 0.485,
1735
+ 0.456,
1736
+ 0.406
1737
+ ],
1738
+ "std": [
1739
+ 0.229,
1740
+ 0.224,
1741
+ 0.225
1742
+ ]
1743
+ }
1744
+ },
1745
+ {
1746
+ "model_name": "nextvit_base.bd_in1k",
1747
+ "source": "timm",
1748
+ "weights": "imagenet",
1749
+ "layer": "head.global_pool",
1750
+ "embedding": "flatten",
1751
+ "preprocess": {
1752
+ "resize": 236,
1753
+ "crop": 224,
1754
+ "mean": [
1755
+ 0.485,
1756
+ 0.456,
1757
+ 0.406
1758
+ ],
1759
+ "std": [
1760
+ 0.229,
1761
+ 0.224,
1762
+ 0.225
1763
+ ]
1764
+ }
1765
+ },
1766
+ {
1767
+ "model_name": "nf_regnet_b1.ra2_in1k",
1768
+ "source": "timm",
1769
+ "weights": "imagenet",
1770
+ "layer": "head.global_pool",
1771
+ "embedding": "flatten",
1772
+ "preprocess": {
1773
+ "resize": 284,
1774
+ "crop": 256,
1775
+ "mean": [
1776
+ 0.485,
1777
+ 0.456,
1778
+ 0.406
1779
+ ],
1780
+ "std": [
1781
+ 0.229,
1782
+ 0.224,
1783
+ 0.225
1784
+ ]
1785
+ }
1786
+ },
1787
+ {
1788
+ "model_name": "nfnet_l0.ra2_in1k",
1789
+ "source": "timm",
1790
+ "weights": "imagenet",
1791
+ "layer": "head.global_pool",
1792
+ "embedding": "flatten",
1793
+ "preprocess": {
1794
+ "resize": 249,
1795
+ "crop": 224,
1796
+ "mean": [
1797
+ 0.485,
1798
+ 0.456,
1799
+ 0.406
1800
+ ],
1801
+ "std": [
1802
+ 0.229,
1803
+ 0.224,
1804
+ 0.225
1805
+ ]
1806
+ }
1807
+ },
1808
+ {
1809
+ "model_name": "pit_b_224.in1k",
1810
+ "source": "timm",
1811
+ "weights": "imagenet",
1812
+ "layer": "norm",
1813
+ "embedding": "flatten",
1814
+ "preprocess": {
1815
+ "resize": 249,
1816
+ "crop": 224,
1817
+ "mean": [
1818
+ 0.485,
1819
+ 0.456,
1820
+ 0.406
1821
+ ],
1822
+ "std": [
1823
+ 0.229,
1824
+ 0.224,
1825
+ 0.225
1826
+ ]
1827
+ }
1828
+ },
1829
+ {
1830
+ "model_name": "pnasnet5large.tf_in1k",
1831
+ "source": "timm",
1832
+ "weights": "imagenet",
1833
+ "layer": "global_pool",
1834
+ "embedding": "flatten",
1835
+ "preprocess": {
1836
+ "resize": 363,
1837
+ "crop": 331,
1838
+ "mean": [
1839
+ 0.5,
1840
+ 0.5,
1841
+ 0.5
1842
+ ],
1843
+ "std": [
1844
+ 0.5,
1845
+ 0.5,
1846
+ 0.5
1847
+ ]
1848
+ }
1849
+ },
1850
+ {
1851
+ "model_name": "poolformer_m36.sail_in1k",
1852
+ "source": "timm",
1853
+ "weights": "imagenet",
1854
+ "layer": "head.global_pool",
1855
+ "embedding": "flatten",
1856
+ "preprocess": {
1857
+ "resize": 236,
1858
+ "crop": 224,
1859
+ "mean": [
1860
+ 0.485,
1861
+ 0.456,
1862
+ 0.406
1863
+ ],
1864
+ "std": [
1865
+ 0.229,
1866
+ 0.224,
1867
+ 0.225
1868
+ ]
1869
+ }
1870
+ },
1871
+ {
1872
+ "model_name": "poolformerv2_m36.sail_in1k",
1873
+ "source": "timm",
1874
+ "weights": "imagenet",
1875
+ "layer": "head.global_pool",
1876
+ "embedding": "flatten",
1877
+ "preprocess": {
1878
+ "resize": 224,
1879
+ "crop": 224,
1880
+ "mean": [
1881
+ 0.485,
1882
+ 0.456,
1883
+ 0.406
1884
+ ],
1885
+ "std": [
1886
+ 0.229,
1887
+ 0.224,
1888
+ 0.225
1889
+ ]
1890
+ }
1891
+ },
1892
+ {
1893
+ "model_name": "pvt_v2_b0.in1k",
1894
+ "source": "timm",
1895
+ "weights": "imagenet",
1896
+ "layer": "stages.3.norm",
1897
+ "embedding": "flatten",
1898
+ "preprocess": {
1899
+ "resize": 249,
1900
+ "crop": 224,
1901
+ "mean": [
1902
+ 0.485,
1903
+ 0.456,
1904
+ 0.406
1905
+ ],
1906
+ "std": [
1907
+ 0.229,
1908
+ 0.224,
1909
+ 0.225
1910
+ ]
1911
+ }
1912
+ },
1913
+ {
1914
+ "model_name": "rdnet_base.nv_in1k",
1915
+ "source": "timm",
1916
+ "weights": "imagenet",
1917
+ "layer": "head.global_pool",
1918
+ "embedding": "flatten",
1919
+ "preprocess": {
1920
+ "resize": 249,
1921
+ "crop": 224,
1922
+ "mean": [
1923
+ 0.485,
1924
+ 0.456,
1925
+ 0.406
1926
+ ],
1927
+ "std": [
1928
+ 0.229,
1929
+ 0.224,
1930
+ 0.225
1931
+ ]
1932
+ }
1933
+ },
1934
+ {
1935
+ "model_name": "regnetv_040.ra3_in1k",
1936
+ "source": "timm",
1937
+ "weights": "imagenet",
1938
+ "layer": "head.global_pool",
1939
+ "embedding": "flatten",
1940
+ "preprocess": {
1941
+ "resize": 236,
1942
+ "crop": 224,
1943
+ "mean": [
1944
+ 0.485,
1945
+ 0.456,
1946
+ 0.406
1947
+ ],
1948
+ "std": [
1949
+ 0.229,
1950
+ 0.224,
1951
+ 0.225
1952
+ ]
1953
+ }
1954
+ },
1955
+ {
1956
+ "model_name": "regnetx_002.pycls_in1k",
1957
+ "source": "timm",
1958
+ "weights": "imagenet",
1959
+ "layer": "head.global_pool",
1960
+ "embedding": "flatten",
1961
+ "preprocess": {
1962
+ "resize": 256,
1963
+ "crop": 224,
1964
+ "mean": [
1965
+ 0.485,
1966
+ 0.456,
1967
+ 0.406
1968
+ ],
1969
+ "std": [
1970
+ 0.229,
1971
+ 0.224,
1972
+ 0.225
1973
+ ]
1974
+ }
1975
+ },
1976
+ {
1977
+ "model_name": "regnety_002.pycls_in1k",
1978
+ "source": "timm",
1979
+ "weights": "imagenet",
1980
+ "layer": "head.global_pool",
1981
+ "embedding": "flatten",
1982
+ "preprocess": {
1983
+ "resize": 256,
1984
+ "crop": 224,
1985
+ "mean": [
1986
+ 0.485,
1987
+ 0.456,
1988
+ 0.406
1989
+ ],
1990
+ "std": [
1991
+ 0.229,
1992
+ 0.224,
1993
+ 0.225
1994
+ ]
1995
+ }
1996
+ },
1997
+ {
1998
+ "model_name": "regnetz_040.ra3_in1k",
1999
+ "source": "timm",
2000
+ "weights": "imagenet",
2001
+ "layer": "head.global_pool",
2002
+ "embedding": "flatten",
2003
+ "preprocess": {
2004
+ "resize": 256,
2005
+ "crop": 256,
2006
+ "mean": [
2007
+ 0.485,
2008
+ 0.456,
2009
+ 0.406
2010
+ ],
2011
+ "std": [
2012
+ 0.229,
2013
+ 0.224,
2014
+ 0.225
2015
+ ]
2016
+ }
2017
+ },
2018
+ {
2019
+ "model_name": "repghostnet_050.in1k",
2020
+ "source": "timm",
2021
+ "weights": "imagenet",
2022
+ "layer": "global_pool",
2023
+ "embedding": "flatten",
2024
+ "preprocess": {
2025
+ "resize": 256,
2026
+ "crop": 224,
2027
+ "mean": [
2028
+ 0.485,
2029
+ 0.456,
2030
+ 0.406
2031
+ ],
2032
+ "std": [
2033
+ 0.229,
2034
+ 0.224,
2035
+ 0.225
2036
+ ]
2037
+ }
2038
+ },
2039
+ {
2040
+ "model_name": "repvgg_a0.rvgg_in1k",
2041
+ "source": "timm",
2042
+ "weights": "imagenet",
2043
+ "layer": "head.global_pool",
2044
+ "embedding": "flatten",
2045
+ "preprocess": {
2046
+ "resize": 256,
2047
+ "crop": 224,
2048
+ "mean": [
2049
+ 0.485,
2050
+ 0.456,
2051
+ 0.406
2052
+ ],
2053
+ "std": [
2054
+ 0.229,
2055
+ 0.224,
2056
+ 0.225
2057
+ ]
2058
+ }
2059
+ },
2060
+ {
2061
+ "model_name": "repvit_m0_9.dist_300e_in1k",
2062
+ "source": "timm",
2063
+ "weights": "imagenet",
2064
+ "layer": "head.head.bn",
2065
+ "embedding": "flatten",
2066
+ "preprocess": {
2067
+ "resize": 236,
2068
+ "crop": 224,
2069
+ "mean": [
2070
+ 0.485,
2071
+ 0.456,
2072
+ 0.406
2073
+ ],
2074
+ "std": [
2075
+ 0.229,
2076
+ 0.224,
2077
+ 0.225
2078
+ ]
2079
+ }
2080
+ },
2081
+ {
2082
+ "model_name": "res2net101_26w_4s.in1k",
2083
+ "source": "timm",
2084
+ "weights": "imagenet",
2085
+ "layer": "global_pool",
2086
+ "embedding": "flatten",
2087
+ "preprocess": {
2088
+ "resize": 256,
2089
+ "crop": 224,
2090
+ "mean": [
2091
+ 0.485,
2092
+ 0.456,
2093
+ 0.406
2094
+ ],
2095
+ "std": [
2096
+ 0.229,
2097
+ 0.224,
2098
+ 0.225
2099
+ ]
2100
+ }
2101
+ },
2102
+ {
2103
+ "model_name": "resmlp_12_224.fb_dino",
2104
+ "source": "timm",
2105
+ "weights": "imagenet",
2106
+ "layer": "norm",
2107
+ "embedding": "flatten",
2108
+ "preprocess": {
2109
+ "resize": 256,
2110
+ "crop": 224,
2111
+ "mean": [
2112
+ 0.485,
2113
+ 0.456,
2114
+ 0.406
2115
+ ],
2116
+ "std": [
2117
+ 0.229,
2118
+ 0.224,
2119
+ 0.225
2120
+ ]
2121
+ }
2122
+ },
2123
+ {
2124
+ "model_name": "resnest101e.in1k",
2125
+ "source": "timm",
2126
+ "weights": "imagenet",
2127
+ "layer": "global_pool",
2128
+ "embedding": "flatten",
2129
+ "preprocess": {
2130
+ "resize": 293,
2131
+ "crop": 256,
2132
+ "mean": [
2133
+ 0.485,
2134
+ 0.456,
2135
+ 0.406
2136
+ ],
2137
+ "std": [
2138
+ 0.229,
2139
+ 0.224,
2140
+ 0.225
2141
+ ]
2142
+ }
2143
+ },
2144
+ {
2145
+ "model_name": "resnet101.a1_in1k",
2146
+ "source": "timm",
2147
+ "weights": "imagenet",
2148
+ "layer": "global_pool",
2149
+ "embedding": "flatten",
2150
+ "preprocess": {
2151
+ "resize": 236,
2152
+ "crop": 224,
2153
+ "mean": [
2154
+ 0.485,
2155
+ 0.456,
2156
+ 0.406
2157
+ ],
2158
+ "std": [
2159
+ 0.229,
2160
+ 0.224,
2161
+ 0.225
2162
+ ]
2163
+ }
2164
+ },
2165
+ {
2166
+ "model_name": "resnetaa101d.sw_in12k",
2167
+ "source": "timm",
2168
+ "weights": "imagenet",
2169
+ "layer": "global_pool",
2170
+ "embedding": "flatten",
2171
+ "preprocess": {
2172
+ "resize": 236,
2173
+ "crop": 224,
2174
+ "mean": [
2175
+ 0.485,
2176
+ 0.456,
2177
+ 0.406
2178
+ ],
2179
+ "std": [
2180
+ 0.229,
2181
+ 0.224,
2182
+ 0.225
2183
+ ]
2184
+ }
2185
+ },
2186
+ {
2187
+ "model_name": "resnetblur50.bt_in1k",
2188
+ "source": "timm",
2189
+ "weights": "imagenet",
2190
+ "layer": "global_pool",
2191
+ "embedding": "flatten",
2192
+ "preprocess": {
2193
+ "resize": 256,
2194
+ "crop": 224,
2195
+ "mean": [
2196
+ 0.485,
2197
+ 0.456,
2198
+ 0.406
2199
+ ],
2200
+ "std": [
2201
+ 0.229,
2202
+ 0.224,
2203
+ 0.225
2204
+ ]
2205
+ }
2206
+ },
2207
+ {
2208
+ "model_name": "resnetrs101.tf_in1k",
2209
+ "source": "timm",
2210
+ "weights": "imagenet",
2211
+ "layer": "global_pool",
2212
+ "embedding": "flatten",
2213
+ "preprocess": {
2214
+ "resize": 204,
2215
+ "crop": 192,
2216
+ "mean": [
2217
+ 0.485,
2218
+ 0.456,
2219
+ 0.406
2220
+ ],
2221
+ "std": [
2222
+ 0.229,
2223
+ 0.224,
2224
+ 0.225
2225
+ ]
2226
+ }
2227
+ },
2228
+ {
2229
+ "model_name": "resnetv2_101.a1h_in1k",
2230
+ "source": "timm",
2231
+ "weights": "imagenet",
2232
+ "layer": "head.global_pool",
2233
+ "embedding": "flatten",
2234
+ "preprocess": {
2235
+ "resize": 236,
2236
+ "crop": 224,
2237
+ "mean": [
2238
+ 0.5,
2239
+ 0.5,
2240
+ 0.5
2241
+ ],
2242
+ "std": [
2243
+ 0.5,
2244
+ 0.5,
2245
+ 0.5
2246
+ ]
2247
+ }
2248
+ },
2249
+ {
2250
+ "model_name": "resnext101_32x16d.fb_ssl_yfcc100m_ft_in1k",
2251
+ "source": "timm",
2252
+ "weights": "imagenet",
2253
+ "layer": "global_pool",
2254
+ "embedding": "flatten",
2255
+ "preprocess": {
2256
+ "resize": 256,
2257
+ "crop": 224,
2258
+ "mean": [
2259
+ 0.485,
2260
+ 0.456,
2261
+ 0.406
2262
+ ],
2263
+ "std": [
2264
+ 0.229,
2265
+ 0.224,
2266
+ 0.225
2267
+ ]
2268
+ }
2269
+ },
2270
+ {
2271
+ "model_name": "rexnet_100.nav_in1k",
2272
+ "source": "timm",
2273
+ "weights": "imagenet",
2274
+ "layer": "head.global_pool",
2275
+ "embedding": "flatten",
2276
+ "preprocess": {
2277
+ "resize": 256,
2278
+ "crop": 224,
2279
+ "mean": [
2280
+ 0.485,
2281
+ 0.456,
2282
+ 0.406
2283
+ ],
2284
+ "std": [
2285
+ 0.229,
2286
+ 0.224,
2287
+ 0.225
2288
+ ]
2289
+ }
2290
+ },
2291
+ {
2292
+ "model_name": "rexnetr_200.sw_in12k",
2293
+ "source": "timm",
2294
+ "weights": "imagenet",
2295
+ "layer": "head.global_pool",
2296
+ "embedding": "flatten",
2297
+ "preprocess": {
2298
+ "resize": 236,
2299
+ "crop": 224,
2300
+ "mean": [
2301
+ 0.485,
2302
+ 0.456,
2303
+ 0.406
2304
+ ],
2305
+ "std": [
2306
+ 0.229,
2307
+ 0.224,
2308
+ 0.225
2309
+ ]
2310
+ }
2311
+ },
2312
+ {
2313
+ "model_name": "sam2_hiera_base_plus.fb_r896",
2314
+ "source": "timm",
2315
+ "weights": "imagenet",
2316
+ "layer": "head.norm",
2317
+ "embedding": "flatten",
2318
+ "preprocess": {
2319
+ "resize": 896,
2320
+ "crop": 896,
2321
+ "mean": [
2322
+ 0.485,
2323
+ 0.456,
2324
+ 0.406
2325
+ ],
2326
+ "std": [
2327
+ 0.229,
2328
+ 0.224,
2329
+ 0.225
2330
+ ]
2331
+ }
2332
+ },
2333
+ {
2334
+ "model_name": "samvit_base_patch16.sa1b",
2335
+ "source": "timm",
2336
+ "weights": "imagenet",
2337
+ "layer": "head.global_pool",
2338
+ "embedding": "flatten",
2339
+ "preprocess": {
2340
+ "resize": 1024,
2341
+ "crop": 1024,
2342
+ "mean": [
2343
+ 0.485,
2344
+ 0.456,
2345
+ 0.406
2346
+ ],
2347
+ "std": [
2348
+ 0.229,
2349
+ 0.224,
2350
+ 0.225
2351
+ ]
2352
+ }
2353
+ },
2354
+ {
2355
+ "model_name": "sebotnet33ts_256.a1h_in1k",
2356
+ "source": "timm",
2357
+ "weights": "imagenet",
2358
+ "layer": "head.global_pool",
2359
+ "embedding": "flatten",
2360
+ "preprocess": {
2361
+ "resize": 272,
2362
+ "crop": 256,
2363
+ "mean": [
2364
+ 0.485,
2365
+ 0.456,
2366
+ 0.406
2367
+ ],
2368
+ "std": [
2369
+ 0.229,
2370
+ 0.224,
2371
+ 0.225
2372
+ ]
2373
+ }
2374
+ },
2375
+ {
2376
+ "model_name": "sehalonet33ts.ra2_in1k",
2377
+ "source": "timm",
2378
+ "weights": "imagenet",
2379
+ "layer": "head.global_pool",
2380
+ "embedding": "flatten",
2381
+ "preprocess": {
2382
+ "resize": 272,
2383
+ "crop": 256,
2384
+ "mean": [
2385
+ 0.485,
2386
+ 0.456,
2387
+ 0.406
2388
+ ],
2389
+ "std": [
2390
+ 0.229,
2391
+ 0.224,
2392
+ 0.225
2393
+ ]
2394
+ }
2395
+ },
2396
+ {
2397
+ "model_name": "selecsls42b.in1k",
2398
+ "source": "timm",
2399
+ "weights": "imagenet",
2400
+ "layer": "global_pool",
2401
+ "embedding": "flatten",
2402
+ "preprocess": {
2403
+ "resize": 256,
2404
+ "crop": 224,
2405
+ "mean": [
2406
+ 0.485,
2407
+ 0.456,
2408
+ 0.406
2409
+ ],
2410
+ "std": [
2411
+ 0.229,
2412
+ 0.224,
2413
+ 0.225
2414
+ ]
2415
+ }
2416
+ },
2417
+ {
2418
+ "model_name": "semnasnet_075.rmsp_in1k",
2419
+ "source": "timm",
2420
+ "weights": "imagenet",
2421
+ "layer": "global_pool",
2422
+ "embedding": "flatten",
2423
+ "preprocess": {
2424
+ "resize": 256,
2425
+ "crop": 224,
2426
+ "mean": [
2427
+ 0.485,
2428
+ 0.456,
2429
+ 0.406
2430
+ ],
2431
+ "std": [
2432
+ 0.229,
2433
+ 0.224,
2434
+ 0.225
2435
+ ]
2436
+ }
2437
+ },
2438
+ {
2439
+ "model_name": "senet154.gluon_in1k",
2440
+ "source": "timm",
2441
+ "weights": "imagenet",
2442
+ "layer": "global_pool",
2443
+ "embedding": "flatten",
2444
+ "preprocess": {
2445
+ "resize": 256,
2446
+ "crop": 224,
2447
+ "mean": [
2448
+ 0.485,
2449
+ 0.456,
2450
+ 0.406
2451
+ ],
2452
+ "std": [
2453
+ 0.229,
2454
+ 0.224,
2455
+ 0.225
2456
+ ]
2457
+ }
2458
+ },
2459
+ {
2460
+ "model_name": "sequencer2d_l.in1k",
2461
+ "source": "timm",
2462
+ "weights": "imagenet",
2463
+ "layer": "head.global_pool",
2464
+ "embedding": "flatten",
2465
+ "preprocess": {
2466
+ "resize": 256,
2467
+ "crop": 224,
2468
+ "mean": [
2469
+ 0.485,
2470
+ 0.456,
2471
+ 0.406
2472
+ ],
2473
+ "std": [
2474
+ 0.229,
2475
+ 0.224,
2476
+ 0.225
2477
+ ]
2478
+ }
2479
+ },
2480
+ {
2481
+ "model_name": "seresnet152d.ra2_in1k",
2482
+ "source": "timm",
2483
+ "weights": "imagenet",
2484
+ "layer": "global_pool",
2485
+ "embedding": "flatten",
2486
+ "preprocess": {
2487
+ "resize": 269,
2488
+ "crop": 256,
2489
+ "mean": [
2490
+ 0.485,
2491
+ 0.456,
2492
+ 0.406
2493
+ ],
2494
+ "std": [
2495
+ 0.229,
2496
+ 0.224,
2497
+ 0.225
2498
+ ]
2499
+ }
2500
+ },
2501
+ {
2502
+ "model_name": "seresnext101_32x4d.gluon_in1k",
2503
+ "source": "timm",
2504
+ "weights": "imagenet",
2505
+ "layer": "global_pool",
2506
+ "embedding": "flatten",
2507
+ "preprocess": {
2508
+ "resize": 256,
2509
+ "crop": 224,
2510
+ "mean": [
2511
+ 0.485,
2512
+ 0.456,
2513
+ 0.406
2514
+ ],
2515
+ "std": [
2516
+ 0.229,
2517
+ 0.224,
2518
+ 0.225
2519
+ ]
2520
+ }
2521
+ },
2522
+ {
2523
+ "model_name": "seresnextaa101d_32x8d.ah_in1k",
2524
+ "source": "timm",
2525
+ "weights": "imagenet",
2526
+ "layer": "global_pool",
2527
+ "embedding": "flatten",
2528
+ "preprocess": {
2529
+ "resize": 236,
2530
+ "crop": 224,
2531
+ "mean": [
2532
+ 0.485,
2533
+ 0.456,
2534
+ 0.406
2535
+ ],
2536
+ "std": [
2537
+ 0.229,
2538
+ 0.224,
2539
+ 0.225
2540
+ ]
2541
+ }
2542
+ },
2543
+ {
2544
+ "model_name": "skresnet18.ra_in1k",
2545
+ "source": "timm",
2546
+ "weights": "imagenet",
2547
+ "layer": "global_pool",
2548
+ "embedding": "flatten",
2549
+ "preprocess": {
2550
+ "resize": 256,
2551
+ "crop": 224,
2552
+ "mean": [
2553
+ 0.485,
2554
+ 0.456,
2555
+ 0.406
2556
+ ],
2557
+ "std": [
2558
+ 0.229,
2559
+ 0.224,
2560
+ 0.225
2561
+ ]
2562
+ }
2563
+ },
2564
+ {
2565
+ "model_name": "skresnext50_32x4d.ra_in1k",
2566
+ "source": "timm",
2567
+ "weights": "imagenet",
2568
+ "layer": "global_pool",
2569
+ "embedding": "flatten",
2570
+ "preprocess": {
2571
+ "resize": 256,
2572
+ "crop": 224,
2573
+ "mean": [
2574
+ 0.485,
2575
+ 0.456,
2576
+ 0.406
2577
+ ],
2578
+ "std": [
2579
+ 0.229,
2580
+ 0.224,
2581
+ 0.225
2582
+ ]
2583
+ }
2584
+ },
2585
+ {
2586
+ "model_name": "spnasnet_100.rmsp_in1k",
2587
+ "source": "timm",
2588
+ "weights": "imagenet",
2589
+ "layer": "global_pool",
2590
+ "embedding": "flatten",
2591
+ "preprocess": {
2592
+ "resize": 256,
2593
+ "crop": 224,
2594
+ "mean": [
2595
+ 0.485,
2596
+ 0.456,
2597
+ 0.406
2598
+ ],
2599
+ "std": [
2600
+ 0.229,
2601
+ 0.224,
2602
+ 0.225
2603
+ ]
2604
+ }
2605
+ },
2606
+ {
2607
+ "model_name": "swin_base_patch4_window12_384.ms_in1k",
2608
+ "source": "timm",
2609
+ "weights": "imagenet",
2610
+ "layer": "head.global_pool",
2611
+ "embedding": "flatten",
2612
+ "preprocess": {
2613
+ "resize": 384,
2614
+ "crop": 384,
2615
+ "mean": [
2616
+ 0.485,
2617
+ 0.456,
2618
+ 0.406
2619
+ ],
2620
+ "std": [
2621
+ 0.229,
2622
+ 0.224,
2623
+ 0.225
2624
+ ]
2625
+ }
2626
+ },
2627
+ {
2628
+ "model_name": "swinv2_base_window12_192.ms_in22k",
2629
+ "source": "timm",
2630
+ "weights": "imagenet",
2631
+ "layer": "head.global_pool",
2632
+ "embedding": "flatten",
2633
+ "preprocess": {
2634
+ "resize": 213,
2635
+ "crop": 192,
2636
+ "mean": [
2637
+ 0.485,
2638
+ 0.456,
2639
+ 0.406
2640
+ ],
2641
+ "std": [
2642
+ 0.229,
2643
+ 0.224,
2644
+ 0.225
2645
+ ]
2646
+ }
2647
+ },
2648
+ {
2649
+ "model_name": "test_byobnet.r160_in1k",
2650
+ "source": "timm",
2651
+ "weights": "imagenet",
2652
+ "layer": "head.global_pool",
2653
+ "embedding": "flatten",
2654
+ "preprocess": {
2655
+ "resize": 168,
2656
+ "crop": 160,
2657
+ "mean": [
2658
+ 0.485,
2659
+ 0.456,
2660
+ 0.406
2661
+ ],
2662
+ "std": [
2663
+ 0.229,
2664
+ 0.224,
2665
+ 0.225
2666
+ ]
2667
+ }
2668
+ },
2669
+ {
2670
+ "model_name": "tf_efficientnet_b0.aa_in1k",
2671
+ "source": "timm",
2672
+ "weights": "imagenet",
2673
+ "layer": "global_pool",
2674
+ "embedding": "flatten",
2675
+ "preprocess": {
2676
+ "resize": 256,
2677
+ "crop": 224,
2678
+ "mean": [
2679
+ 0.485,
2680
+ 0.456,
2681
+ 0.406
2682
+ ],
2683
+ "std": [
2684
+ 0.229,
2685
+ 0.224,
2686
+ 0.225
2687
+ ]
2688
+ }
2689
+ },
2690
+ {
2691
+ "model_name": "tiny_vit_11m_224.dist_in22k",
2692
+ "source": "timm",
2693
+ "weights": "imagenet",
2694
+ "layer": "head.global_pool",
2695
+ "embedding": "flatten",
2696
+ "preprocess": {
2697
+ "resize": 236,
2698
+ "crop": 224,
2699
+ "mean": [
2700
+ 0.485,
2701
+ 0.456,
2702
+ 0.406
2703
+ ],
2704
+ "std": [
2705
+ 0.229,
2706
+ 0.224,
2707
+ 0.225
2708
+ ]
2709
+ }
2710
+ },
2711
+ {
2712
+ "model_name": "tinynet_a.in1k",
2713
+ "source": "timm",
2714
+ "weights": "imagenet",
2715
+ "layer": "global_pool",
2716
+ "embedding": "flatten",
2717
+ "preprocess": {
2718
+ "resize": 219,
2719
+ "crop": 192,
2720
+ "mean": [
2721
+ 0.485,
2722
+ 0.456,
2723
+ 0.406
2724
+ ],
2725
+ "std": [
2726
+ 0.229,
2727
+ 0.224,
2728
+ 0.225
2729
+ ]
2730
+ }
2731
+ },
2732
+ {
2733
+ "model_name": "tnt_s_patch16_224",
2734
+ "source": "timm",
2735
+ "weights": "imagenet",
2736
+ "layer": "norm",
2737
+ "embedding": "flatten",
2738
+ "preprocess": {
2739
+ "resize": 249,
2740
+ "crop": 224,
2741
+ "mean": [
2742
+ 0.5,
2743
+ 0.5,
2744
+ 0.5
2745
+ ],
2746
+ "std": [
2747
+ 0.5,
2748
+ 0.5,
2749
+ 0.5
2750
+ ]
2751
+ }
2752
+ },
2753
+ {
2754
+ "model_name": "tresnet_l.miil_in1k",
2755
+ "source": "timm",
2756
+ "weights": "imagenet",
2757
+ "layer": "head.global_pool",
2758
+ "embedding": "flatten",
2759
+ "preprocess": {
2760
+ "resize": 256,
2761
+ "crop": 224,
2762
+ "mean": [
2763
+ 0.0,
2764
+ 0.0,
2765
+ 0.0
2766
+ ],
2767
+ "std": [
2768
+ 1.0,
2769
+ 1.0,
2770
+ 1.0
2771
+ ]
2772
+ }
2773
+ },
2774
+ {
2775
+ "model_name": "twins_pcpvt_base.in1k",
2776
+ "source": "timm",
2777
+ "weights": "imagenet",
2778
+ "layer": "norm",
2779
+ "embedding": "flatten",
2780
+ "preprocess": {
2781
+ "resize": 249,
2782
+ "crop": 224,
2783
+ "mean": [
2784
+ 0.485,
2785
+ 0.456,
2786
+ 0.406
2787
+ ],
2788
+ "std": [
2789
+ 0.229,
2790
+ 0.224,
2791
+ 0.225
2792
+ ]
2793
+ }
2794
+ },
2795
+ {
2796
+ "model_name": "vgg11.tv_in1k",
2797
+ "source": "timm",
2798
+ "weights": "imagenet",
2799
+ "layer": "head.global_pool",
2800
+ "embedding": "flatten",
2801
+ "preprocess": {
2802
+ "resize": 256,
2803
+ "crop": 224,
2804
+ "mean": [
2805
+ 0.485,
2806
+ 0.456,
2807
+ 0.406
2808
+ ],
2809
+ "std": [
2810
+ 0.229,
2811
+ 0.224,
2812
+ 0.225
2813
+ ]
2814
+ }
2815
+ },
2816
+ {
2817
+ "model_name": "visformer_small.in1k",
2818
+ "source": "timm",
2819
+ "weights": "imagenet",
2820
+ "layer": "global_pool",
2821
+ "embedding": "flatten",
2822
+ "preprocess": {
2823
+ "resize": 249,
2824
+ "crop": 224,
2825
+ "mean": [
2826
+ 0.485,
2827
+ 0.456,
2828
+ 0.406
2829
+ ],
2830
+ "std": [
2831
+ 0.229,
2832
+ 0.224,
2833
+ 0.225
2834
+ ]
2835
+ }
2836
+ },
2837
+ {
2838
+ "model_name": "vit_base_mci_224.apple_mclip",
2839
+ "source": "timm",
2840
+ "weights": "imagenet",
2841
+ "layer": "fc_norm",
2842
+ "embedding": "flatten",
2843
+ "preprocess": {
2844
+ "resize": 249,
2845
+ "crop": 224,
2846
+ "mean": [
2847
+ 0.0,
2848
+ 0.0,
2849
+ 0.0
2850
+ ],
2851
+ "std": [
2852
+ 1.0,
2853
+ 1.0,
2854
+ 1.0
2855
+ ]
2856
+ }
2857
+ },
2858
+ {
2859
+ "model_name": "vitamin_base_224.datacomp1b_clip",
2860
+ "source": "timm",
2861
+ "weights": "imagenet",
2862
+ "layer": "fc_norm",
2863
+ "embedding": "flatten",
2864
+ "preprocess": {
2865
+ "resize": 249,
2866
+ "crop": 224,
2867
+ "mean": [
2868
+ 0.481,
2869
+ 0.458,
2870
+ 0.408
2871
+ ],
2872
+ "std": [
2873
+ 0.269,
2874
+ 0.261,
2875
+ 0.276
2876
+ ]
2877
+ }
2878
+ },
2879
+ {
2880
+ "model_name": "volo_d1_224.sail_in1k",
2881
+ "source": "timm",
2882
+ "weights": "imagenet",
2883
+ "layer": "norm",
2884
+ "embedding": "flatten",
2885
+ "preprocess": {
2886
+ "resize": 233,
2887
+ "crop": 224,
2888
+ "mean": [
2889
+ 0.485,
2890
+ 0.456,
2891
+ 0.406
2892
+ ],
2893
+ "std": [
2894
+ 0.229,
2895
+ 0.224,
2896
+ 0.225
2897
+ ]
2898
+ }
2899
+ },
2900
+ {
2901
+ "model_name": "wide_resnet101_2.tv2_in1k",
2902
+ "source": "timm",
2903
+ "weights": "imagenet",
2904
+ "layer": "global_pool",
2905
+ "embedding": "flatten",
2906
+ "preprocess": {
2907
+ "resize": 201,
2908
+ "crop": 176,
2909
+ "mean": [
2910
+ 0.485,
2911
+ 0.456,
2912
+ 0.406
2913
+ ],
2914
+ "std": [
2915
+ 0.229,
2916
+ 0.224,
2917
+ 0.225
2918
+ ]
2919
+ }
2920
+ },
2921
+ {
2922
+ "model_name": "xception41.tf_in1k",
2923
+ "source": "timm",
2924
+ "weights": "imagenet",
2925
+ "layer": "head.global_pool",
2926
+ "embedding": "flatten",
2927
+ "preprocess": {
2928
+ "resize": 331,
2929
+ "crop": 299,
2930
+ "mean": [
2931
+ 0.5,
2932
+ 0.5,
2933
+ 0.5
2934
+ ],
2935
+ "std": [
2936
+ 0.5,
2937
+ 0.5,
2938
+ 0.5
2939
+ ]
2940
+ }
2941
+ },
2942
+ {
2943
+ "model_name": "xcit_large_24_p16_224.fb_dist_in1k",
2944
+ "source": "timm",
2945
+ "weights": "imagenet",
2946
+ "layer": "norm",
2947
+ "embedding": "flatten",
2948
+ "preprocess": {
2949
+ "resize": 224,
2950
+ "crop": 224,
2951
+ "mean": [
2952
+ 0.485,
2953
+ 0.456,
2954
+ 0.406
2955
+ ],
2956
+ "std": [
2957
+ 0.229,
2958
+ 0.224,
2959
+ 0.225
2960
+ ]
2961
+ }
2962
+ }
2963
+ ]
configs/dataset_roots.example.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "cifar100": "${DATA_ROOT}/cifar100",
3
+ "imagenet1k": "${DATA_ROOT}/imagenet1k"
4
+ }
configs/one_model_per_family.json ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "aimv2_1b_patch14_224.apple_pt",
3
+ "bat_resnext26ts.ch_in1k",
4
+ "beit_base_patch16_224.in22k_ft_in22k",
5
+ "beitv2_base_patch16_224.in1k_ft_in1k",
6
+ "botnet26t_256.c1_in1k",
7
+ "caformer_b36.sail_in1k",
8
+ "cait_m36_384.fb_dist_in1k",
9
+ "coat_lite_medium.in1k",
10
+ "coatnet_0_rw_224.sw_in1k",
11
+ "coatnext_nano_rw_224.sw_in1k",
12
+ "convformer_b36.sail_in1k",
13
+ "convit_base.fb_in1k",
14
+ "convmixer_1024_20_ks9_p14.in1k",
15
+ "convnext_atto.d2_in1k",
16
+ "convnextv2_atto.fcmae",
17
+ "crossvit_15_240.in1k",
18
+ "cs3darknet_focus_l.c2ns_in1k",
19
+ "cspdarknet53.ra_in1k",
20
+ "cspresnet50.ra_in1k",
21
+ "cspresnext50.ra_in1k",
22
+ "darknet53.c2ns_in1k",
23
+ "darknetaa53.c2ns_in1k",
24
+ "davit_base.msft_in1k",
25
+ "deit3_base_patch16_224.fb_in1k",
26
+ "densenet121.ra_in1k",
27
+ "densenetblur121d.ra_in1k",
28
+ "dla102.in1k",
29
+ "dm_nfnet_f0.dm_in1k",
30
+ "dpn107.mx_in1k",
31
+ "eca_botnext26ts_256.c1_in1k",
32
+ "ecaresnet101d.miil_in1k",
33
+ "ecaresnetlight.miil_in1k",
34
+ "edgenext_base.in21k_ft_in1k",
35
+ "efficientformer_l1.snap_dist_in1k",
36
+ "efficientformerv2_l.snap_dist_in1k",
37
+ "efficientnet_b0.ra4_e3600_r224_in1k",
38
+ "efficientnetv2_rw_m.agc_in1k",
39
+ "efficientvit_b0.r224_in1k",
40
+ "ese_vovnet19b_dw.ra_in1k",
41
+ "eva02_base_patch14_224.mim_in22k",
42
+ "fastvit_ma36.apple_dist_in1k",
43
+ "fbnetc_100.rmsp_in1k",
44
+ "fbnetv3_b.ra2_in1k",
45
+ "flexivit_base.1000ep_in21k",
46
+ "focalnet_base_lrf.ms_in1k",
47
+ "gc_efficientnetv2_rw_t.agc_in1k",
48
+ "gcresnet33ts.ra2_in1k",
49
+ "gcresnext26ts.ch_in1k",
50
+ "gcvit_base.in1k",
51
+ "gernet_l.idstcv_in1k",
52
+ "ghostnet_100.in1k",
53
+ "ghostnetv2_100.in1k",
54
+ "gmixer_24_224.ra3_in1k",
55
+ "gmlp_s16_224.ra3_in1k",
56
+ "halo2botnet50ts_256.a1h_in1k",
57
+ "halonet26t.a1h_in1k",
58
+ "haloregnetz_b.ra3_in1k",
59
+ "hardcorenas_a.miil_green_in1k",
60
+ "hgnet_base.ssld_in1k",
61
+ "hgnetv2_b0.ssld_stage1_in22k_in1k",
62
+ "hiera_base_224.mae",
63
+ "hrnet_w18.ms_aug_in1k",
64
+ "inception_next_atto.sail_in1k",
65
+ "lambda_resnet26rpt_256.c1_in1k",
66
+ "lamhalobotnet50ts_256.a1h_in1k",
67
+ "lcnet_050.ra2_in1k",
68
+ "legacy_senet154.in1k",
69
+ "levit_128.fb_dist_in1k",
70
+ "mambaout_base.in1k",
71
+ "maxvit_base_tf_224.in1k",
72
+ "maxxvit_rmlp_nano_rw_256.sw_in1k",
73
+ "maxxvitv2_nano_rw_256.sw_in1k",
74
+ "mixer_b16_224.goog_in21k",
75
+ "mixnet_l.ft_in1k",
76
+ "mnasnet_100.rmsp_in1k",
77
+ "mobilenet_edgetpu_v2_m.ra4_e3600_r224_in1k",
78
+ "mobilenetv1_100.ra4_e3600_r224_in1k",
79
+ "mobileone_s0.apple_in1k",
80
+ "mobilevit_s.cvnets_in1k",
81
+ "mobilevitv2_050.cvnets_in1k",
82
+ "mvitv2_base.fb_in1k",
83
+ "nasnetalarge.tf_in1k",
84
+ "nest_base_jx.goog_in1k",
85
+ "nextvit_base.bd_in1k",
86
+ "nf_regnet_b1.ra2_in1k",
87
+ "nfnet_l0.ra2_in1k",
88
+ "pit_b_224.in1k",
89
+ "pnasnet5large.tf_in1k",
90
+ "poolformer_m36.sail_in1k",
91
+ "poolformerv2_m36.sail_in1k",
92
+ "pvt_v2_b0.in1k",
93
+ "rdnet_base.nv_in1k",
94
+ "regnetv_040.ra3_in1k",
95
+ "regnetx_002.pycls_in1k",
96
+ "regnety_002.pycls_in1k",
97
+ "regnetz_040.ra3_in1k",
98
+ "repghostnet_050.in1k",
99
+ "repvgg_a0.rvgg_in1k",
100
+ "repvit_m0_9.dist_300e_in1k",
101
+ "res2net101_26w_4s.in1k",
102
+ "resmlp_12_224.fb_dino",
103
+ "resnest101e.in1k",
104
+ "resnet101.a1_in1k",
105
+ "resnetaa101d.sw_in12k",
106
+ "resnetblur50.bt_in1k",
107
+ "resnetrs101.tf_in1k",
108
+ "resnetv2_101.a1h_in1k",
109
+ "resnext101_32x16d.fb_ssl_yfcc100m_ft_in1k",
110
+ "rexnet_100.nav_in1k",
111
+ "rexnetr_200.sw_in12k",
112
+ "sam2_hiera_base_plus.fb_r896",
113
+ "samvit_base_patch16.sa1b",
114
+ "sebotnet33ts_256.a1h_in1k",
115
+ "sehalonet33ts.ra2_in1k",
116
+ "selecsls42b.in1k",
117
+ "semnasnet_075.rmsp_in1k",
118
+ "senet154.gluon_in1k",
119
+ "sequencer2d_l.in1k",
120
+ "seresnet152d.ra2_in1k",
121
+ "seresnext101_32x4d.gluon_in1k",
122
+ "seresnextaa101d_32x8d.ah_in1k",
123
+ "skresnet18.ra_in1k",
124
+ "skresnext50_32x4d.ra_in1k",
125
+ "spnasnet_100.rmsp_in1k",
126
+ "swin_base_patch4_window12_384.ms_in1k",
127
+ "swinv2_base_window12_192.ms_in22k",
128
+ "test_byobnet.r160_in1k",
129
+ "tf_efficientnet_b0.aa_in1k",
130
+ "tiny_vit_11m_224.dist_in22k",
131
+ "tinynet_a.in1k",
132
+ "tnt_s_patch16_224",
133
+ "tresnet_l.miil_in1k",
134
+ "twins_pcpvt_base.in1k",
135
+ "vgg11.tv_in1k",
136
+ "visformer_small.in1k",
137
+ "vit_base_mci_224.apple_mclip",
138
+ "vitamin_base_224.datacomp1b_clip",
139
+ "volo_d1_224.sail_in1k",
140
+ "wide_resnet101_2.tv2_in1k",
141
+ "xception41.tf_in1k",
142
+ "xcit_large_24_p16_224.fb_dist_in1k"
143
+ ]
configs/red_team_stimuli_catalog.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
configs/red_team_stimuli_catalog_1000.jsonl ADDED
@@ -0,0 +1,1000 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/squeeze_bottle/b1bf76af613f4e5.png"}
2
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/removable_blade/e2bf20ba149a4c7.png"}
3
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/t-shirt/6ffb204d00cb4e1.png"}
4
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/shovel/f58ffea39d50451.png"}
5
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030148.JPEG"}
6
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032555.JPEG"}
7
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coin_money/57c3561e3345404.png"}
8
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/88cf36f4d38f451.png"}
9
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cutting_board/e31ab4b808384b7.png"}
10
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_cap/e63ecf12d9e5468.png"}
11
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/calendar/6dc093056358437.png"}
12
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009422.JPEG"}
13
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/detergent/099013e091f547c.png"}
14
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bread_knife/7f0e35c3a36d4a0.png"}
15
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029516.JPEG"}
16
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001425.JPEG"}
17
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007254.JPEG"}
18
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baseball_glove/387f1e67d297417.png"}
19
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007241.JPEG"}
20
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/keyboard/9c9cd250704a46e.png"}
21
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/running_shoe/0edc35d855c346d.png"}
22
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036450.JPEG"}
23
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/power_cable/8319feb4cb7d412.png"}
24
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001750.JPEG"}
25
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/stapler/e5be55d9c441467.png"}
26
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031288.JPEG"}
27
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043002.JPEG"}
28
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/comb/bdfb12e1d4c7421.png"}
29
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_case/5b72ee0917034ab.png"}
30
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035198.JPEG"}
31
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/headphones_over_ear/7e573608c42247d.png"}
32
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sweater/4308e39fc6a841d.png"}
33
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015842.JPEG"}
34
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/headphones_over_ear/9350bf01f5fb416.png"}
35
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tv/d8da99d81bd94f5.png"}
36
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blanket/0407d6efb50240a.png"}
37
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress/60e1892db73c449.png"}
38
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/butchers_knife/633eef56c950400.png"}
39
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024684.JPEG"}
40
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020955.JPEG"}
41
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021975.JPEG"}
42
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037665.JPEG"}
43
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/computer_mouse/565de77253ab46c.png"}
44
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035655.JPEG"}
45
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001811.JPEG"}
46
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019185.JPEG"}
47
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048453.JPEG"}
48
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034348.JPEG"}
49
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025633.JPEG"}
50
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001942.JPEG"}
51
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034618.JPEG"}
52
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020937.JPEG"}
53
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/book_closed/024267b1dbb7470.png"}
54
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dvd_player/d00f2434c2a84ec.png"}
55
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002600.JPEG"}
56
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041243.JPEG"}
57
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037321.JPEG"}
58
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pitcher/b6a0387ca60b425.png"}
59
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042264.JPEG"}
60
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pencil/f016d1bb8c5040f.png"}
61
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/butter/4619fc369b53442.png"}
62
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043487.JPEG"}
63
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044545.JPEG"}
64
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042647.JPEG"}
65
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031853.JPEG"}
66
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027891.JPEG"}
67
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/65c8d50233494dc.png"}
68
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/e3e3546d66074e3.png"}
69
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/frying_pan/886511cef3a642a.png"}
70
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015101.JPEG"}
71
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019866.JPEG"}
72
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/66267c7d31fa47b.png"}
73
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/flashlight/76ad851f2cb14bf.png"}
74
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chocolate/80fec4222c8c4c6.png"}
75
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034053.JPEG"}
76
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021843.JPEG"}
77
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/kettle/fbb9232b58b4478.png"}
78
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/contact_lens_case/61aa995b4e6c476.png"}
79
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cd_case/0725b3cb2b0742c.png"}
80
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040783.JPEG"}
81
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pill_bottle/db951db00c2e404.png"}
82
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/538259d200db44c.png"}
83
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/leaf/aea05abcfa294ae.png"}
84
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chess_piece/fef8bf92c5ab4bb.png"}
85
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toaster/cc9aee48a7b749a.png"}
86
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/thermometer/e6bbf75768f244f.png"}
87
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00033487.JPEG"}
88
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027154.JPEG"}
89
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047877.JPEG"}
90
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothbrush/8f3380e27d354e2.png"}
91
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021509.JPEG"}
92
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025763.JPEG"}
93
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/speaker/906196b73fcf447.png"}
94
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009326.JPEG"}
95
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002082.JPEG"}
96
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toaster/f53d84758aba425.png"}
97
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/frying_pan/b10b286f45d94ca.png"}
98
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blouse/3f8c0b3ad7144c0.png"}
99
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mug/6567df2f9b1440e.png"}
100
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/calendar/43670a9f6aa744c.png"}
101
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tv/c8425c9e410b4a3.png"}
102
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tray/f43d0064b7814aa.png"}
103
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/battery/617bd315e98a43b.png"}
104
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012940.JPEG"}
105
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007023.JPEG"}
106
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spatula/236a8ce161ac4f1.png"}
107
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/binder_closed/644380f74cd7447.png"}
108
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044849.JPEG"}
109
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tongs/b1cac0c1aaef47d.png"}
110
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020642.JPEG"}
111
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/binder_closed/760cca96be82486.png"}
112
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/belt/f0d25265db38484.png"}
113
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030807.JPEG"}
114
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/thermos/4d6a315e681842a.png"}
115
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015492.JPEG"}
116
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/beer_can/417a6777074845c.png"}
117
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036756.JPEG"}
118
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037395.JPEG"}
119
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/battery/60151ea53315461.png"}
120
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035628.JPEG"}
121
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004822.JPEG"}
122
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034722.JPEG"}
123
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_case/8848499fec90441.png"}
124
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031181.JPEG"}
125
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/strainer/1f45b186749c4b3.png"}
126
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010784.JPEG"}
127
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038706.JPEG"}
128
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019309.JPEG"}
129
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036388.JPEG"}
130
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/full_sized_towel/ed1ede131e9a462.png"}
131
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038913.JPEG"}
132
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017323.JPEG"}
133
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/soap_dispenser/1852511b0c25461.png"}
134
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035486.JPEG"}
135
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00014144.JPEG"}
136
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026129.JPEG"}
137
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toaster/abdaef3d51804c1.png"}
138
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_stopper/5b5e4a8a113f49c.png"}
139
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/safety_pin/54a2ede3241744b.png"}
140
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drill/95bcb795ca0c4bc.png"}
141
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000444.JPEG"}
142
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/whisk/7880ea6b64f8470.png"}
143
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002987.JPEG"}
144
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031231.JPEG"}
145
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025831.JPEG"}
146
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/table_knife/d13e23b6147f47e.png"}
147
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wine_glass/bea15983b65e4e7.png"}
148
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021410.JPEG"}
149
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016416.JPEG"}
150
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_machine/e67e4e03f8df468.png"}
151
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/belt/8d31ad0a6e3845c.png"}
152
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lighter/c7f6689deaf54a6.png"}
153
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/egg/9894c84551b743f.png"}
154
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/clothes_hamper/0224f90ea9aa44a.png"}
155
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026425.JPEG"}
156
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012082.JPEG"}
157
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008364.JPEG"}
158
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/usb_flash_drive/3a41d4880cd14ca.png"}
159
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/comb/fd6eac792666431.png"}
160
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/standing_lamp/7cd1168b208247f.png"}
161
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022765.JPEG"}
162
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043026.JPEG"}
163
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paperclip/e7f514209f114e8.png"}
164
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/b4d4e541ecda435.png"}
165
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tomato/e77a27d4da084e4.png"}
166
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005493.JPEG"}
167
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000448.JPEG"}
168
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046574.JPEG"}
169
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/power_cable/01663a204c784e2.png"}
170
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043014.JPEG"}
171
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/belt/3e00504a44fc4da.png"}
172
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005552.JPEG"}
173
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034770.JPEG"}
174
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047637.JPEG"}
175
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plastic_cup/89b36b46d75d474.png"}
176
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blanket/247ad2a0f233430.png"}
177
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/remote_control/44e5a43cf61940a.png"}
178
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sugar_container/e61961fa17e04d0.png"}
179
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021487.JPEG"}
180
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001239.JPEG"}
181
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup_brush/824a5ef5518e453.png"}
182
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030089.JPEG"}
183
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030893.JPEG"}
184
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wrench/7950a5c540ad416.png"}
185
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bed_sheet/f862d80687954a8.png"}
186
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/floss_container/0b782d56450f4ac.png"}
187
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/printer/a2465098b4ef4ed.png"}
188
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010412.JPEG"}
189
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015644.JPEG"}
190
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012775.JPEG"}
191
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/walking_cane/f540bd630f62498.png"}
192
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/broom/664329264cf54bc.png"}
193
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019518.JPEG"}
194
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plate/53bd6eeb9a82426.png"}
195
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paper_plates/a91ab80f951043f.png"}
196
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cereal/a48da92553864ae.png"}
197
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lemon/dbd5a6a504be486.png"}
198
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_mirror/4827da45d0724d0.png"}
199
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048275.JPEG"}
200
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005150.JPEG"}
201
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/680b32c472cb4a1.png"}
202
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041819.JPEG"}
203
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/speaker/1ee5aeff2f20486.png"}
204
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017928.JPEG"}
205
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bills_money/8558ce8aa5394bb.png"}
206
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/biscuits/8065448f73c3458.png"}
207
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022424.JPEG"}
208
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016890.JPEG"}
209
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019560.JPEG"}
210
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toy/22c05d1434d64bd.png"}
211
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045714.JPEG"}
212
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/water_bottle/236970770283471.png"}
213
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005957.JPEG"}
214
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038625.JPEG"}
215
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sponge/ff1fc28821d146b.png"}
216
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002267.JPEG"}
217
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026456.JPEG"}
218
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048824.JPEG"}
219
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004979.JPEG"}
220
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021223.JPEG"}
221
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037447.JPEG"}
222
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress_shoe_women/f1ca3a4a73c8473.png"}
223
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pliers/48de03d7d3a4467.png"}
224
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bed_sheet/b3e4dcef0a8443a.png"}
225
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/canned_food/81274c05d83c46e.png"}
226
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024071.JPEG"}
227
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043603.JPEG"}
228
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030129.JPEG"}
229
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029093.JPEG"}
230
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pen/1db7fa8a9e1c484.png"}
231
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/full_sized_towel/801fa1cf742e49e.png"}
232
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000618.JPEG"}
233
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/walker/7ac46e8115ce4d9.png"}
234
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/book_closed/eef57f4053a8475.png"}
235
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/flour_container/c10570b89e25489.png"}
236
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002094.JPEG"}
237
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/book_closed/d86d01a9d72a455.png"}
238
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/squeegee/bc9b8531cbca413.png"}
239
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothbrush/2ece3c2b55bb4dd.png"}
240
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothpaste/9abfb2a834c54d4.png"}
241
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025471.JPEG"}
242
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/notepad/5543d07ff32f446.png"}
243
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025454.JPEG"}
244
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baking_sheet/ee88b2b7d5c34cf.png"}
245
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031757.JPEG"}
246
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/strainer/6c137e203b7e461.png"}
247
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026484.JPEG"}
248
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/doormat/2279faba665e471.png"}
249
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011803.JPEG"}
250
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hair_brush/b91540597f6042a.png"}
251
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026936.JPEG"}
252
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039390.JPEG"}
253
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036478.JPEG"}
254
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047938.JPEG"}
255
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lighter/57ffdb2f9b68466.png"}
256
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mixing_salad_bowl/de572cab6a5f403.png"}
257
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/butchers_knife/3c10959f0d5f4f3.png"}
258
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/desk_lamp/9e45f3e3ad0d429.png"}
259
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007974.JPEG"}
260
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049374.JPEG"}
261
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040731.JPEG"}
262
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/7c148be08c744e4.png"}
263
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002341.JPEG"}
264
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019592.JPEG"}
265
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022143.JPEG"}
266
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/boots/d02c5e9f4804453.png"}
267
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cooking_oil_bottle/a977aa20506b4a2.png"}
268
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046618.JPEG"}
269
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031006.JPEG"}
270
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025264.JPEG"}
271
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008701.JPEG"}
272
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/alarm_clock/049e2d2518994a7.png"}
273
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013727.JPEG"}
274
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024143.JPEG"}
275
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00018103.JPEG"}
276
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/skirt/2280c2e0b439400.png"}
277
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020820.JPEG"}
278
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sweater/9c033054435e441.png"}
279
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/fork/b167d417f28d439.png"}
280
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/oven_mitts/69c4a331b89a43a.png"}
281
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/printer/b3112a8ecb2a4ee.png"}
282
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026005.JPEG"}
283
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/combination_lock/8c4ab40393c445e.png"}
284
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/51ae9ea878c74a7.png"}
285
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049572.JPEG"}
286
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sleeping_bag/ae78f3e743864d0.png"}
287
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041224.JPEG"}
288
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/necklace/103cc6be5c9b437.png"}
289
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045519.JPEG"}
290
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040171.JPEG"}
291
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/briefcase/daa4a87ba9cf49b.png"}
292
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021678.JPEG"}
293
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036265.JPEG"}
294
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009060.JPEG"}
295
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010796.JPEG"}
296
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049742.JPEG"}
297
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044992.JPEG"}
298
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/earbuds/6ce30f453dc9421.png"}
299
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/salt_shaker/5563388ad218419.png"}
300
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013052.JPEG"}
301
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pepper_shaker/000af6c5de1a4be.png"}
302
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010244.JPEG"}
303
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cooking_oil_bottle/20068f6d06e64b5.png"}
304
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001197.JPEG"}
305
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/weight_scale/e0547138d89f40d.png"}
306
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/teabag/7b01856eec7a4ee.png"}
307
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021448.JPEG"}
308
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sunglasses/3999c8ee6086428.png"}
309
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cheese/18ebf7c57b8845b.png"}
310
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trash_bag/b776439b2542498.png"}
311
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005806.JPEG"}
312
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042532.JPEG"}
313
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/document_folder_closed/4daf29484b4e458.png"}
314
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_stopper/43b414dead26471.png"}
315
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048865.JPEG"}
316
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041773.JPEG"}
317
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020774.JPEG"}
318
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012871.JPEG"}
319
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/banana/1d9012017b2a47a.png"}
320
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lemon/d40882a083f0401.png"}
321
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/frying_pan/748f23a9d621456.png"}
322
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spray_bottle/9330ee3e1a46478.png"}
323
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chess_piece/2c912029db4342d.png"}
324
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/canned_food/a3332a76db4a410.png"}
325
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/basket/82976cc3e4e5477.png"}
326
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coaster/37268365e9394af.png"}
327
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039370.JPEG"}
328
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/key_chain/cfe281dc442047a.png"}
329
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000684.JPEG"}
330
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tape/eafe67c6fa40401.png"}
331
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001824.JPEG"}
332
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_grinder/4c5aafcad004488.png"}
333
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022458.JPEG"}
334
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049453.JPEG"}
335
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045866.JPEG"}
336
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/table_knife/49efcd5f0c7a470.png"}
337
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034085.JPEG"}
338
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00023841.JPEG"}
339
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031526.JPEG"}
340
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004039.JPEG"}
341
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015256.JPEG"}
342
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017318.JPEG"}
343
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trash_bag/eef8c5a6b6e84e1.png"}
344
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/band_aid/9ab0dcfe1fa54c6.png"}
345
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bread_knife/ea21d298af0d4f1.png"}
346
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000054.JPEG"}
347
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nut_for_screw/60520e1e00364fc.png"}
348
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049387.JPEG"}
349
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chair/079c0a83bd4642c.png"}
350
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/binder_closed/460b2e47f1884d2.png"}
351
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034217.JPEG"}
352
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/oven_mitts/5b256195400a4aa.png"}
353
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/basket/c7429406e57944c.png"}
354
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress_shirt/8b227b8a5bb948a.png"}
355
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/butter/3012643a8cac4b6.png"}
356
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024941.JPEG"}
357
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032563.JPEG"}
358
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/contact_lens_case/187071f39cab494.png"}
359
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00014205.JPEG"}
360
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/kettle/9f292a503894405.png"}
361
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wok/a6d0b0585f2e49c.png"}
362
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cd_case/97c275cd83084b3.png"}
363
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045507.JPEG"}
364
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_towel_or_rag/a667fab686b648d.png"}
365
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/full_sized_towel/7354a9fab20f4c6.png"}
366
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spray_bottle/5c21ff945da54ca.png"}
367
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/candle/f52efb412dc54af.png"}
368
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047665.JPEG"}
369
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00028091.JPEG"}
370
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00028423.JPEG"}
371
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tote_bag/c79fd51e087540e.png"}
372
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chess_piece/11a8d1316830470.png"}
373
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009591.JPEG"}
374
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022846.JPEG"}
375
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/phone_landline/059152a06bab4e8.png"}
376
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021289.JPEG"}
377
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nut_for_screw/ae45f7eaa42246b.png"}
378
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034822.JPEG"}
379
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036940.JPEG"}
380
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032962.JPEG"}
381
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paper_plates/b148c1d12b8845b.png"}
382
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toilet_paper_roll/49123ff7378143a.png"}
383
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00014427.JPEG"}
384
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/key_chain/32ffdbe06b184af.png"}
385
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/battery/fb8bd76be7ad49b.png"}
386
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027909.JPEG"}
387
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004253.JPEG"}
388
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothbrush/a16e6abcf22347c.png"}
389
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/shampoo_bottle/cb3a28dd4748447.png"}
390
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup/abfca2ec566241f.png"}
391
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/suit_jacket/37504fd51b444a3.png"}
392
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034166.JPEG"}
393
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/book_closed/95c6e9e724e2414.png"}
394
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress_shoe_women/feea5f58527a4b1.png"}
395
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bread_loaf/04690bf5166c4be.png"}
396
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/watch/45745fc6a5c243a.png"}
397
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049286.JPEG"}
398
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041361.JPEG"}
399
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pen/1ecb5d9719f6427.png"}
400
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/calendar/27e7f3c2bbe5493.png"}
401
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035358.JPEG"}
402
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011414.JPEG"}
403
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029547.JPEG"}
404
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wine_bottle/ee13eadf7cae401.png"}
405
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drying_rack_for_dishes/d5f0eab3dfe9488.png"}
406
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049266.JPEG"}
407
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_case/42a468d7be17495.png"}
408
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mug/4767a4f735b845e.png"}
409
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bread_loaf/75308e0059af4c8.png"}
410
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pliers/1f562e5c822747f.png"}
411
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003435.JPEG"}
412
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031841.JPEG"}
413
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_french_press/309626b85a6c459.png"}
414
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046007.JPEG"}
415
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/oven_mitts/dce922234e4f45f.png"}
416
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/phone_landline/5de86ad0260b4b3.png"}
417
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015432.JPEG"}
418
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/newspaper/fa5ab07748844ca.png"}
419
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/computer_mouse/bb3b327c68e24cb.png"}
420
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032813.JPEG"}
421
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047522.JPEG"}
422
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_towel_or_rag/6e49e3b34c32456.png"}
423
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bed_sheet/ae8f65728b8a4d8.png"}
424
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pepper_shaker/f857adb9fa8449a.png"}
425
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/laptop_charger/156e8eabb240418.png"}
426
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cereal/a2fa614e58fd45a.png"}
427
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004035.JPEG"}
428
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013852.JPEG"}
429
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/receipt/2a891879a43948a.png"}
430
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tv/e008fa81308d4e6.png"}
431
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015900.JPEG"}
432
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone/b2e1ca7412ff45a.png"}
433
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005923.JPEG"}
434
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/a3c0a4949bde45b.png"}
435
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/match/26925468096b4f2.png"}
436
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drinking_cup/0f96945208cb42c.png"}
437
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/stopper_sink_tub/a6b4bc9ad9d5405.png"}
438
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_french_press/87e5735c852746c.png"}
439
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010429.JPEG"}
440
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036077.JPEG"}
441
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003083.JPEG"}
442
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00023145.JPEG"}
443
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cutting_board/45e8625f3a324c9.png"}
444
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/standing_lamp/a9fecb1593dd42b.png"}
445
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/floss_container/9dd6eea0fc2b4d1.png"}
446
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026139.JPEG"}
447
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027546.JPEG"}
448
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020329.JPEG"}
449
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019868.JPEG"}
450
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/laptop_charger/95db0f66dee3444.png"}
451
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017466.JPEG"}
452
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020560.JPEG"}
453
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_machine/e1d6da7d5ff14c0.png"}
454
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042900.JPEG"}
455
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029201.JPEG"}
456
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drill/15a41ba6c76b435.png"}
457
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049674.JPEG"}
458
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tanktop/7d20f74d8ede4e4.png"}
459
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sugar_container/f7946e62f1e9456.png"}
460
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043187.JPEG"}
461
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scissors/6dc09f8e84384fd.png"}
462
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004962.JPEG"}
463
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spray_bottle/25b2ddfbcce0462.png"}
464
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/power_bar/e43095daff82401.png"}
465
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/document_folder_closed/b02d09c8dcb0488.png"}
466
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037668.JPEG"}
467
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_table/537165db83bd44f.png"}
468
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031619.JPEG"}
469
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nail_file/3c3d0955da4a45a.png"}
470
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020162.JPEG"}
471
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/doormat/c9f990bd9105463.png"}
472
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044337.JPEG"}
473
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046613.JPEG"}
474
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009498.JPEG"}
475
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/belt/b1283caf3568482.png"}
476
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/basket/4ebbf47465e1411.png"}
477
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008949.JPEG"}
478
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hammer/b6e219f760b2400.png"}
479
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047886.JPEG"}
480
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021101.JPEG"}
481
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cd_case/ee098b64b0404b8.png"}
482
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019001.JPEG"}
483
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chocolate/41e9272ff29f42b.png"}
484
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/fork/a7a5c59b36ab481.png"}
485
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scarf/445fd407ee7a495.png"}
486
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002940.JPEG"}
487
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012460.JPEG"}
488
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017621.JPEG"}
489
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043707.JPEG"}
490
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010162.JPEG"}
491
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/vase/063ef715d8a64ae.png"}
492
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/calendar/f57e0c4a0aa9403.png"}
493
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027505.JPEG"}
494
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/jar/e5a647594f314ca.png"}
495
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022640.JPEG"}
496
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bench/7ff62f13258c4f6.png"}
497
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000707.JPEG"}
498
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017231.JPEG"}
499
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/honey_container/84abed616098446.png"}
500
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/notepad/e1bc5f529e15431.png"}
501
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005458.JPEG"}
502
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003474.JPEG"}
503
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/printer/67250486d44a4fd.png"}
504
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/c57230acefc84e0.png"}
505
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sock/d1e54e1af1cf42c.png"}
506
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/computer_mouse/931bb64bf0ff4e3.png"}
507
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043758.JPEG"}
508
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049781.JPEG"}
509
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/kettle/6ac2d90d2bfe456.png"}
510
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043547.JPEG"}
511
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047813.JPEG"}
512
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plastic_wrap/0edd8bf2c7f2431.png"}
513
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/milk/ab5af6b11cc944f.png"}
514
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048852.JPEG"}
515
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019686.JPEG"}
516
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040680.JPEG"}
517
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tomato/bae75beb5d0b452.png"}
518
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nail_clippers/f751d164d091446.png"}
519
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032135.JPEG"}
520
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007851.JPEG"}
521
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041589.JPEG"}
522
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/ziploc_bag/dde0c1dd37bc401.png"}
523
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029637.JPEG"}
524
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tape_measure/95c825a45f924d4.png"}
525
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scrub_brush/fdb6901407e6464.png"}
526
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_machine/286815d5e279485.png"}
527
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038621.JPEG"}
528
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/shoelace/ee710d214de5424.png"}
529
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cork/24bb14dbb634479.png"}
530
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024201.JPEG"}
531
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/iron_for_clothes/e1ccac02f70b424.png"}
532
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/receipt/281b54a5d2a9425.png"}
533
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020195.JPEG"}
534
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sock/98d6e9561ac541e.png"}
535
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/box/ed4c9d12bb1a4d9.png"}
536
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035978.JPEG"}
537
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_machine/f6f9a35b8092404.png"}
538
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044541.JPEG"}
539
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/d1c0098c62c04ae.png"}
540
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027373.JPEG"}
541
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dust_pan/be952c4edb1c47c.png"}
542
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/necklace/e05fd0ccf9794d1.png"}
543
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031591.JPEG"}
544
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026729.JPEG"}
545
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/frying_pan/eb0bf67e4cd542b.png"}
546
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/milk/0c218f4f3ef642e.png"}
547
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031088.JPEG"}
548
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/54be266e9ded417.png"}
549
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/webcam/1b88eb5bef6b4e3.png"}
550
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mouthwash/650dc5f6e3ed4c2.png"}
551
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026273.JPEG"}
552
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030283.JPEG"}
553
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plastic_cup/c17a5c1b41b3444.png"}
554
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037679.JPEG"}
555
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042956.JPEG"}
556
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017805.JPEG"}
557
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/contact_lens_case/d33ccc6e2773495.png"}
558
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/suitcase/4733e32e31e8452.png"}
559
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toy/1ec5df73480d494.png"}
560
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup_brush/aef8c9fe2f1b4a0.png"}
561
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011497.JPEG"}
562
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009518.JPEG"}
563
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tweezers/18033ccf5ce7406.png"}
564
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026418.JPEG"}
565
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020714.JPEG"}
566
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021818.JPEG"}
567
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005591.JPEG"}
568
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sugar_container/f871d39ceba24b5.png"}
569
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/deodorant/d3672a50903746b.png"}
570
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017408.JPEG"}
571
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005489.JPEG"}
572
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000665.JPEG"}
573
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/full_sized_towel/41ca0105105d4c3.png"}
574
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/padlock/833db862135346e.png"}
575
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/photograph_printed/0f79256775524d8.png"}
576
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bucket/b8b888ca5f9b427.png"}
577
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022588.JPEG"}
578
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041603.JPEG"}
579
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_case/40c354bf238a4d0.png"}
580
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017035.JPEG"}
581
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plastic_bag/87279795b4d14eb.png"}
582
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hammer/e8b27e4ae7604bc.png"}
583
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015519.JPEG"}
584
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toilet_paper_roll/8e62392087984bd.png"}
585
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tv/488cf455db5f47e.png"}
586
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/beer_bottle/7e42e816f19849c.png"}
587
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pen/5c5ce628ec66488.png"}
588
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037298.JPEG"}
589
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015227.JPEG"}
590
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/d32497eb6ffc4b7.png"}
591
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mixing_salad_bowl/265e8c0a37fa416.png"}
592
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026251.JPEG"}
593
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/band_aid/dc43201419ba4c1.png"}
594
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012744.JPEG"}
595
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/floss_container/7d4fbacf2d0f46c.png"}
596
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/leggings/cdec8a8aed0548b.png"}
597
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031135.JPEG"}
598
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/air_freshener/c7b5090b14b8489.png"}
599
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045648.JPEG"}
600
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020636.JPEG"}
601
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothbrush/c4bba6c789864ef.png"}
602
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/padlock/8e882ec4c9294fb.png"}
603
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress_shirt/55c5ff15b20344d.png"}
604
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008213.JPEG"}
605
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wine_bottle/8da658ef7d1541d.png"}
606
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/eraser_white_board/ff4cd7189cae49d.png"}
607
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/key_chain/39a2270d0d1d46c.png"}
608
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031081.JPEG"}
609
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pitcher/06f7a6dcbfa846e.png"}
610
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038729.JPEG"}
611
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/eyeglasses/90c8a3893ba1478.png"}
612
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nut_for_screw/d6a3ef98334d487.png"}
613
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_machine/5fc1f75eba7f4f0.png"}
614
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scissors/e081e80355ce4ee.png"}
615
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005159.JPEG"}
616
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013289.JPEG"}
617
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045930.JPEG"}
618
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038882.JPEG"}
619
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wrench/f96a9e0c41e94df.png"}
620
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/helmet/4116369144774cc.png"}
621
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/biscuits/266b36f53c924d5.png"}
622
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/honey_container/51757dc2305d48b.png"}
623
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tv/215090865ca6447.png"}
624
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00023602.JPEG"}
625
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012833.JPEG"}
626
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008138.JPEG"}
627
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/usb_flash_drive/84edba2569994dc.png"}
628
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/usb_cable/59c858155d014da.png"}
629
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019507.JPEG"}
630
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047329.JPEG"}
631
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spoon/b02f4555908a4aa.png"}
632
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00028508.JPEG"}
633
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/jeans/eef857c6ee5b454.png"}
634
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tomato/3ff4c9d237a6438.png"}
635
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_towel_or_rag/499dea0c1a5d480.png"}
636
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/video_camera/01b0c608733b444.png"}
637
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017675.JPEG"}
638
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sock/5684c47142b54b3.png"}
639
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034430.JPEG"}
640
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/egg/0a3c1df1260d49a.png"}
641
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047801.JPEG"}
642
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mouse_pad/a420702c43bb4e7.png"}
643
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tote_bag/c5055954da1d482.png"}
644
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wrench/4332d49469594d0.png"}
645
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049125.JPEG"}
646
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/whisk/ee0abcfb32d0487.png"}
647
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pepper_shaker/140d3c5aae604cb.png"}
648
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/salt_shaker/64fffa31f366491.png"}
649
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039957.JPEG"}
650
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010978.JPEG"}
651
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/still_camera/0b4698690b5f42c.png"}
652
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tray/225d74e2a7c54db.png"}
653
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034252.JPEG"}
654
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chocolate/d44c7d5f6c194cc.png"}
655
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049885.JPEG"}
656
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tote_bag/12675c078dfb464.png"}
657
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037245.JPEG"}
658
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040810.JPEG"}
659
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/eyeglasses/1f60a825a7e241b.png"}
660
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026741.JPEG"}
661
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/remote_control/93f3f737382f402.png"}
662
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005139.JPEG"}
663
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bathrobe/1a1766131b5a4ec.png"}
664
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/first_aid_kit/5a13d9401d61426.png"}
665
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00018117.JPEG"}
666
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/first_aid_kit/0b4c735d7298445.png"}
667
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/figurine_or_statue/57b0977be960454.png"}
668
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042901.JPEG"}
669
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044669.JPEG"}
670
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/jeans/604ed8be58f5495.png"}
671
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042891.JPEG"}
672
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00023031.JPEG"}
673
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010435.JPEG"}
674
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cd_case/7184e0d1819e460.png"}
675
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045203.JPEG"}
676
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/match/bce5c63eaa62484.png"}
677
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026717.JPEG"}
678
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036204.JPEG"}
679
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/webcam/cf677f097070467.png"}
680
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup/f2db44c892214dc.png"}
681
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tray/effe6e7cd38e4df.png"}
682
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trash_bin/f0268d18097046d.png"}
683
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010825.JPEG"}
684
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00006098.JPEG"}
685
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002423.JPEG"}
686
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_charger/cf28468ad1624c9.png"}
687
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toy/551d2d4bdc5c410.png"}
688
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pencil/819d74ad1106431.png"}
689
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/earbuds/34c31f454cc8458.png"}
690
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030339.JPEG"}
691
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wheel/2362b8078ddd462.png"}
692
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drinking_straw/73ad8932256e4f3.png"}
693
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/envelope/f515b6a0a13d401.png"}
694
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031697.JPEG"}
695
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/match/66cad57507fe440.png"}
696
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049053.JPEG"}
697
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/stapler/eb8cf419c4db40c.png"}
698
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/keyboard/94c354d6992f484.png"}
699
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037141.JPEG"}
700
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016500.JPEG"}
701
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/clothes_hamper/a729d60d77ac444.png"}
702
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043248.JPEG"}
703
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/ziploc_bag/a08dda970c8d46a.png"}
704
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/69d95796c1544d3.png"}
705
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blanket/d7f12dc0ca12459.png"}
706
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009291.JPEG"}
707
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baseball_glove/26eaa20c3b664de.png"}
708
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010013.JPEG"}
709
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029057.JPEG"}
710
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043404.JPEG"}
711
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_cap/53d3a6ea03f64ce.png"}
712
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00014285.JPEG"}
713
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paint_can/54249d747d364f3.png"}
714
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013435.JPEG"}
715
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/extension_cable/81d7340a4bd74d7.png"}
716
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042358.JPEG"}
717
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036495.JPEG"}
718
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049262.JPEG"}
719
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pitcher/dcbc040b404244c.png"}
720
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/remote_control/bfac06e5bdc14ab.png"}
721
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00048913.JPEG"}
722
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00045440.JPEG"}
723
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/figurine_or_statue/93046bf9ed4a459.png"}
724
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/box/e20d2b6c9af645f.png"}
725
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/thermos/d4925bab498242f.png"}
726
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003887.JPEG"}
727
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/ladle/687fe7194087452.png"}
728
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/screw/e81d7dc070264b4.png"}
729
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/screw/8f0014efeefd4c8.png"}
730
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009193.JPEG"}
731
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toothbrush/72b1c985910a40f.png"}
732
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hammer/5735a38efbd345b.png"}
733
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00033934.JPEG"}
734
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025808.JPEG"}
735
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bathrobe/b2f7e26242ea43b.png"}
736
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/shoelace/3174e6ccbbb1437.png"}
737
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/removable_blade/88f582c325ab461.png"}
738
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/earring/310131edad91456.png"}
739
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001431.JPEG"}
740
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drawer_open/b9de6154f8494ea.png"}
741
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031650.JPEG"}
742
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/comb/0dde4d8f02a140a.png"}
743
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00042301.JPEG"}
744
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/still_camera/17e063f1a615454.png"}
745
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/combination_lock/5f424567488c4fc.png"}
746
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008531.JPEG"}
747
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021139.JPEG"}
748
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007322.JPEG"}
749
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036780.JPEG"}
750
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sock/abe9bf2ea7e4422.png"}
751
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038912.JPEG"}
752
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020318.JPEG"}
753
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chopstick/eedd371138fc457.png"}
754
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dish_soap/ec3a5797910e455.png"}
755
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/leggings/277e9a615b5c4f0.png"}
756
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paint_can/5c6da01c48004c3.png"}
757
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/milk/6c6b12f791d64fd.png"}
758
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/milk/1bb8da2dbba046e.png"}
759
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017790.JPEG"}
760
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/backpack/14ea51d4c43b41d.png"}
761
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tablet_ipad/83e917f5a04247b.png"}
762
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/peeler/d33427d7024c44e.png"}
763
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_cap/341a0ce622584af.png"}
764
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/alarm_clock/6f8e03c2b2d4433.png"}
765
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup_brush/53c7a68ff7b3430.png"}
766
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00009271.JPEG"}
767
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035854.JPEG"}
768
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022754.JPEG"}
769
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drinking_cup/2b61c5978f794db.png"}
770
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005562.JPEG"}
771
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_towel_or_rag/9b554511d3c445e.png"}
772
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coin_money/8725a295b40e4a6.png"}
773
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/measuring_cup/8f1084dabf194e5.png"}
774
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038744.JPEG"}
775
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022268.JPEG"}
776
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026432.JPEG"}
777
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/backpack/4f507b73b8fc4ef.png"}
778
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017062.JPEG"}
779
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wine_glass/78f10472674d477.png"}
780
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/floss_container/58508e856934412.png"}
781
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011005.JPEG"}
782
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chair/f9c2383434444a2.png"}
783
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_cap/572c75ee4f0b488.png"}
784
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035220.JPEG"}
785
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chocolate/70c16529acce40d.png"}
786
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/keyboard/7084bcc0805c4ed.png"}
787
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027903.JPEG"}
788
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coaster/3e1a85121e15484.png"}
789
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tray/27bc06caea8147a.png"}
790
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00006252.JPEG"}
791
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012250.JPEG"}
792
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00043947.JPEG"}
793
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/battery/d948c2bb79534dc.png"}
794
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032351.JPEG"}
795
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012081.JPEG"}
796
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016699.JPEG"}
797
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hairclip/bd7e4a990633424.png"}
798
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037629.JPEG"}
799
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00022443.JPEG"}
800
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015638.JPEG"}
801
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nail_clippers/f6e76fc9d2de44e.png"}
802
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/razor/a7647a8660a7413.png"}
803
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031382.JPEG"}
804
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031724.JPEG"}
805
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/beer_bottle/e641f5e005d5437.png"}
806
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032021.JPEG"}
807
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026546.JPEG"}
808
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sponge/a9bf3a88b27d49a.png"}
809
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017906.JPEG"}
810
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/stopper_sink_tub/b8020691c7bd4e7.png"}
811
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dust_pan/0aa3d9ae00194e0.png"}
812
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scissors/470a94585b8a46b.png"}
813
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00027861.JPEG"}
814
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020565.JPEG"}
815
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00033634.JPEG"}
816
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00002541.JPEG"}
817
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032189.JPEG"}
818
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00023273.JPEG"}
819
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dust_pan/d471660075a1481.png"}
820
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/flashlight/42a8a68eb9884cb.png"}
821
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/measuring_cup/d41b1db1ad144a3.png"}
822
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/ziploc_bag/aad86c94d6754f8.png"}
823
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041148.JPEG"}
824
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00030127.JPEG"}
825
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paper/b12adc150df5445.png"}
826
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013383.JPEG"}
827
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sandal/d8a6dde222b948a.png"}
828
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nail_polish/247ee2551524410.png"}
829
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00033808.JPEG"}
830
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020969.JPEG"}
831
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00033924.JPEG"}
832
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011694.JPEG"}
833
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paint_can/81a7a2561444466.png"}
834
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blouse/2d41046cbbc946f.png"}
835
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lighter/6bf1338ab38a487.png"}
836
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_mirror/f716d35f439d49d.png"}
837
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/usb_cable/0f43e8ab0819404.png"}
838
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bracelet/8e652ae15a7e402.png"}
839
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/ruler/691e132da0b8485.png"}
840
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046597.JPEG"}
841
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_table/c4669f4545af44a.png"}
842
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012464.JPEG"}
843
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hair_dryer/7ac641d80c2040d.png"}
844
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/playing_cards/04c82587f04b411.png"}
845
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00020921.JPEG"}
846
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034274.JPEG"}
847
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007906.JPEG"}
848
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015120.JPEG"}
849
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/glue_container/5c3e575f62994af.png"}
850
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047569.JPEG"}
851
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/egg/00895de1971a474.png"}
852
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spoon/d035ea4a384847d.png"}
853
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001938.JPEG"}
854
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019265.JPEG"}
855
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/butter/b3626cbdbde0444.png"}
856
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035487.JPEG"}
857
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tongs/93f1557117224f0.png"}
858
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007049.JPEG"}
859
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026845.JPEG"}
860
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/squeeze_bottle/5aef32a610fd437.png"}
861
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00006429.JPEG"}
862
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/raincoat/6104cec1902542d.png"}
863
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004344.JPEG"}
864
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hairclip/3e7d8464ad3243c.png"}
865
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004049.JPEG"}
866
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/drinking_cup/9b96d804fb7d433.png"}
867
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bracelet/13bde9b98e18456.png"}
868
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012288.JPEG"}
869
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031001.JPEG"}
870
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/beer_can/1cc92265ab374ee.png"}
871
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/orange/5ded6a78c6c0424.png"}
872
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pitcher/0e8b584d12ad4c5.png"}
873
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00004767.JPEG"}
874
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_case/432707a5a9ef474.png"}
875
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035356.JPEG"}
876
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00017739.JPEG"}
877
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/pitcher/988d5fa4d0014df.png"}
878
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011123.JPEG"}
879
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/padlock/0be9a4f92730476.png"}
880
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tanktop/fa8d6334e95d431.png"}
881
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021239.JPEG"}
882
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/usb_cable/edfa32bbc5f6444.png"}
883
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/portable_heater/25e169cd30944e7.png"}
884
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025399.JPEG"}
885
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039033.JPEG"}
886
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/lemon/369ef4492ceb457.png"}
887
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cd_case/137d67722a71405.png"}
888
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003478.JPEG"}
889
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00025371.JPEG"}
890
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037089.JPEG"}
891
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chair/f3fd8c18182d479.png"}
892
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/chocolate/be062210f9a2484.png"}
893
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trophy/8848469e34f9433.png"}
894
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039902.JPEG"}
895
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047397.JPEG"}
896
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bike_pump/0d83f37677db45b.png"}
897
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00039771.JPEG"}
898
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/headphones_over_ear/a799bd96bc034c8.png"}
899
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/throw_pillow/77b8f8c80b8e420.png"}
900
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037527.JPEG"}
901
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041267.JPEG"}
902
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/whistle/dc0207b7c380499.png"}
903
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029498.JPEG"}
904
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/jeans/66cd64c41cb14c1.png"}
905
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/mug/6f5151c867ff484.png"}
906
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034754.JPEG"}
907
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047047.JPEG"}
908
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tomato/55c681d087ae4c6.png"}
909
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049869.JPEG"}
910
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/salt_shaker/3dab38b435fe4d3.png"}
911
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00029724.JPEG"}
912
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000715.JPEG"}
913
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/newspaper/4a111a40324c474.png"}
914
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046031.JPEG"}
915
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/clothes_hamper/89ba8692d95945c.png"}
916
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trophy/bfa0e21a66c6494.png"}
917
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/shorts/b5e94c43b64a4ee.png"}
918
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/suitcase/c9fb18b2eb6241f.png"}
919
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036446.JPEG"}
920
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035742.JPEG"}
921
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00040496.JPEG"}
922
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016952.JPEG"}
923
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00034437.JPEG"}
924
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035722.JPEG"}
925
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00028420.JPEG"}
926
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005897.JPEG"}
927
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tape/04ed835b7de8497.png"}
928
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00036344.JPEG"}
929
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/coffee_beans/b74d84fcdc654d2.png"}
930
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hairtie/c0912e002f4b49b.png"}
931
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00008236.JPEG"}
932
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bottle_cap/99874d07523d409.png"}
933
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013290.JPEG"}
934
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00006583.JPEG"}
935
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00026313.JPEG"}
936
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007963.JPEG"}
937
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/figurine_or_statue/a9d7ddcb692640b.png"}
938
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00046036.JPEG"}
939
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013513.JPEG"}
940
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bread_loaf/6fc01129b9f043c.png"}
941
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/razor/484229fb7d264f3.png"}
942
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00015818.JPEG"}
943
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00041835.JPEG"}
944
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/box/272a500f0855495.png"}
945
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003139.JPEG"}
946
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037772.JPEG"}
947
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/squeeze_bottle/8be65b1635b0476.png"}
948
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nail_clippers/e6eadd7c9b2f402.png"}
949
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/plunger/71c86f8947d8422.png"}
950
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/candle/ce5973d1e652405.png"}
951
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00032892.JPEG"}
952
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/dress_pants/9a000b3c43a84d3.png"}
953
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/tissue/beefed1eee8d4c4.png"}
954
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/book_closed/4aed218f82284ae.png"}
955
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/trash_bin/c8e346fe7b4345a.png"}
956
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bracelet/4eb35f5a5dca4e8.png"}
957
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bench/543fd913599e497.png"}
958
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/wrench/54c8e3b6ea5146a.png"}
959
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/sandal/9a5222c4aa85402.png"}
960
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/cellphone_charger/56b4eb4e9fdd422.png"}
961
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00001590.JPEG"}
962
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/spoon/4e5d9b49339c447.png"}
963
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/scarf/862a5d7c3d28456.png"}
964
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/fan/60c5963e7222461.png"}
965
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011523.JPEG"}
966
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/bracelet/fce03c19f3004f2.png"}
967
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00035296.JPEG"}
968
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00006939.JPEG"}
969
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00021741.JPEG"}
970
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/backpack/93c7c939b3fb42c.png"}
971
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00031352.JPEG"}
972
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00005173.JPEG"}
973
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00037412.JPEG"}
974
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/belt/fb94124cea634dc.png"}
975
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00016598.JPEG"}
976
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/hand_towel_or_rag/bdd709d259c242b.png"}
977
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/toaster/b547100c63c447d.png"}
978
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/night_light/f4bab421ea4a4f0.png"}
979
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00003814.JPEG"}
980
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/blanket/c00ae4ec3c9a421.png"}
981
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/paperclip/fea9bde512214f1.png"}
982
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/necklace/0855bc1c9906467.png"}
983
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/stuffed_animal/916ea20f728345d.png"}
984
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00044861.JPEG"}
985
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00049820.JPEG"}
986
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00012531.JPEG"}
987
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00019994.JPEG"}
988
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/makeup_brush/fa6f40a94d164e3.png"}
989
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/iron_for_clothes/1e021f983a05434.png"}
990
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00011588.JPEG"}
991
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00038938.JPEG"}
992
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/beer_bottle/8330e5f5fdac4eb.png"}
993
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/nightstand/1972ff522056433.png"}
994
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00010630.JPEG"}
995
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00047419.JPEG"}
996
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00024131.JPEG"}
997
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00007378.JPEG"}
998
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/can_opener/db34dd7a3a46466.png"}
999
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baseball_glove/064a1f058775488.png"}
1000
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00013858.JPEG"}
docs/evaluation_contract.md ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Evaluation Contract (Draft)
2
+
3
+ This document defines how submissions are evaluated using real model forward passes and CKA.
4
+ It replaces the dummy embeddings in `src/hackathon/data.py`.
5
+
6
+ ## Scope
7
+
8
+ - Applies to Blue Team (model selection) and Red Team (stimulus selection) submissions.
9
+ - All scoring uses real model forward passes to compute embeddings, then linear CKA.
10
+
11
+ ## Entities
12
+
13
+ ### Stimulus
14
+
15
+ A stimulus is identified by:
16
+ - dataset_name: canonical dataset id (e.g., cifar100, imagenet1k)
17
+ - image_identifier: path relative to dataset root (e.g., val/n01440764/ILSVRC2012_val_00000964.JPEG)
18
+
19
+ ### Model
20
+
21
+ A model is identified by:
22
+ - model_name: unique registry key (e.g., resnet50, clip_vit_b32)
23
+
24
+ ## Model Registry Spec (planned location: configs/model_registry.json)
25
+
26
+ Each entry defines how to load a model and extract embeddings.
27
+
28
+ Required fields:
29
+ - model_name: string, unique
30
+ - source: string (torchvision, timm, open_clip, custom)
31
+ - weights: string or null (pretrained identifier)
32
+ - layer: string module path or alias (e.g., fc, classifier.4, visual)
33
+ - embedding: string strategy (pool, cls, flatten, mean)
34
+ - input_size: [height, width]
35
+ - preprocess: {mean: [...], std: [...], resize: int, crop: int}
36
+ - output_dim: int (expected embedding dimension)
37
+
38
+ Optional fields:
39
+ - model_parameters: object for model constructor
40
+ - forward_args: object for forward call
41
+ - notes: string
42
+
43
+ Example:
44
+ ```json
45
+ {
46
+ "model_name": "resnet50",
47
+ "source": "torchvision",
48
+ "weights": "IMAGENET1K_V2",
49
+ "layer": "fc",
50
+ "embedding": "flatten",
51
+ "input_size": [224, 224],
52
+ "preprocess": {
53
+ "mean": [0.485, 0.456, 0.406],
54
+ "std": [0.229, 0.224, 0.225],
55
+ "resize": 256,
56
+ "crop": 224
57
+ },
58
+ "output_dim": 2048
59
+ }
60
+ ```
61
+
62
+ ## Stimuli Catalog Spec (planned location: configs/stimuli_catalog.jsonl)
63
+
64
+ Each line is one stimulus with:
65
+ - dataset_name
66
+ - image_identifier
67
+
68
+ Example lines:
69
+ ```json
70
+ {"dataset_name": "cifar100", "image_identifier": "test/bear/image_0007.png"}
71
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n03445777/ILSVRC2012_val_00003572.JPEG"}
72
+ ```
73
+
74
+ ## Submission Contract
75
+
76
+ ### Blue Team
77
+
78
+ - `models`: list of model_name strings.
79
+ - Each model_name must exist in the model registry.
80
+ - Minimum 2 models; no duplicates.
81
+
82
+ ### Red Team
83
+
84
+ - `differentiating_images`: list of stimulus objects.
85
+ - Each stimulus must exist in the stimuli catalog.
86
+ - Minimum 2 stimuli; no duplicates.
87
+
88
+ ## Evaluation Procedure
89
+
90
+ ### Blue Team scoring
91
+
92
+ 1. Load the stimuli catalog (full evaluation set).
93
+ 2. For each submitted model, run forward pass on all stimuli and extract embeddings.
94
+ 3. Compute mean pairwise linear CKA across submitted models.
95
+
96
+ ### Red Team scoring
97
+
98
+ 1. Load the model registry (full evaluation model set).
99
+ 2. For each model, run forward pass on submitted stimuli and extract embeddings.
100
+ 3. Compute mean pairwise linear CKA across all models, then score = 1 - avg CKA.
101
+
102
+ ## Embedding Extraction Requirements
103
+
104
+ - `model.eval()` and `torch.no_grad()` for all forward passes.
105
+ - Deterministic settings (seed, disable dropout).
106
+ - Embeddings must be 2D arrays shaped [num_samples, dim].
107
+ - If a layer produces spatial features, apply the registry's embedding strategy
108
+ (e.g., global average pool then flatten).
109
+
110
+ ## CKA Definition
111
+
112
+ - Use `src/cka/compute.py` linear CKA (biased HSIC by default).
113
+ - Arrays are converted to float64 before CKA.
114
+
115
+ ## Storage and Paths
116
+
117
+ - Dataset roots come from env vars (see `AGENTS.md` path hygiene).
118
+ - Cache embeddings per model/layer/dataset version (Modal volume).
119
+ - Durable logs and final scores go to `/orcd/data/...`.
120
+
121
+ ## Validation Rules (for future validator)
122
+
123
+ - JSON schema checks for required fields.
124
+ - Name and stimulus existence checks.
125
+ - Minimum counts and uniqueness.
126
+ - Dataset path resolution errors are surfaced as submission failures.
127
+
128
+ ## Validation Script
129
+
130
+ - `scripts/validate_submission.py` validates JSON submissions.
131
+ - Optional envs: `HACKATHON_MODEL_REGISTRY`, `HACKATHON_STIMULI_CATALOG`.
132
+
133
+ ## Modal Scoring (optional)
134
+
135
+ - Set `HACKATHON_MODAL_ENABLE=true` to route scoring through Modal.
136
+ - Requires `HACKATHON_MODEL_REGISTRY` and `HACKATHON_STIMULI_CATALOG`.
137
+
138
+ ## Versioning
139
+
140
+ - This contract should include a `contract_version` when enforced in code.
docs/storage_layout.md ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Storage Layout and Path Hygiene
2
+
3
+ This document defines how datasets, caches, and outputs should be laid out for
4
+ real forward-pass evaluation and Modal-backed scoring.
5
+
6
+ ## Recommended environment variables
7
+
8
+ - `PROJECT_ROOT`: repo root path
9
+ - `DATA_ROOT`: datasets root (shared lab storage)
10
+ - `OUTPUT_ROOT`: scratch outputs (temporary)
11
+ - `HF_HOME`: Hugging Face cache on scratch
12
+ - `TORCH_HOME`: Torch cache on scratch
13
+ - `HACKATHON_DATASET_ROOTS`: JSON mapping of dataset names to roots
14
+ - `HACKATHON_MODAL_ENABLE`: set to `true` to use Modal for scoring
15
+ - `HACKATHON_MODAL_APP`: Modal app name (default: `iclr2026-eval`)
16
+ - `HACKATHON_MODAL_CACHE_KEY`: override Modal cache key (optional)
17
+ - `HACKATHON_MODAL_BATCH_SIZE`: override Modal batch size (optional)
18
+ - `HACKATHON_MODEL_REGISTRY`: model registry JSON path (optional)
19
+ - `HACKATHON_STIMULI_CATALOG`: stimuli catalog JSON/JSONL path (optional)
20
+
21
+ ## Engaging (BCS) layout
22
+
23
+ Suggested defaults (from `AGENTS.md`):
24
+
25
+ - `PROJECT_ROOT=/orcd/data/<PI>/001/<user>/<project>`
26
+ - `DATA_ROOT=/orcd/data/<PI>/001/<user>/datasets`
27
+ - `OUTPUT_ROOT=/orcd/scratch/bcs/001/<user>/<project>`
28
+ - `HF_HOME=/orcd/scratch/bcs/001/<user>/.cache/huggingface`
29
+ - `TORCH_HOME=/orcd/scratch/bcs/001/<user>/.cache/torch`
30
+
31
+ ## Modal volume layout
32
+
33
+ Modal functions in the private `iclr2026-eval-backend` repo (`scripts/modal_backend.py`) use:
34
+
35
+ - Volume: `iclr2026-embeddings`
36
+ - Mount: `/cache`
37
+ - Datasets: `/cache/datasets/<dataset_name>`
38
+ - Embeddings: `/cache/<cache_key>/<model>/<layer>/features.npy`
39
+ - Manifest: `/cache/<cache_key>/manifest.json`
40
+
41
+ If `dataset_roots` is not passed explicitly, dataset resolution in Modal follows:
42
+
43
+ 1. `dataset_roots` parameter (function argument)
44
+ 2. `HACKATHON_DATASET_ROOTS` env (JSON mapping)
45
+ 3. `/cache/datasets/<dataset_name>` if present in the Modal volume
46
+ 4. `DATA_ROOT/<dataset_name>`
47
+
48
+ ## Dataset roots mapping
49
+
50
+ Use `configs/dataset_roots.example.json` as a template. Values support
51
+ environment variable expansion, for example:
52
+
53
+ ```json
54
+ {
55
+ "cifar100": "${DATA_ROOT}/cifar100",
56
+ "imagenet1k": "${DATA_ROOT}/imagenet1k"
57
+ }
58
+ ```
59
+
60
+ Export the mapping in the environment (example):
61
+
62
+ ```bash
63
+ export HACKATHON_DATASET_ROOTS="$(cat configs/dataset_roots.example.json)"
64
+ ```
65
+
66
+ ## Notes
67
+
68
+ - Modal containers cannot read `/orcd/...` paths directly. For Modal-backed
69
+ evaluation, stage datasets into the Modal volume or use accessible storage.
70
+ - Prefer scratch (`/orcd/scratch/bcs/001`) for intermediates, and `/orcd/data`
71
+ for durable outputs.
environment.yml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ name: iclr2026-challenge
2
+ channels:
3
+ - conda-forge
4
+ - defaults
5
+ dependencies:
6
+ - python=3.10
7
+ - pip
8
+ - pip:
9
+ - -r requirements.txt
hackathon-data/blue_submissions.json ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "submission_id": "94edbdd9a175446cb9a5e4a7c4c7a874",
4
+ "team": "blue",
5
+ "submitter": "anonymous",
6
+ "models": [
7
+ {
8
+ "model_name": "vit_base_patch16_224",
9
+ "source": "dummy_cache",
10
+ "model_parameters": null
11
+ },
12
+ {
13
+ "model_name": "vit_large_patch16_224",
14
+ "source": "dummy_cache",
15
+ "model_parameters": null
16
+ },
17
+ {
18
+ "model_name": "resnet50",
19
+ "source": "dummy_cache",
20
+ "model_parameters": null
21
+ }
22
+ ],
23
+ "model_names": [
24
+ "vit_base_patch16_224",
25
+ "vit_large_patch16_224",
26
+ "resnet50"
27
+ ],
28
+ "num_models": 3,
29
+ "score": 0.9977365975662326,
30
+ "submitted_time": "2026-01-15T13:27:40Z"
31
+ },
32
+ {
33
+ "submission_id": "0508156e232f4a2d9d4e434239971dc2",
34
+ "team": "blue",
35
+ "submitter": "anonymous",
36
+ "models": [
37
+ {
38
+ "model_name": "vit_base_patch16_224",
39
+ "source": "dummy_cache",
40
+ "model_parameters": null
41
+ },
42
+ {
43
+ "model_name": "vit_large_patch16_224",
44
+ "source": "dummy_cache",
45
+ "model_parameters": null
46
+ },
47
+ {
48
+ "model_name": "resnet50",
49
+ "source": "dummy_cache",
50
+ "model_parameters": null
51
+ }
52
+ ],
53
+ "model_names": [
54
+ "vit_base_patch16_224",
55
+ "vit_large_patch16_224",
56
+ "resnet50"
57
+ ],
58
+ "num_models": 3,
59
+ "score": 0.9977365975662326,
60
+ "submitted_time": "2026-01-15T13:27:49Z"
61
+ },
62
+ {
63
+ "submission_id": "9601269701a54891916fa923b0995ee4",
64
+ "team": "blue",
65
+ "submitter": "anonymous",
66
+ "models": [
67
+ {
68
+ "model_name": "vit_base_patch16_224",
69
+ "source": "dummy_cache",
70
+ "model_parameters": null
71
+ },
72
+ {
73
+ "model_name": "vit_large_patch16_224",
74
+ "source": "dummy_cache",
75
+ "model_parameters": null
76
+ },
77
+ {
78
+ "model_name": "resnet50",
79
+ "source": "dummy_cache",
80
+ "model_parameters": null
81
+ }
82
+ ],
83
+ "model_names": [
84
+ "vit_base_patch16_224",
85
+ "vit_large_patch16_224",
86
+ "resnet50"
87
+ ],
88
+ "num_models": 3,
89
+ "score": 0.9977365975662326,
90
+ "submitted_time": "2026-01-15T13:27:59Z"
91
+ },
92
+ {
93
+ "submission_id": "9a53e2eda7364558b07659934670b1f5",
94
+ "team": "blue",
95
+ "submitter": "anonymous",
96
+ "models": [
97
+ {
98
+ "model_name": "vit_base_patch16_224",
99
+ "source": "dummy_cache",
100
+ "model_parameters": null
101
+ },
102
+ {
103
+ "model_name": "resnet50",
104
+ "source": "dummy_cache",
105
+ "model_parameters": null
106
+ }
107
+ ],
108
+ "model_names": [
109
+ "vit_base_patch16_224",
110
+ "resnet50"
111
+ ],
112
+ "num_models": 2,
113
+ "score": 0.8369087528464697,
114
+ "submitted_time": "2026-01-15T13:34:24Z"
115
+ },
116
+ {
117
+ "submission_id": "cb8f70a0c10641e7aa1f9588400a3426",
118
+ "team": "blue",
119
+ "submitter": "anonymous",
120
+ "models": [
121
+ {
122
+ "model_name": "resnet50",
123
+ "source": "dummy_cache",
124
+ "model_parameters": null
125
+ },
126
+ {
127
+ "model_name": "resnet101",
128
+ "source": "dummy_cache",
129
+ "model_parameters": null
130
+ }
131
+ ],
132
+ "model_names": [
133
+ "resnet50",
134
+ "resnet101"
135
+ ],
136
+ "num_models": 2,
137
+ "score": 0.9984689260552404,
138
+ "submitted_time": "2026-01-15T13:34:35Z"
139
+ },
140
+ {
141
+ "submission_id": "a9dcdd432b594b138fbfbdddc71f80d3",
142
+ "team": "blue",
143
+ "submitter": "family-test-1",
144
+ "model_names": [
145
+ "resnet18",
146
+ "resnet34"
147
+ ],
148
+ "num_models": 2,
149
+ "score": 0.9255393186692762,
150
+ "submitted_time": "2026-01-30T18:39:20Z"
151
+ },
152
+ {
153
+ "submission_id": "5276d0cc1124427c9a8dca478cc7c5ef",
154
+ "team": "blue",
155
+ "submitter": "family-test-1",
156
+ "model_names": [
157
+ "resnet18",
158
+ "resnet34"
159
+ ],
160
+ "num_models": 2,
161
+ "score": 0.9255393186692762,
162
+ "submitted_time": "2026-01-30T20:40:27Z"
163
+ },
164
+ {
165
+ "submission_id": "cb824b0c5bfd41cbb928c71e1d5fab5c",
166
+ "team": "blue",
167
+ "submitter": "family-test-1",
168
+ "model_names": [
169
+ "resnet18",
170
+ "resnet34"
171
+ ],
172
+ "num_models": 2,
173
+ "score": 0.9255393186692762,
174
+ "submitted_time": "2026-01-30T20:41:17Z"
175
+ },
176
+ {
177
+ "submission_id": "b418117a57804b64a5ebf29156dc77e1",
178
+ "team": "blue",
179
+ "submitter": "family-test-1",
180
+ "model_names": [
181
+ "resnet18",
182
+ "resnet34"
183
+ ],
184
+ "num_models": 2,
185
+ "score": 0.16542392317872592,
186
+ "submitted_time": "2026-01-30T20:44:11Z"
187
+ },
188
+ {
189
+ "submission_id": "93deeb874b3e4487b9f86b7f25be1d1b",
190
+ "team": "blue",
191
+ "submitter": "family-test-1",
192
+ "model_names": [
193
+ "resnet18",
194
+ "resnet34"
195
+ ],
196
+ "num_models": 2,
197
+ "score": 0.7390657767373638,
198
+ "submitted_time": "2026-01-30T21:02:47Z"
199
+ }
200
+ ]
hackathon-data/red_submissions.json ADDED
@@ -0,0 +1,362 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "submission_id": "c98476168fcc4127b74f495ef62b51fc",
4
+ "team": "red",
5
+ "submitter": "anonymous",
6
+ "differentiating_images": [
7
+ {
8
+ "dataset_name": "cifar100",
9
+ "image_identifier": "test/airplane/image_0001.png"
10
+ },
11
+ {
12
+ "dataset_name": "cifar100",
13
+ "image_identifier": "test/bear/image_0007.png"
14
+ },
15
+ {
16
+ "dataset_name": "cifar100",
17
+ "image_identifier": "test/bottle/image_0012.png"
18
+ }
19
+ ],
20
+ "stimuli_keys": [
21
+ "cifar100::test/airplane/image_0001.png",
22
+ "cifar100::test/bear/image_0007.png",
23
+ "cifar100::test/bottle/image_0012.png"
24
+ ],
25
+ "num_stimuli": 3,
26
+ "score": 0.0005089467322310082,
27
+ "submitted_time": "2026-01-15T13:28:07Z"
28
+ },
29
+ {
30
+ "submission_id": "00e699cc35a0427f97d0f488bd6643a6",
31
+ "team": "red",
32
+ "submitter": "anonymous",
33
+ "differentiating_images": [
34
+ {
35
+ "dataset_name": "cifar100",
36
+ "image_identifier": "test/airplane/image_0001.png"
37
+ },
38
+ {
39
+ "dataset_name": "cifar100",
40
+ "image_identifier": "test/bear/image_0007.png"
41
+ }
42
+ ],
43
+ "stimuli_keys": [
44
+ "cifar100::test/airplane/image_0001.png",
45
+ "cifar100::test/bear/image_0007.png"
46
+ ],
47
+ "num_stimuli": 2,
48
+ "score": 7.210160246629016e-10,
49
+ "submitted_time": "2026-01-15T13:34:47Z"
50
+ },
51
+ {
52
+ "submission_id": "5e08b55e1d5b4755bcdc2ac39a052586",
53
+ "team": "red",
54
+ "submitter": "anonymous",
55
+ "differentiating_images": [
56
+ {
57
+ "dataset_name": "cifar100",
58
+ "image_identifier": "test/airplane/image_0001.png"
59
+ },
60
+ {
61
+ "dataset_name": "cifar100",
62
+ "image_identifier": "test/bear/image_0007.png"
63
+ }
64
+ ],
65
+ "stimuli_keys": [
66
+ "cifar100::test/airplane/image_0001.png",
67
+ "cifar100::test/bear/image_0007.png"
68
+ ],
69
+ "num_stimuli": 2,
70
+ "score": 7.210160246629016e-10,
71
+ "submitted_time": "2026-01-15T13:34:58Z"
72
+ },
73
+ {
74
+ "submission_id": "94363c0a44584d63b9571a0e48e16a06",
75
+ "team": "red",
76
+ "submitter": "anonymous",
77
+ "differentiating_images": [
78
+ {
79
+ "dataset_name": "cifar100",
80
+ "image_identifier": "test/airplane/image_0001.png"
81
+ },
82
+ {
83
+ "dataset_name": "cifar100",
84
+ "image_identifier": "test/bear/image_0007.png"
85
+ },
86
+ {
87
+ "dataset_name": "cifar100",
88
+ "image_identifier": "test/bottle/image_0012.png"
89
+ }
90
+ ],
91
+ "stimuli_keys": [
92
+ "cifar100::test/airplane/image_0001.png",
93
+ "cifar100::test/bear/image_0007.png",
94
+ "cifar100::test/bottle/image_0012.png"
95
+ ],
96
+ "num_stimuli": 3,
97
+ "score": 0.032057460754414624,
98
+ "submitted_time": "2026-01-15T13:40:06Z"
99
+ },
100
+ {
101
+ "submission_id": "33cc950022a24af6bdee9c61e04a6682",
102
+ "team": "red",
103
+ "submitter": "anonymous",
104
+ "differentiating_images": [
105
+ {
106
+ "dataset_name": "cifar100",
107
+ "image_identifier": "test/airplane/image_0001.png"
108
+ },
109
+ {
110
+ "dataset_name": "cifar100",
111
+ "image_identifier": "test/bus/image_0021.png"
112
+ },
113
+ {
114
+ "dataset_name": "cifar100",
115
+ "image_identifier": "test/rocket/image_0051.png"
116
+ }
117
+ ],
118
+ "stimuli_keys": [
119
+ "cifar100::test/airplane/image_0001.png",
120
+ "cifar100::test/bus/image_0021.png",
121
+ "cifar100::test/rocket/image_0051.png"
122
+ ],
123
+ "num_stimuli": 3,
124
+ "score": 0.034225943844330975,
125
+ "submitted_time": "2026-01-15T13:40:27Z"
126
+ },
127
+ {
128
+ "submission_id": "a886ad9262014c5286a7a4925ceacb41",
129
+ "team": "red",
130
+ "submitter": "anonymous",
131
+ "differentiating_images": [
132
+ {
133
+ "dataset_name": "cifar100",
134
+ "image_identifier": "test/airplane/image_0001.png"
135
+ },
136
+ {
137
+ "dataset_name": "cifar100",
138
+ "image_identifier": "test/bottle/image_0012.png"
139
+ }
140
+ ],
141
+ "stimuli_keys": [
142
+ "cifar100::test/airplane/image_0001.png",
143
+ "cifar100::test/bottle/image_0012.png"
144
+ ],
145
+ "num_stimuli": 2,
146
+ "score": 1.7992535239486074e-09,
147
+ "submitted_time": "2026-01-15T13:49:11Z"
148
+ },
149
+ {
150
+ "submission_id": "0918d718f3f6460ea6e17b32daa39bb8",
151
+ "team": "red",
152
+ "submitter": "red-test-1",
153
+ "differentiating_images": [
154
+ {
155
+ "dataset_name": "imagenet_val",
156
+ "image_identifier": "ILSVRC2012_val_00000001.JPEG"
157
+ },
158
+ {
159
+ "dataset_name": "imagenet_val",
160
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
161
+ }
162
+ ],
163
+ "stimuli_keys": [
164
+ "imagenet_val::ILSVRC2012_val_00000001.JPEG",
165
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG"
166
+ ],
167
+ "num_stimuli": 2,
168
+ "score": 4.641865669618994e-09,
169
+ "submitted_time": "2026-02-02T17:48:57Z"
170
+ },
171
+ {
172
+ "submission_id": "564393f6037a487d9bac28057c4e2397",
173
+ "team": "red",
174
+ "submitter": "red-test-2",
175
+ "differentiating_images": [
176
+ {
177
+ "dataset_name": "imagenet_val",
178
+ "image_identifier": "ILSVRC2012_val_00000003.JPEG"
179
+ },
180
+ {
181
+ "dataset_name": "imagenet_val",
182
+ "image_identifier": "ILSVRC2012_val_00000004.JPEG"
183
+ },
184
+ {
185
+ "dataset_name": "imagenet_val",
186
+ "image_identifier": "ILSVRC2012_val_00000005.JPEG"
187
+ }
188
+ ],
189
+ "stimuli_keys": [
190
+ "imagenet_val::ILSVRC2012_val_00000003.JPEG",
191
+ "imagenet_val::ILSVRC2012_val_00000004.JPEG",
192
+ "imagenet_val::ILSVRC2012_val_00000005.JPEG"
193
+ ],
194
+ "num_stimuli": 3,
195
+ "score": 0.0539067506733818,
196
+ "submitted_time": "2026-02-02T17:48:58Z"
197
+ },
198
+ {
199
+ "submission_id": "f3d164ddd6584bf284a403dd06e2c0d8",
200
+ "team": "red",
201
+ "submitter": "red-test-3",
202
+ "differentiating_images": [
203
+ {
204
+ "dataset_name": "imagenet_val",
205
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
206
+ },
207
+ {
208
+ "dataset_name": "imagenet_val",
209
+ "image_identifier": "ILSVRC2012_val_00000006.JPEG"
210
+ }
211
+ ],
212
+ "stimuli_keys": [
213
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG",
214
+ "imagenet_val::ILSVRC2012_val_00000006.JPEG"
215
+ ],
216
+ "num_stimuli": 2,
217
+ "score": 3.537208304038586e-09,
218
+ "submitted_time": "2026-02-02T17:48:59Z"
219
+ },
220
+ {
221
+ "submission_id": "89ef5cae40e2470eaec98fbfbb568545",
222
+ "team": "red",
223
+ "submitter": "red-test-1",
224
+ "differentiating_images": [
225
+ {
226
+ "dataset_name": "imagenet_val",
227
+ "image_identifier": "ILSVRC2012_val_00000001.JPEG"
228
+ },
229
+ {
230
+ "dataset_name": "imagenet_val",
231
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
232
+ }
233
+ ],
234
+ "stimuli_keys": [
235
+ "imagenet_val::ILSVRC2012_val_00000001.JPEG",
236
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG"
237
+ ],
238
+ "num_stimuli": 2,
239
+ "score": 4.641865669618994e-09,
240
+ "submitted_time": "2026-02-02T18:22:19Z"
241
+ },
242
+ {
243
+ "submission_id": "a95f3e9e9c8844b587297c96c4225292",
244
+ "team": "red",
245
+ "submitter": "red-test-2",
246
+ "differentiating_images": [
247
+ {
248
+ "dataset_name": "imagenet_val",
249
+ "image_identifier": "ILSVRC2012_val_00000003.JPEG"
250
+ },
251
+ {
252
+ "dataset_name": "imagenet_val",
253
+ "image_identifier": "ILSVRC2012_val_00000004.JPEG"
254
+ },
255
+ {
256
+ "dataset_name": "imagenet_val",
257
+ "image_identifier": "ILSVRC2012_val_00000005.JPEG"
258
+ }
259
+ ],
260
+ "stimuli_keys": [
261
+ "imagenet_val::ILSVRC2012_val_00000003.JPEG",
262
+ "imagenet_val::ILSVRC2012_val_00000004.JPEG",
263
+ "imagenet_val::ILSVRC2012_val_00000005.JPEG"
264
+ ],
265
+ "num_stimuli": 3,
266
+ "score": 0.0539067506733818,
267
+ "submitted_time": "2026-02-02T18:22:19Z"
268
+ },
269
+ {
270
+ "submission_id": "ce09c58fe963407e80adeee3c598e049",
271
+ "team": "red",
272
+ "submitter": "red-test-3",
273
+ "differentiating_images": [
274
+ {
275
+ "dataset_name": "imagenet_val",
276
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
277
+ },
278
+ {
279
+ "dataset_name": "imagenet_val",
280
+ "image_identifier": "ILSVRC2012_val_00000006.JPEG"
281
+ }
282
+ ],
283
+ "stimuli_keys": [
284
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG",
285
+ "imagenet_val::ILSVRC2012_val_00000006.JPEG"
286
+ ],
287
+ "num_stimuli": 2,
288
+ "score": 3.537208304038586e-09,
289
+ "submitted_time": "2026-02-02T18:22:20Z"
290
+ },
291
+ {
292
+ "submission_id": "e14d25b38a2a43299ccc5a4aaa7a8095",
293
+ "team": "red",
294
+ "submitter": "red-test-1",
295
+ "differentiating_images": [
296
+ {
297
+ "dataset_name": "imagenet_val",
298
+ "image_identifier": "ILSVRC2012_val_00000001.JPEG"
299
+ },
300
+ {
301
+ "dataset_name": "imagenet_val",
302
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
303
+ }
304
+ ],
305
+ "stimuli_keys": [
306
+ "imagenet_val::ILSVRC2012_val_00000001.JPEG",
307
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG"
308
+ ],
309
+ "num_stimuli": 2,
310
+ "score": 4.641865669618994e-09,
311
+ "submitted_time": "2026-02-03T16:59:12Z"
312
+ },
313
+ {
314
+ "submission_id": "9f5b6f0a8e484796b5fb49f6a8e73978",
315
+ "team": "red",
316
+ "submitter": "red-test-2",
317
+ "differentiating_images": [
318
+ {
319
+ "dataset_name": "imagenet_val",
320
+ "image_identifier": "ILSVRC2012_val_00000003.JPEG"
321
+ },
322
+ {
323
+ "dataset_name": "imagenet_val",
324
+ "image_identifier": "ILSVRC2012_val_00000004.JPEG"
325
+ },
326
+ {
327
+ "dataset_name": "imagenet_val",
328
+ "image_identifier": "ILSVRC2012_val_00000005.JPEG"
329
+ }
330
+ ],
331
+ "stimuli_keys": [
332
+ "imagenet_val::ILSVRC2012_val_00000003.JPEG",
333
+ "imagenet_val::ILSVRC2012_val_00000004.JPEG",
334
+ "imagenet_val::ILSVRC2012_val_00000005.JPEG"
335
+ ],
336
+ "num_stimuli": 3,
337
+ "score": 0.0539067506733818,
338
+ "submitted_time": "2026-02-03T16:59:15Z"
339
+ },
340
+ {
341
+ "submission_id": "3cfc065bb85a40e28927d950b8cb156a",
342
+ "team": "red",
343
+ "submitter": "red-test-3",
344
+ "differentiating_images": [
345
+ {
346
+ "dataset_name": "imagenet_val",
347
+ "image_identifier": "ILSVRC2012_val_00000002.JPEG"
348
+ },
349
+ {
350
+ "dataset_name": "imagenet_val",
351
+ "image_identifier": "ILSVRC2012_val_00000006.JPEG"
352
+ }
353
+ ],
354
+ "stimuli_keys": [
355
+ "imagenet_val::ILSVRC2012_val_00000002.JPEG",
356
+ "imagenet_val::ILSVRC2012_val_00000006.JPEG"
357
+ ],
358
+ "num_stimuli": 2,
359
+ "score": 3.537208304038586e-09,
360
+ "submitted_time": "2026-02-03T16:59:15Z"
361
+ }
362
+ ]
pyproject.toml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [tool.ruff]
2
+ # Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.
3
+ select = ["E", "F"]
4
+ ignore = ["E501"] # line too long (black is taking care of this)
5
+ line-length = 119
6
+ fixable = ["A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"]
7
+
8
+ [tool.isort]
9
+ profile = "black"
10
+ line_length = 119
11
+
12
+ [tool.black]
13
+ line-length = 119
requirements.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ APScheduler
2
+ black
3
+ datasets
4
+ modal
5
+ gradio
6
+ gradio[oauth]
7
+ gradio_leaderboard==0.0.13
8
+ gradio_client
9
+ huggingface-hub>=0.18.0
10
+ matplotlib
11
+ python-dotenv
12
+ numpy
13
+ pandas
14
+ python-dateutil
15
+ tqdm
16
+ transformers
17
+ tokenizers>=0.15.0
18
+ sentencepiece
scripts/blue_family_smoke_test.py ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import os
6
+ from pathlib import Path
7
+
8
+ import modal
9
+
10
+ from dotenv import load_dotenv
11
+ load_dotenv()
12
+
13
+
14
+ def _require_env(name: str) -> str:
15
+ value = os.environ.get(name, "").strip()
16
+ if not value:
17
+ raise ValueError(f"Missing required env var: {name}")
18
+ return value
19
+
20
+
21
+ def _seed_dummy_dataset(app_name: str) -> None:
22
+ seed_fn = modal.Function.from_name(app_name, "seed_dummy_dataset")
23
+ seed = seed_fn.remote(num_images=6, image_size=224, dataset_name="dummy")
24
+ print(f"Seeded dataset at {seed['dataset_root']}")
25
+
26
+
27
+ def main() -> None:
28
+ parser = argparse.ArgumentParser(description="Blue family smoke test")
29
+ parser.add_argument(
30
+ "--stimuli",
31
+ type=str,
32
+ default=None,
33
+ help="Path to custom stimuli JSONL file. If not provided, uses HACKATHON_STIMULI_CATALOG env var.",
34
+ )
35
+ parser.add_argument(
36
+ "--s3",
37
+ action="store_true",
38
+ help="Use S3-backed datasets (requires aws-s3-credentials Modal secret).",
39
+ )
40
+ parser.add_argument(
41
+ "--skip-seed",
42
+ action="store_true",
43
+ help="Skip seeding dummy dataset (use when testing with real images).",
44
+ )
45
+ args = parser.parse_args()
46
+
47
+ _require_env("HACKATHON_MODAL_ENABLE")
48
+ _require_env("HACKATHON_MODEL_REGISTRY")
49
+ data_dir = _require_env("HACKATHON_DATA_DIR")
50
+
51
+ # Use custom stimuli if provided, otherwise use env var
52
+ if args.stimuli:
53
+ stimuli_path = Path(args.stimuli).resolve()
54
+ if not stimuli_path.exists():
55
+ raise ValueError(f"Stimuli file not found: {stimuli_path}")
56
+ os.environ["HACKATHON_STIMULI_CATALOG"] = str(stimuli_path)
57
+ print(f"Using custom stimuli: {stimuli_path}")
58
+ else:
59
+ _require_env("HACKATHON_STIMULI_CATALOG")
60
+
61
+ # Set S3 mode if requested
62
+ if args.s3:
63
+ os.environ["HACKATHON_USE_S3"] = "true"
64
+ print("S3 mode enabled - will use extract_embeddings_s3 function")
65
+
66
+ app_name = os.environ.get("HACKATHON_MODAL_APP", "iclr2026-eval")
67
+
68
+ # Only seed dummy dataset if not using real images
69
+ if not args.skip_seed and not args.s3:
70
+ _seed_dummy_dataset(app_name)
71
+ elif args.skip_seed:
72
+ print("Skipping dummy dataset seeding")
73
+ elif args.s3:
74
+ print("S3 mode: skipping dummy dataset seeding (using real images)")
75
+
76
+ from app import submit_blue
77
+
78
+ model_sets = [
79
+ # ["resnet18", "mobilenet_v2", "densenet121"],
80
+ # ["vgg16", "resnet18"],
81
+ # ["mobilenet_v2", "densenet121", "vgg16"],
82
+ ["resnet18", "resnet34"],
83
+ ]
84
+
85
+ for idx, models in enumerate(model_sets, start=1):
86
+ payload = json.dumps({"models": models})
87
+ submitter = f"family-test-{idx}"
88
+ msg, leaderboard, pairwise = submit_blue(submitter, payload)
89
+ print(f"Submission {idx} message: {msg}")
90
+ print(f"Submission {idx} leaderboard: {leaderboard.tail(1).to_dict(orient='records')}")
91
+ print(f"Submission {idx} pairwise: {pairwise.to_dict(orient='records')}")
92
+ assert not pairwise.empty, "Pairwise table should not be empty."
93
+
94
+ # blue_path = Path(data_dir) / "blue_submissions.json"
95
+ # assert blue_path.exists(), f"Missing submission file: {blue_path}"
96
+ print("Blue family smoke test complete.")
97
+
98
+
99
+ if __name__ == "__main__":
100
+ main()
scripts/blue_team_submit.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import os
6
+ from pathlib import Path
7
+
8
+ import modal
9
+
10
+ from dotenv import load_dotenv
11
+ load_dotenv()
12
+
13
+ def _require_env(name: str) -> str:
14
+ value = os.environ.get(name, "").strip()
15
+ if not value:
16
+ raise ValueError(f"Missing required env var: {name}")
17
+ return value
18
+
19
+
20
+ def _seed_dummy_dataset(app_name: str) -> None:
21
+ seed_fn = modal.Function.from_name(app_name, "seed_dummy_dataset")
22
+ seed = seed_fn.remote(num_images=6, image_size=224, dataset_name="dummy")
23
+ print(f"Seeded dataset at {seed['dataset_root']}")
24
+
25
+
26
+ def main(
27
+ models: list[str],
28
+ submitter: str,
29
+ stimuli: str | None,
30
+ use_s3: bool = True,
31
+ skip_seed: bool = False
32
+ ) -> None:
33
+
34
+ _require_env("HACKATHON_MODAL_ENABLE")
35
+ _require_env("HACKATHON_MODEL_REGISTRY")
36
+
37
+ # Use custom stimuli if provided, otherwise use env var
38
+ if stimuli:
39
+ stimuli_path = Path(stimuli).resolve()
40
+ if not stimuli_path.exists():
41
+ raise ValueError(f"Stimuli file not found: {stimuli_path}")
42
+ os.environ["HACKATHON_STIMULI_CATALOG"] = str(stimuli_path)
43
+ print(f"Using custom stimuli: {stimuli_path}")
44
+ else:
45
+ _require_env("HACKATHON_STIMULI_CATALOG")
46
+
47
+ # Set S3 mode if requested
48
+ if use_s3:
49
+ os.environ["HACKATHON_USE_S3"] = "true"
50
+ print("S3 mode enabled - will use extract_embeddings_s3 function")
51
+
52
+ app_name = os.environ.get("HACKATHON_MODAL_APP", "iclr2026-eval")
53
+
54
+ # Only seed dummy dataset if not using real images
55
+ if not skip_seed and not use_s3:
56
+ _seed_dummy_dataset(app_name)
57
+ elif skip_seed:
58
+ print("Skipping dummy dataset seeding")
59
+ elif use_s3:
60
+ print("S3 mode: skipping dummy dataset seeding (using real images)")
61
+
62
+ from app import submit_blue
63
+
64
+ payload = json.dumps({"models": models})
65
+ msg, leaderboard, pairwise = submit_blue(submitter, payload)
66
+ print(f"Submission message: {msg}")
67
+ print(f"Submission leaderboard: {leaderboard.tail(1).to_dict(orient='records')}")
68
+ print(f"Submission pairwise: {pairwise.to_dict(orient='records')}")
69
+ assert not pairwise.empty, "Pairwise table should not be empty."
70
+
71
+ if __name__ == "__main__":
72
+ parser = argparse.ArgumentParser(description="Blue family smoke test")
73
+ parser.add_argument(
74
+ "--models",
75
+ type=str,
76
+ nargs="+",
77
+ default=None,
78
+ help="List of models to submit. If not provided, uses predefined model sets.",
79
+ )
80
+ parser.add_argument(
81
+ "--submitter",
82
+ type=str,
83
+ default="test",
84
+ help="Submitter name to use for the submission.",
85
+ )
86
+ parser.add_argument(
87
+ "--stimuli",
88
+ type=str,
89
+ default=None,
90
+ help="Path to custom stimuli JSONL file. If not provided, uses HACKATHON_STIMULI_CATALOG env var.",
91
+ )
92
+ parser.add_argument(
93
+ "--s3",
94
+ action="store_true",
95
+ help="Use S3-backed datasets (requires aws-s3-credentials Modal secret).",
96
+ )
97
+ parser.add_argument(
98
+ "--skip-seed",
99
+ action="store_true",
100
+ help="Skip seeding dummy dataset (use when testing with real images).",
101
+ )
102
+ args = parser.parse_args()
103
+
104
+ models = args.models if args.models is not None else ["resnet18", "resnet34"]
105
+ submitter = args.submitter
106
+
107
+ main(models, submitter, args.stimuli, args.s3, args.skip_seed)
scripts/generate_blue_registry.py ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Generate blue_team_model_registry.json from one_model_per_family.json.
3
+
4
+ For each model, queries timm to auto-detect:
5
+ - preprocessing hyperparameters (resize, crop, mean, std)
6
+ - the appropriate embedding layer name
7
+ - embedding strategy
8
+
9
+ Usage (local):
10
+ python scripts/generate_blue_registry.py
11
+
12
+ Usage (Modal):
13
+ modal run scripts/generate_blue_registry.py
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ import math
19
+ import sys
20
+ from pathlib import Path
21
+ from typing import Any
22
+
23
+ CONFIGS_DIR = Path(__file__).resolve().parent.parent / "configs"
24
+ INPUT_PATH = CONFIGS_DIR / "one_model_per_family.json"
25
+ OUTPUT_PATH = CONFIGS_DIR / "blue_team_model_registry.json"
26
+
27
+
28
+ def detect_embedding_layer(model_name: str, model: Any) -> str:
29
+ """Detect the best layer for embedding extraction by inspecting model modules."""
30
+ import torch.nn as nn
31
+
32
+ modules = dict(model.named_modules())
33
+
34
+ # Priority 1: head.global_pool (hybrid/newer architectures)
35
+ if "head.global_pool" in modules:
36
+ m = modules["head.global_pool"]
37
+ if not isinstance(m, nn.Identity):
38
+ return "head.global_pool"
39
+
40
+ # Priority 2: global_pool (standard CNNs)
41
+ if "global_pool" in modules:
42
+ m = modules["global_pool"]
43
+ if not isinstance(m, nn.Identity):
44
+ return "global_pool"
45
+
46
+ # Priority 3: pooling (ConvMixer uses SelectAdaptivePool2d as 'pooling')
47
+ if "pooling" in modules:
48
+ m = modules["pooling"]
49
+ if not isinstance(m, nn.Identity):
50
+ return "pooling"
51
+
52
+ # Priority 4: fc_norm (some ViT variants like EVA, BEiT, AIMv2)
53
+ if "fc_norm" in modules:
54
+ return "fc_norm"
55
+
56
+ # Priority 5: norm (ViT/transformer final normalization before head)
57
+ # Accept any normalization-like module, but NOT ModuleList (e.g. CrossViT)
58
+ if "norm" in modules:
59
+ m = modules["norm"]
60
+ if not isinstance(m, (nn.ModuleList, nn.ModuleDict)):
61
+ return "norm"
62
+
63
+ # Priority 6: norm.1 (CrossViT has ModuleList of norms; use the large-scale branch)
64
+ if "norm.1" in modules:
65
+ return "norm.1"
66
+
67
+ # Priority 7: norm4 (CoaT models have norm1..norm4 for each stage)
68
+ if "norm4" in modules:
69
+ return "norm4"
70
+
71
+ # Priority 8: head.norm
72
+ if "head.norm" in modules:
73
+ return "head.norm"
74
+
75
+ # Priority 9: stages.3.norm (PVT v2 and similar hierarchical transformers)
76
+ if "stages.3.norm" in modules:
77
+ return "stages.3.norm"
78
+
79
+ # Priority 10: head.head.bn (RepViT: BatchNorm1d before classifier Linear)
80
+ if "head.head.bn" in modules:
81
+ return "head.head.bn"
82
+
83
+ # Priority 11: head.bn (LeViT/NormLinear: BatchNorm1d before classifier Linear)
84
+ if "head.bn" in modules:
85
+ return "head.bn"
86
+
87
+ # Priority 12: head (last resort - may output logits)
88
+ if "head" in modules:
89
+ return "head"
90
+
91
+ # Priority 12: avgpool (some torchvision-style models)
92
+ if "avgpool" in modules:
93
+ return "avgpool"
94
+
95
+ raise ValueError(f"Could not detect embedding layer for {model_name}")
96
+
97
+
98
+ def generate_spec(model_name: str) -> dict[str, Any]:
99
+ """Generate a full model spec dict for a given timm model name."""
100
+ import timm
101
+ import timm.data
102
+
103
+ model = timm.create_model(model_name, pretrained=False)
104
+ data_config = timm.data.resolve_data_config(model=model)
105
+
106
+ input_size = data_config["input_size"] # (C, H, W)
107
+ crop = input_size[1] # Use height (should == width for these models)
108
+ crop_pct = data_config.get("crop_pct", 0.875)
109
+ resize = round(crop / crop_pct)
110
+ mean = [round(v, 3) for v in data_config["mean"]]
111
+ std = [round(v, 3) for v in data_config["std"]]
112
+
113
+ layer = detect_embedding_layer(model_name, model)
114
+
115
+ return {
116
+ "model_name": model_name,
117
+ "source": "timm",
118
+ "weights": "imagenet",
119
+ "layer": layer,
120
+ "embedding": "flatten",
121
+ "preprocess": {
122
+ "resize": resize,
123
+ "crop": crop,
124
+ "mean": mean,
125
+ "std": std,
126
+ },
127
+ }
128
+
129
+
130
+ def validate_spec(spec: dict[str, Any]) -> tuple[bool, str]:
131
+ """Validate a spec by doing a forward pass with a dummy image."""
132
+ import torch
133
+ import timm
134
+
135
+ model_name = spec["model_name"]
136
+ layer = spec["layer"]
137
+ crop = spec["preprocess"]["crop"]
138
+
139
+ try:
140
+ model = timm.create_model(model_name, pretrained=False)
141
+ model.eval()
142
+
143
+ modules = dict(model.named_modules())
144
+ if layer not in modules:
145
+ return False, f"Layer '{layer}' not found in model"
146
+
147
+ target_module = modules[layer]
148
+ outputs = []
149
+
150
+ def hook(_module, _inputs, output):
151
+ outputs.append(output)
152
+
153
+ handle = target_module.register_forward_hook(hook)
154
+
155
+ dummy_input = torch.randn(1, 3, crop, crop)
156
+ with torch.no_grad():
157
+ model(dummy_input)
158
+
159
+ handle.remove()
160
+
161
+ if not outputs:
162
+ return False, "No output captured from hook"
163
+
164
+ out = outputs[0]
165
+ if isinstance(out, (tuple, list)):
166
+ out = out[0]
167
+ if isinstance(out, dict):
168
+ out = out.get("last_hidden_state") or out.get("pooler_output")
169
+ if not isinstance(out, torch.Tensor):
170
+ return False, f"Hook output is not a tensor: {type(out)}"
171
+
172
+ # Apply flatten strategy
173
+ if out.ndim == 2:
174
+ dim = out.shape[1]
175
+ elif out.ndim >= 3:
176
+ dim = 1
177
+ for d in out.shape[1:]:
178
+ dim *= d
179
+ else:
180
+ dim = out.numel()
181
+
182
+ return True, f"OK (dim={dim})"
183
+
184
+ except Exception as e:
185
+ return False, f"Error: {e}"
186
+
187
+
188
+ def main() -> None:
189
+ model_names = json.loads(INPUT_PATH.read_text())
190
+ print(f"Generating specs for {len(model_names)} models from {INPUT_PATH.name}")
191
+
192
+ specs = []
193
+ errors = []
194
+
195
+ for i, name in enumerate(model_names):
196
+ print(f"[{i+1}/{len(model_names)}] {name}...", end=" ", flush=True)
197
+ try:
198
+ spec = generate_spec(name)
199
+ # Validate by doing a forward pass
200
+ ok, msg = validate_spec(spec)
201
+ if ok:
202
+ specs.append(spec)
203
+ print(f"layer={spec['layer']} resize={spec['preprocess']['resize']} "
204
+ f"crop={spec['preprocess']['crop']} {msg}")
205
+ else:
206
+ errors.append((name, msg))
207
+ print(f"VALIDATION FAILED: {msg}")
208
+ except Exception as e:
209
+ errors.append((name, str(e)))
210
+ print(f"FAILED: {e}")
211
+
212
+ OUTPUT_PATH.write_text(json.dumps(specs, indent=2) + "\n")
213
+ print(f"\nWrote {len(specs)} specs to {OUTPUT_PATH}")
214
+
215
+ if errors:
216
+ print(f"\n{len(errors)} errors:")
217
+ for name, msg in errors:
218
+ print(f" {name}: {msg}")
219
+ sys.exit(1)
220
+ else:
221
+ print(f"\nAll {len(specs)} models generated and validated successfully.")
222
+
223
+
224
+ if __name__ == "__main__":
225
+ main()
scripts/pipeline_smoke_test.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import os
5
+ from pathlib import Path
6
+
7
+ import modal
8
+
9
+
10
+ def _require_env(name: str) -> str:
11
+ value = os.environ.get(name, "").strip()
12
+ if not value:
13
+ raise ValueError(f"Missing required env var: {name}")
14
+ return value
15
+
16
+
17
+ def main() -> None:
18
+ _require_env("HACKATHON_MODAL_ENABLE")
19
+ _require_env("HACKATHON_MODEL_REGISTRY")
20
+ _require_env("HACKATHON_STIMULI_CATALOG")
21
+ data_dir = _require_env("HACKATHON_DATA_DIR")
22
+
23
+ app_name = os.environ.get("HACKATHON_MODAL_APP", "iclr2026-eval")
24
+ seed_fn = modal.Function.from_name(app_name, "seed_dummy_dataset")
25
+ seed = seed_fn.remote(num_images=6, image_size=224, dataset_name="dummy")
26
+ print(f"Seeded dataset at {seed['dataset_root']}")
27
+
28
+ from app import submit_blue, submit_red
29
+
30
+ blue_payload = json.dumps({"models": ["resnet18", "resnet34"]})
31
+ red_payload = json.dumps(
32
+ {
33
+ "differentiating_images": [
34
+ {"dataset_name": "dummy", "image_identifier": "images/img_0000.png"},
35
+ {"dataset_name": "dummy", "image_identifier": "images/img_0001.png"},
36
+ ]
37
+ }
38
+ )
39
+
40
+ blue_msg, blue_leaderboard, blue_pairwise = submit_blue("pipeline-test", blue_payload)
41
+ print("Blue message:", blue_msg)
42
+ print("Blue leaderboard:", blue_leaderboard.tail(1).to_dict(orient="records"))
43
+ print("Blue pairwise:", blue_pairwise.to_dict(orient="records"))
44
+
45
+ assert not blue_leaderboard.empty, "Blue leaderboard should not be empty."
46
+ assert not blue_pairwise.empty, "Blue pairwise table should not be empty."
47
+
48
+ red_msg, red_leaderboard, red_pairwise = submit_red("pipeline-test", red_payload)
49
+ print("Red message:", red_msg)
50
+ print("Red leaderboard:", red_leaderboard.tail(1).to_dict(orient="records"))
51
+ print("Red pairwise:", red_pairwise.to_dict(orient="records"))
52
+
53
+ assert not red_leaderboard.empty, "Red leaderboard should not be empty."
54
+ assert not red_pairwise.empty, "Red pairwise table should not be empty."
55
+
56
+ for df in (blue_pairwise, red_pairwise):
57
+ cka_vals = df["CKA"].astype(float)
58
+ assert (cka_vals >= -1e-3).all(), "CKA should be >= 0."
59
+ assert (cka_vals <= 1.0001).all(), "CKA should be <= 1."
60
+
61
+ blue_path = Path(data_dir) / "blue_submissions.json"
62
+ red_path = Path(data_dir) / "red_submissions.json"
63
+ assert blue_path.exists(), f"Missing submission file: {blue_path}"
64
+ assert red_path.exists(), f"Missing submission file: {red_path}"
65
+
66
+ print("Submission pipeline smoke test complete.")
67
+
68
+
69
+ if __name__ == "__main__":
70
+ main()
scripts/red_team_smoke_test.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import os
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ # Add project root to path so we can import app module
10
+ PROJECT_ROOT = Path(__file__).resolve().parent.parent
11
+ sys.path.insert(0, str(PROJECT_ROOT))
12
+
13
+ import modal
14
+
15
+ from dotenv import load_dotenv
16
+ load_dotenv()
17
+
18
+
19
+ def _require_env(name: str) -> str:
20
+ value = os.environ.get(name, "").strip()
21
+ if not value:
22
+ raise ValueError(f"Missing required env var: {name}")
23
+ return value
24
+
25
+
26
+ def _seed_dummy_dataset(app_name: str) -> None:
27
+ seed_fn = modal.Function.from_name(app_name, "seed_dummy_dataset")
28
+ seed = seed_fn.remote(num_images=6, image_size=224, dataset_name="dummy")
29
+ print(f"Seeded dataset at {seed['dataset_root']}")
30
+
31
+
32
+ def _load_stimuli_from_catalog(stimuli_path: str) -> list[dict[str, str]]:
33
+ """Load stimuli from a JSONL catalog file."""
34
+ stimuli = []
35
+ with open(stimuli_path, "r") as f:
36
+ for line in f:
37
+ line = line.strip()
38
+ if line:
39
+ stimuli.append(json.loads(line))
40
+ return stimuli
41
+
42
+
43
+ def main() -> None:
44
+ parser = argparse.ArgumentParser(description="Red team smoke test")
45
+ parser.add_argument(
46
+ "--stimuli",
47
+ type=str,
48
+ default=None,
49
+ help="Path to custom stimuli JSONL file. If not provided, uses HACKATHON_STIMULI_CATALOG env var.",
50
+ )
51
+ parser.add_argument(
52
+ "--s3",
53
+ action="store_true",
54
+ help="Use S3-backed datasets (requires aws-s3-credentials Modal secret).",
55
+ )
56
+ parser.add_argument(
57
+ "--skip-seed",
58
+ action="store_true",
59
+ help="Skip seeding dummy dataset (use when testing with real images).",
60
+ )
61
+ args = parser.parse_args()
62
+
63
+ _require_env("HACKATHON_MODAL_ENABLE")
64
+ _require_env("HACKATHON_MODEL_REGISTRY")
65
+ data_dir = _require_env("HACKATHON_DATA_DIR")
66
+
67
+ # Use custom stimuli if provided, otherwise use env var
68
+ if args.stimuli:
69
+ stimuli_path = Path(args.stimuli).resolve()
70
+ if not stimuli_path.exists():
71
+ raise ValueError(f"Stimuli file not found: {stimuli_path}")
72
+ os.environ["HACKATHON_STIMULI_CATALOG"] = str(stimuli_path)
73
+ print(f"Using custom stimuli: {stimuli_path}")
74
+ else:
75
+ _require_env("HACKATHON_STIMULI_CATALOG")
76
+
77
+ stimuli_catalog_path = os.environ.get("HACKATHON_STIMULI_CATALOG", "").strip()
78
+
79
+ # Set S3 mode if requested
80
+ if args.s3:
81
+ os.environ["HACKATHON_USE_S3"] = "true"
82
+ print("S3 mode enabled - will use extract_embeddings_s3 function")
83
+
84
+ app_name = os.environ.get("HACKATHON_MODAL_APP", "iclr2026-eval")
85
+
86
+ # Only seed dummy dataset if not using real images
87
+ if not args.skip_seed and not args.s3:
88
+ _seed_dummy_dataset(app_name)
89
+ elif args.skip_seed:
90
+ print("Skipping dummy dataset seeding")
91
+ elif args.s3:
92
+ print("S3 mode: skipping dummy dataset seeding (using real images)")
93
+
94
+ from app import submit_red
95
+
96
+ # Build stimulus sets based on mode
97
+ if args.s3:
98
+ # Load stimuli from catalog for S3 mode
99
+ catalog_stimuli = _load_stimuli_from_catalog(stimuli_catalog_path)
100
+ if len(catalog_stimuli) < 6:
101
+ raise ValueError(f"Need at least 6 stimuli in catalog, found {len(catalog_stimuli)}")
102
+
103
+ # Create test sets from real catalog stimuli
104
+ stimulus_sets = [
105
+ catalog_stimuli[0:2], # First 2 stimuli
106
+ catalog_stimuli[2:5], # Next 3 stimuli
107
+ [catalog_stimuli[1], catalog_stimuli[5]], # Mixed selection
108
+ ]
109
+ print(f"Using {len(catalog_stimuli)} stimuli from catalog for S3 mode")
110
+ else:
111
+ # Use dummy stimuli for local mode
112
+ stimulus_sets = [
113
+ [
114
+ {"dataset_name": "dummy", "image_identifier": "images/img_0000.png"},
115
+ {"dataset_name": "dummy", "image_identifier": "images/img_0001.png"},
116
+ ],
117
+ [
118
+ {"dataset_name": "dummy", "image_identifier": "images/img_0002.png"},
119
+ {"dataset_name": "dummy", "image_identifier": "images/img_0003.png"},
120
+ {"dataset_name": "dummy", "image_identifier": "images/img_0004.png"},
121
+ ],
122
+ [
123
+ {"dataset_name": "dummy", "image_identifier": "images/img_0001.png"},
124
+ {"dataset_name": "dummy", "image_identifier": "images/img_0005.png"},
125
+ ],
126
+ ]
127
+
128
+ for idx, stimuli in enumerate(stimulus_sets, start=1):
129
+ payload = json.dumps({"differentiating_images": stimuli})
130
+ submitter = f"red-test-{idx}"
131
+ msg, leaderboard, pairwise = submit_red(submitter, payload)
132
+ print(f"Submission {idx} message: {msg}")
133
+ print(f"Submission {idx} leaderboard: {leaderboard.tail(1).to_dict(orient='records')}")
134
+ print(f"Submission {idx} pairwise: {pairwise.to_dict(orient='records')}")
135
+ assert not pairwise.empty, "Pairwise table should not be empty."
136
+
137
+ red_path = Path(data_dir) / "red_submissions.json"
138
+ assert red_path.exists(), f"Missing submission file: {red_path}"
139
+ print("Red team smoke test complete.")
140
+
141
+
142
+ if __name__ == "__main__":
143
+ main()
scripts/run_local.sh ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+
6
+ # Prefer cluster scratch if available; fall back to a local cache in the repo.
7
+ if [ -n "${CACHE_ROOT:-}" ]; then
8
+ CACHE_BASE="$CACHE_ROOT"
9
+ elif [ -d "/orcd/scratch/bcs/001" ]; then
10
+ CACHE_BASE="/orcd/scratch/bcs/001/$USER"
11
+ else
12
+ CACHE_BASE="${PROJECT_ROOT}/.cache"
13
+ fi
14
+
15
+ export HF_HOME="${HF_HOME:-${CACHE_BASE}/.cache/huggingface}"
16
+ export TORCH_HOME="${TORCH_HOME:-${CACHE_BASE}/.cache/torch}"
17
+
18
+ mkdir -p "$HF_HOME" "$TORCH_HOME"
19
+
20
+ exec python "${PROJECT_ROOT}/app.py"
scripts/smoke_test_registry.py ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Smoke test to validate model registry specs on Modal.
3
+
4
+ For each model in the registry:
5
+ 1. Creates the model via timm (pretrained=False for speed)
6
+ 2. Builds the preprocessing transform from the spec
7
+ 3. Runs a forward pass with a dummy image
8
+ 4. Registers a hook on the specified layer
9
+ 5. Verifies the embedding output is a valid tensor with expected dimensions
10
+
11
+ Usage (local, no GPU needed for smoke test):
12
+ python scripts/smoke_test_registry.py --registry configs/blue_team_model_registry.json
13
+
14
+ Usage (Modal):
15
+ modal run scripts/smoke_test_registry.py --registry configs/blue_team_model_registry.json
16
+
17
+ Usage (validate red team registry — from private eval-backend repo):
18
+ python scripts/smoke_test_registry.py --registry /path/to/eval-backend/configs/red_team_model_registry.json
19
+ """
20
+ from __future__ import annotations
21
+
22
+ import argparse
23
+ import json
24
+ import sys
25
+ import time
26
+ from pathlib import Path
27
+ from typing import Any
28
+
29
+
30
+ def validate_single_model(spec: dict[str, Any]) -> tuple[bool, str, dict[str, Any]]:
31
+ """Validate a single model spec by loading it and running a forward pass.
32
+
33
+ Returns (success, message, details).
34
+ """
35
+ import torch
36
+ import timm
37
+ from torchvision import transforms
38
+
39
+ model_name = spec["model_name"]
40
+ layer = spec["layer"]
41
+ embedding = spec.get("embedding", "flatten")
42
+ preprocess = spec.get("preprocess", {})
43
+
44
+ details: dict[str, Any] = {
45
+ "model_name": model_name,
46
+ "layer": layer,
47
+ "embedding": embedding,
48
+ }
49
+
50
+ try:
51
+ # 1. Create model
52
+ t0 = time.time()
53
+ model = timm.create_model(model_name, pretrained=False)
54
+ model.eval()
55
+ details["model_load_time"] = round(time.time() - t0, 2)
56
+
57
+ # 2. Verify layer exists
58
+ modules = dict(model.named_modules())
59
+ if layer not in modules:
60
+ available = [n for n in modules.keys() if n][:20]
61
+ return False, f"Layer '{layer}' not found. Available (first 20): {available}", details
62
+
63
+ target_module = modules[layer]
64
+
65
+ # 3. Build transform from spec
66
+ resize = preprocess.get("resize")
67
+ crop = preprocess.get("crop")
68
+ mean = preprocess.get("mean", [0.485, 0.456, 0.406])
69
+ std = preprocess.get("std", [0.229, 0.224, 0.225])
70
+
71
+ ops = []
72
+ if resize:
73
+ ops.append(transforms.Resize((resize, resize)))
74
+ if crop:
75
+ ops.append(transforms.CenterCrop(crop))
76
+ ops.extend([transforms.ToTensor(), transforms.Normalize(mean=mean, std=std)])
77
+ transform = transforms.Compose(ops)
78
+
79
+ # 4. Create dummy input and run forward pass with hook
80
+ from PIL import Image
81
+ import numpy as np
82
+
83
+ # Create a dummy RGB image larger than any resize
84
+ dummy_size = max(resize or 224, crop or 224, 224) + 32
85
+ dummy_img = Image.fromarray(
86
+ np.random.randint(0, 256, (dummy_size, dummy_size, 3), dtype=np.uint8)
87
+ )
88
+ input_tensor = transform(dummy_img).unsqueeze(0)
89
+ details["input_shape"] = list(input_tensor.shape)
90
+
91
+ outputs = []
92
+
93
+ def hook(_module, _inputs, output):
94
+ outputs.append(output)
95
+
96
+ handle = target_module.register_forward_hook(hook)
97
+
98
+ t0 = time.time()
99
+ with torch.no_grad():
100
+ model(input_tensor)
101
+ details["forward_time"] = round(time.time() - t0, 2)
102
+
103
+ handle.remove()
104
+
105
+ # 5. Validate hook output
106
+ if not outputs:
107
+ return False, "No output captured from hook", details
108
+
109
+ out = outputs[0]
110
+ if isinstance(out, (tuple, list)):
111
+ out = out[0]
112
+ if isinstance(out, dict):
113
+ out = out.get("last_hidden_state") or out.get("pooler_output")
114
+ if not isinstance(out, torch.Tensor):
115
+ return False, f"Hook output is not a tensor: {type(out).__name__}", details
116
+
117
+ details["raw_output_shape"] = list(out.shape)
118
+
119
+ # 6. Apply embedding strategy
120
+ if out.ndim == 2:
121
+ embedded = out
122
+ elif out.ndim >= 3:
123
+ if embedding == "cls":
124
+ embedded = out[:, 0]
125
+ elif embedding == "pool":
126
+ embedded = out.mean(dim=tuple(range(2, out.ndim)))
127
+ elif embedding == "mean":
128
+ embedded = out.mean(dim=tuple(range(1, out.ndim)))
129
+ else: # flatten
130
+ embedded = out.flatten(start_dim=1)
131
+ else:
132
+ embedded = out.flatten(start_dim=1)
133
+
134
+ details["embedding_shape"] = list(embedded.shape)
135
+ details["embedding_dim"] = int(embedded.shape[1]) if embedded.ndim == 2 else int(embedded.numel())
136
+
137
+ # 7. Sanity checks
138
+ if embedded.ndim != 2:
139
+ return False, f"Embedding is not 2D after strategy: shape={embedded.shape}", details
140
+ if embedded.shape[0] != 1:
141
+ return False, f"Batch dimension mismatch: {embedded.shape[0]}", details
142
+ if embedded.shape[1] == 0:
143
+ return False, "Embedding dimension is 0", details
144
+ if torch.isnan(embedded).any():
145
+ return False, "Embedding contains NaN values", details
146
+ if torch.isinf(embedded).any():
147
+ return False, "Embedding contains Inf values", details
148
+
149
+ return True, f"OK (dim={details['embedding_dim']})", details
150
+
151
+ except Exception as e:
152
+ return False, f"Error: {e}", details
153
+
154
+
155
+ def main() -> None:
156
+ parser = argparse.ArgumentParser(description="Smoke test model registry specs")
157
+ parser.add_argument(
158
+ "--registry",
159
+ type=str,
160
+ required=True,
161
+ help="Path to model registry JSON file",
162
+ )
163
+ parser.add_argument(
164
+ "--model",
165
+ type=str,
166
+ default=None,
167
+ help="Test only a specific model by name (for debugging)",
168
+ )
169
+ parser.add_argument(
170
+ "--output",
171
+ type=str,
172
+ default=None,
173
+ help="Path to write detailed results JSON",
174
+ )
175
+ args = parser.parse_args()
176
+
177
+ registry_path = Path(args.registry)
178
+ specs = json.loads(registry_path.read_text())
179
+ if isinstance(specs, dict):
180
+ specs = specs.get("models", specs)
181
+
182
+ if args.model:
183
+ specs = [s for s in specs if s["model_name"] == args.model]
184
+ if not specs:
185
+ print(f"Model '{args.model}' not found in registry")
186
+ sys.exit(1)
187
+
188
+ print(f"Smoke testing {len(specs)} models from {registry_path.name}")
189
+ print("=" * 70)
190
+
191
+ results = []
192
+ passed = 0
193
+ failed = 0
194
+
195
+ for i, spec in enumerate(specs):
196
+ name = spec["model_name"]
197
+ print(f"[{i+1}/{len(specs)}] {name}...", end=" ", flush=True)
198
+
199
+ ok, msg, details = validate_single_model(spec)
200
+ details["passed"] = ok
201
+ details["message"] = msg
202
+ results.append(details)
203
+
204
+ if ok:
205
+ passed += 1
206
+ print(f"PASS - {msg}")
207
+ else:
208
+ failed += 1
209
+ print(f"FAIL - {msg}")
210
+
211
+ print("=" * 70)
212
+ print(f"Results: {passed} passed, {failed} failed out of {len(specs)}")
213
+
214
+ if args.output:
215
+ output_path = Path(args.output)
216
+ output_path.write_text(json.dumps(results, indent=2) + "\n")
217
+ print(f"Detailed results written to {output_path}")
218
+
219
+ if failed > 0:
220
+ print("\nFailed models:")
221
+ for r in results:
222
+ if not r["passed"]:
223
+ print(f" {r['model_name']}: {r['message']}")
224
+ sys.exit(1)
225
+ else:
226
+ print("\nAll models passed smoke test!")
227
+
228
+
229
+ if __name__ == "__main__":
230
+ main()
scripts/smoke_test_submission.py ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """End-to-end smoke test mimicking a blue team submission via Modal.
3
+
4
+ Picks 20 models from the blue team registry and 50 images from the
5
+ stimuli catalog, runs the full extraction + CKA scoring pipeline
6
+ on Modal, and verifies the results.
7
+
8
+ Usage:
9
+ python scripts/smoke_test_submission.py \
10
+ --registry configs/blue_team_model_registry.json \
11
+ --stimuli configs/blue_team_images.jsonl
12
+
13
+ # With custom counts:
14
+ python scripts/smoke_test_submission.py \
15
+ --num-models 5 --num-stimuli 10
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import argparse
21
+ import hashlib
22
+ import json
23
+ import sys
24
+ from pathlib import Path
25
+
26
+
27
+ def load_registry(path: str) -> list[dict]:
28
+ data = json.loads(Path(path).read_text())
29
+ if isinstance(data, dict):
30
+ return data["models"]
31
+ return data
32
+
33
+
34
+ def load_stimuli(path: str) -> list[dict]:
35
+ p = Path(path)
36
+ if p.suffix == ".jsonl":
37
+ return [json.loads(line) for line in p.read_text().splitlines() if line.strip()]
38
+ data = json.loads(p.read_text())
39
+ if isinstance(data, dict):
40
+ return data["stimuli"]
41
+ return data
42
+
43
+
44
+ def cache_key_from_payload(registry: list[dict], stimuli: list[dict]) -> str:
45
+ payload = {"registry": registry, "stimuli": stimuli}
46
+ encoded = json.dumps(payload, sort_keys=True).encode("utf-8")
47
+ digest = hashlib.sha1(encoded).hexdigest()[:12]
48
+ return f"smoke_{digest}"
49
+
50
+
51
+ def main():
52
+ parser = argparse.ArgumentParser(description="End-to-end blue team submission smoke test on Modal")
53
+ parser.add_argument("--registry", default="configs/blue_team_model_registry.json",
54
+ help="Path to blue team model registry JSON")
55
+ parser.add_argument("--stimuli", default="configs/blue_team_images.jsonl",
56
+ help="Path to stimuli catalog JSONL")
57
+ parser.add_argument("--num-models", type=int, default=20,
58
+ help="Number of models to select (default: 20)")
59
+ parser.add_argument("--num-stimuli", type=int, default=50,
60
+ help="Number of stimuli to select (default: 50)")
61
+ parser.add_argument("--app-name", default="iclr2026-eval",
62
+ help="Modal app name")
63
+ parser.add_argument("--batch-size", type=int, default=64,
64
+ help="Batch size for embedding extraction")
65
+ args = parser.parse_args()
66
+
67
+ # Load full registry and stimuli
68
+ full_registry = load_registry(args.registry)
69
+ full_stimuli = load_stimuli(args.stimuli)
70
+
71
+ print(f"Full registry: {len(full_registry)} models")
72
+ print(f"Full stimuli: {len(full_stimuli)} images")
73
+
74
+ # Select subset - pick models evenly spaced for diversity
75
+ n_models = min(args.num_models, len(full_registry))
76
+ if n_models < len(full_registry):
77
+ step = len(full_registry) / n_models
78
+ indices = [int(i * step) for i in range(n_models)]
79
+ subset_registry = [full_registry[i] for i in indices]
80
+ else:
81
+ subset_registry = full_registry
82
+
83
+ n_stimuli = min(args.num_stimuli, len(full_stimuli))
84
+ subset_stimuli = full_stimuli[:n_stimuli]
85
+
86
+ model_names = [m["model_name"] for m in subset_registry]
87
+ print(f"\nSelected {len(subset_registry)} models:")
88
+ for m in model_names:
89
+ print(f" - {m}")
90
+ print(f"\nSelected {len(subset_stimuli)} stimuli (first {n_stimuli} from catalog)")
91
+
92
+ # Build cache key
93
+ cache_key = cache_key_from_payload(subset_registry, subset_stimuli)
94
+ print(f"\nCache key: {cache_key}")
95
+
96
+ # Connect to Modal
97
+ print("\nConnecting to Modal...")
98
+ import modal
99
+
100
+ extract_fn = modal.Function.from_name(args.app_name, "extract_embeddings_s3")
101
+ score_fn = modal.Function.from_name(args.app_name, "compute_pairwise_cka")
102
+ print("Modal connection OK")
103
+
104
+ # Step 1: Extract embeddings
105
+ print(f"\n{'=' * 60}")
106
+ print("STEP 1: Extracting embeddings...")
107
+ print(f"{'=' * 60}")
108
+
109
+ extract_result = extract_fn.remote(
110
+ model_registry=subset_registry,
111
+ stimuli=subset_stimuli,
112
+ cache_key=cache_key,
113
+ batch_size=args.batch_size,
114
+ reuse_cache=False, # Force fresh extraction for smoke test
115
+ )
116
+
117
+ print(f"\nExtraction result:")
118
+ print(f" cache_key: {extract_result.get('cache_key')}")
119
+ print(f" num_stimuli: {extract_result.get('num_stimuli')}")
120
+ print(f" models: {len(extract_result.get('models', []))}")
121
+
122
+ for m in extract_result.get("models", []):
123
+ print(
124
+ f" {m['model_name']:45s} layer={m.get('layer', '?'):25s} "
125
+ f"dim={m.get('dim', '?'):>6} samples={m.get('num_samples', '?')}"
126
+ )
127
+
128
+ # Validate extraction
129
+ errors = []
130
+ for m in extract_result.get("models", []):
131
+ if m.get("num_samples") != n_stimuli:
132
+ errors.append(f" {m['model_name']}: expected {n_stimuli} samples, got {m.get('num_samples')}")
133
+ if m.get("dim", 0) <= 0:
134
+ errors.append(f" {m['model_name']}: invalid dim {m.get('dim')}")
135
+
136
+ if errors:
137
+ print(f"\nExtraction ERRORS:")
138
+ for e in errors:
139
+ print(e)
140
+ sys.exit(1)
141
+ print(f"\nExtraction: ALL {len(extract_result.get('models', []))} models OK")
142
+
143
+ # Step 2: Compute pairwise CKA
144
+ print(f"\n{'=' * 60}")
145
+ print("STEP 2: Computing pairwise CKA...")
146
+ print(f"{'=' * 60}")
147
+
148
+ cka_result = score_fn.remote(
149
+ cache_key=cache_key,
150
+ model_names=model_names,
151
+ )
152
+
153
+ avg_cka = cka_result.get("avg_cka", 0.0)
154
+ pairwise = cka_result.get("pairwise", [])
155
+
156
+ print(f"\nCKA results:")
157
+ print(f" avg_cka: {avg_cka:.6f}")
158
+ print(f" num_pairs: {len(pairwise)}")
159
+
160
+ expected_pairs = n_models * (n_models - 1) // 2
161
+ if len(pairwise) != expected_pairs:
162
+ print(f" WARNING: expected {expected_pairs} pairs, got {len(pairwise)}")
163
+
164
+ # Show top 5 and bottom 5 pairs
165
+ sorted_pairs = sorted(pairwise, key=lambda x: x.get("cka", 0), reverse=True)
166
+ print(f"\n Top 5 most similar pairs:")
167
+ for p in sorted_pairs[:5]:
168
+ ma = p.get("model_a", "?")
169
+ mb = p.get("model_b", "?")
170
+ cka = p.get("cka", 0.0)
171
+ print(f" {ma:40s} <-> {mb:40s} CKA={cka:.6f}")
172
+
173
+ print(f"\n Bottom 5 least similar pairs:")
174
+ for p in sorted_pairs[-5:]:
175
+ ma = p.get("model_a", "?")
176
+ mb = p.get("model_b", "?")
177
+ cka = p.get("cka", 0.0)
178
+ print(f" {ma:40s} <-> {mb:40s} CKA={cka:.6f}")
179
+
180
+ # Validate CKA results
181
+ cka_errors = []
182
+ for p in pairwise:
183
+ cka_val = p.get("cka")
184
+ if cka_val is None:
185
+ cka_errors.append(" Missing CKA value for a pair")
186
+ elif not (-0.1 <= cka_val <= 1.5): # Allow slight numerical overshoot
187
+ ma = p.get("model_a", "?")
188
+ mb = p.get("model_b", "?")
189
+ cka_errors.append(f" {ma} <-> {mb}: CKA={cka_val} out of expected range")
190
+
191
+ if cka_errors:
192
+ print(f"\nCKA ERRORS:")
193
+ for e in cka_errors:
194
+ print(e)
195
+ sys.exit(1)
196
+
197
+ # Step 3: Validate submission format (local check)
198
+ print(f"\n{'=' * 60}")
199
+ print("STEP 3: Validating submission format...")
200
+ print(f"{'=' * 60}")
201
+
202
+ submission_payload = {
203
+ "models": [
204
+ {"model_name": m["model_name"], "layer_name": m["layer"]}
205
+ for m in subset_registry
206
+ ]
207
+ }
208
+ print(f"\n Sample submission entry: {json.dumps(submission_payload['models'][0])}")
209
+
210
+ try:
211
+ from src.hackathon.validation import (
212
+ BLUE_TEAM_REQUIRED_MODELS,
213
+ load_model_registry,
214
+ load_model_registry_specs,
215
+ validate_blue_submission,
216
+ )
217
+
218
+ registry_names = load_model_registry(args.registry)
219
+ registry_specs = load_model_registry_specs(args.registry)
220
+
221
+ if n_models == BLUE_TEAM_REQUIRED_MODELS:
222
+ validated_names = validate_blue_submission(
223
+ submission_payload,
224
+ model_registry=registry_names,
225
+ registry_specs=registry_specs,
226
+ )
227
+ print(f" Validation OK: {len(validated_names)} models accepted")
228
+ else:
229
+ print(f" Skipping count validation (selected {n_models}, required {BLUE_TEAM_REQUIRED_MODELS})")
230
+ # Still check layer matching
231
+ mismatches = []
232
+ for m in subset_registry:
233
+ name = m["model_name"]
234
+ if name in registry_specs:
235
+ expected = registry_specs[name]["layer"]
236
+ submitted = m["layer"]
237
+ if submitted != expected:
238
+ mismatches.append(f" {name}: layer={submitted} expected={expected}")
239
+ if mismatches:
240
+ print(f" Layer MISMATCHES:")
241
+ for mm in mismatches:
242
+ print(mm)
243
+ sys.exit(1)
244
+ print(f" Layer validation OK for all {n_models} models")
245
+ except ImportError as exc:
246
+ print(f" Skipping validation (import failed: {exc})")
247
+ except Exception as exc:
248
+ print(f" Validation FAILED: {exc}")
249
+ sys.exit(1)
250
+
251
+ # Summary
252
+ blue_score = avg_cka
253
+ print(f"\n{'=' * 60}")
254
+ print("SMOKE TEST PASSED")
255
+ print(f"{'=' * 60}")
256
+ print(f" Models: {n_models}")
257
+ print(f" Stimuli: {n_stimuli}")
258
+ print(f" Avg CKA: {avg_cka:.6f}")
259
+ print(f" Blue score: {blue_score:.6f}")
260
+ print(f" Pairs: {len(pairwise)} / {expected_pairs} expected")
261
+ print(f" All layers: validated against registry")
262
+ print()
263
+
264
+
265
+ if __name__ == "__main__":
266
+ main()
scripts/submit_blue_hf_dataset.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ import argparse
4
+
5
+ from datasets import Dataset
6
+ from dotenv import load_dotenv
7
+ load_dotenv()
8
+
9
+ DATASET_NAME = "bkhmsi/test-realign-hackathon-blue-team"
10
+ TOKEN_ENV = "HF_TOKEN"
11
+
12
+ def push_to_hf(token: str, stimuli: list[dict[str, str]]) -> None:
13
+ dataset = Dataset.from_list(stimuli)
14
+ print(f"> Pushing {len(dataset)} records to HF dataset {DATASET_NAME}")
15
+ dataset.push_to_hub(DATASET_NAME, token=token, private=True)
16
+
17
+ def read_jsonl(path: str) -> list[str]:
18
+ with open(path, "r") as f:
19
+ data = [json.loads(line) for line in f]
20
+ return data
21
+
22
+ def main() -> None:
23
+ parser = argparse.ArgumentParser()
24
+ parser.add_argument("--path", type=str, required=False, default="test_submissions/blue_submission.jsonl", help="Path to the JSON file containing model names.")
25
+ args = parser.parse_args()
26
+ path = args.path
27
+
28
+ token = os.environ.get(TOKEN_ENV, "").strip()
29
+ if not token:
30
+ raise ValueError("Set HF_TOKEN before running this script.")
31
+
32
+ stimuli = read_jsonl(path)
33
+ push_to_hf(token, stimuli)
34
+
35
+ if __name__ == "__main__":
36
+ main()
scripts/submit_red_hf_dataset.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import json
3
+ import argparse
4
+
5
+ from datasets import Dataset
6
+ from dotenv import load_dotenv
7
+ load_dotenv()
8
+
9
+ DATASET_NAME = "bkhmsi/test-realign-hackathon-red-team"
10
+ TOKEN_ENV = "HF_TOKEN"
11
+
12
+ def push_to_hf(token: str, stimuli: list[dict[str, str]]) -> None:
13
+ dataset = Dataset.from_list(stimuli)
14
+ print(f"> Pushing {len(dataset)} records to HF dataset {DATASET_NAME}")
15
+ dataset.push_to_hub(DATASET_NAME, token=token, private=True)
16
+
17
+ def read_jsonl(path: str) -> list[str]:
18
+ with open(path, "r") as f:
19
+ data = [json.loads(line) for line in f]
20
+ return data
21
+
22
+ def main() -> None:
23
+ parser = argparse.ArgumentParser()
24
+ parser.add_argument("--path", type=str, required=False, default="test_submissions/red_submission.jsonl", help="Path to the JSON file containing stimuli names.")
25
+ args = parser.parse_args()
26
+ path = args.path
27
+
28
+ token = os.environ.get(TOKEN_ENV, "").strip()
29
+ if not token:
30
+ raise ValueError("Set HF_TOKEN before running this script.")
31
+
32
+ stimuli = read_jsonl(path)
33
+ push_to_hf(token, stimuli)
34
+
35
+ if __name__ == "__main__":
36
+ main()
scripts/validate_submission.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ import os
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ from src.hackathon.validation import (
10
+ MODEL_REGISTRY_ENV,
11
+ STIMULI_CATALOG_ENV,
12
+ load_model_registry,
13
+ load_stimuli_catalog,
14
+ validate_blue_submission,
15
+ validate_red_submission,
16
+ )
17
+
18
+
19
+ def _load_payload(path: str) -> dict:
20
+ if path == "-":
21
+ raw = sys.stdin.read()
22
+ source = "stdin"
23
+ else:
24
+ source = path
25
+ try:
26
+ raw = Path(path).read_text()
27
+ except FileNotFoundError as exc:
28
+ raise ValueError(f"File not found: {path}") from exc
29
+
30
+ try:
31
+ data = json.loads(raw)
32
+ except json.JSONDecodeError as exc:
33
+ raise ValueError(f"Invalid JSON in {source}: {exc}") from exc
34
+
35
+ if not isinstance(data, dict):
36
+ raise ValueError("Submission JSON must be an object.")
37
+ return data
38
+
39
+
40
+ def main() -> int:
41
+ parser = argparse.ArgumentParser(description="Validate blue/red submission JSON against the contract.")
42
+ parser.add_argument("payload", help="Path to submission JSON or '-' for stdin.")
43
+ parser.add_argument("--team", choices=["blue", "red"], required=True, help="Submission team to validate.")
44
+ parser.add_argument(
45
+ "--model-registry",
46
+ default=os.environ.get(MODEL_REGISTRY_ENV, ""),
47
+ help=f"Model registry JSON path (defaults to ${MODEL_REGISTRY_ENV}).",
48
+ )
49
+ parser.add_argument(
50
+ "--stimuli-catalog",
51
+ default=os.environ.get(STIMULI_CATALOG_ENV, ""),
52
+ help=f"Stimuli catalog JSON/JSONL path (defaults to ${STIMULI_CATALOG_ENV}).",
53
+ )
54
+
55
+ args = parser.parse_args()
56
+ payload = _load_payload(args.payload)
57
+
58
+ if args.team == "blue":
59
+ registry = load_model_registry(args.model_registry or None)
60
+ models = validate_blue_submission(payload, model_registry=registry)
61
+ print(f"OK: blue submission validated ({len(models)} models).")
62
+ else:
63
+ catalog = load_stimuli_catalog(args.stimuli_catalog or None)
64
+ stimuli = validate_red_submission(payload, stimuli_catalog=catalog)
65
+ print(f"OK: red submission validated ({len(stimuli)} stimuli).")
66
+
67
+ return 0
68
+
69
+
70
+ if __name__ == "__main__":
71
+ raise SystemExit(main())
scripts/verify_cka.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+
3
+ from src.cka.compute import linear_cka, linear_cka_feature
4
+
5
+
6
+ def hsic_biased(k, l):
7
+ h = np.eye(k.shape[0], dtype=k.dtype) - 1 / k.shape[0]
8
+ return float(np.trace(k @ h @ l @ h))
9
+
10
+
11
+ def hsic_unbiased(k, l):
12
+ m = k.shape[0]
13
+ k_tilde = k.copy()
14
+ l_tilde = l.copy()
15
+ np.fill_diagonal(k_tilde, 0.0)
16
+ np.fill_diagonal(l_tilde, 0.0)
17
+ hsic_value = (
18
+ (np.sum(k_tilde * l_tilde.T))
19
+ + (np.sum(k_tilde) * np.sum(l_tilde) / ((m - 1) * (m - 2)))
20
+ - (2 * np.sum(k_tilde @ l_tilde) / (m - 2))
21
+ )
22
+ hsic_value /= m * (m - 3)
23
+ return float(hsic_value)
24
+
25
+
26
+ def ref_cka(a, b, unbiased=False):
27
+ k = a @ a.T
28
+ l = b @ b.T
29
+ hsic_fn = hsic_unbiased if unbiased else hsic_biased
30
+ hsic_kk = hsic_fn(k, k)
31
+ hsic_ll = hsic_fn(l, l)
32
+ hsic_kl = hsic_fn(k, l)
33
+ return float(hsic_kl / (np.sqrt(hsic_kk * hsic_ll) + 1e-6))
34
+
35
+
36
+ def main():
37
+ rng = np.random.default_rng(0)
38
+ a = rng.standard_normal((64, 128)).astype(np.float64)
39
+ b = rng.standard_normal((64, 128)).astype(np.float64)
40
+
41
+ our_biased = linear_cka(a, b, unbiased=False)
42
+ ref_biased = ref_cka(a, b, unbiased=False)
43
+
44
+ our_unbiased = linear_cka(a, b, unbiased=True)
45
+ ref_unbiased = ref_cka(a, b, unbiased=True)
46
+
47
+ our_feature = linear_cka_feature(a, b)
48
+
49
+ print("biased:", our_biased, ref_biased, "diff", abs(our_biased - ref_biased))
50
+ print("unbiased:", our_unbiased, ref_unbiased, "diff", abs(our_unbiased - ref_unbiased))
51
+ print("feature:", our_feature, ref_biased, "diff", abs(our_feature - ref_biased))
52
+
53
+
54
+ if __name__ == "__main__":
55
+ main()
slurm-verify-8056978.out ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ ok
2
+
src/about.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ TITLE = """
2
+ <div align="center" class="hackathon-header">
3
+ <h1 id="space-title">The Re-Align Hackathon</h1>
4
+ <p class="hackathon-subtitle">ICLR 2026 Workshop on Representational Alignment</p>
5
+ <h4 class="hackathon-nav">
6
+ <a href="#blue-team">Blue Team</a>
7
+ <span class="nav-divider">&bull;</span>
8
+ <a href="#red-team">Red Team</a>
9
+ <span class="nav-divider">&bull;</span>
10
+ <a href="#getting-started">Getting Started</a>
11
+ <span class="nav-divider">&bull;</span>
12
+ <a href="https://representational-alignment.github.io/2026/">Workshop</a>
13
+ </h4>
14
+ </div>
15
+ """
16
+
17
+ INTRODUCTION_TEXT = """
18
+ ## Challenge Overview
19
+
20
+ The Re-Align Hackathon explores **representational alignment** across vision models.
21
+
22
+ - **Blue Team** — Find 20 models with the most aligned representations (maximize CKA)
23
+ - **Red Team** — Find stimuli that drive model representations apart (minimize CKA)
24
+
25
+ Submissions are scored using [CKA (Centered Kernel Alignment)](https://arxiv.org/abs/1905.00414) computed on embeddings extracted from a fixed set of held-out images.
26
+ """
27
+
28
+ BLUE_SUBMISSION_TEXT = """
29
+ ### Blue Team — Maximize Alignment
30
+
31
+ Select **20 models** from the registry whose representations are most aligned.
32
+ Your score is the **mean pairwise CKA** across your selected models — higher is better.
33
+
34
+ **How to submit:**
35
+ 1. Create a HuggingFace dataset with `model_name` and `layer_name` columns
36
+ 2. Paste the dataset link below and click **Generate JSON**
37
+ 3. Review the generated JSON, then click **Submit**
38
+ """
39
+
40
+ RED_SUBMISSION_TEXT = """
41
+ ### Red Team — Maximize Divergence
42
+
43
+ Select **1000 stimuli** images that cause the fixed set of models to produce **divergent representations**.
44
+ Your score is **1 − avg CKA** — higher divergence ranks higher.
45
+
46
+ **How to submit:**
47
+ 1. Create a HuggingFace dataset with `dataset_name` and `image_identifier` columns
48
+ 2. Paste the dataset link below and click **Generate JSON**
49
+ 3. Review the generated JSON, then click **Submit**
50
+ """
51
+
52
+
53
+
54
+ GETTING_STARTED_TEXT = """
55
+ ## Getting Started
56
+
57
+ To participate in the hackathon, you can submit model selections (Blue Team) or stimulus selections
58
+ (Red Team). Each submission will be scored and ranked on the respective leaderboard.
59
+
60
+ ### Hugging Face datasets (private only)
61
+
62
+ You can optionally host the model/stimulus selections as a Hugging Face Dataset and paste the
63
+ dataset link into the app. These datasets must be private (do not publish public submissions).
64
+ For end-to-end examples, refer to `scripts/submit_blue_hf_dataset.py` and
65
+ `scripts/submit_red_hf_dataset.py`.
66
+
67
+ ### Blue Team dataset
68
+
69
+ Expected columns:
70
+ - `model_name`: string model name
71
+ - `layer_name`: string layer name
72
+
73
+ Example dataset row:
74
+ ```json
75
+ {
76
+ "model_name": "resnet18",
77
+ "layer_name": "fc"
78
+ }
79
+ ```
80
+
81
+ Create the dataset (example with `datasets` + `huggingface_hub`):
82
+ ```bash
83
+ pip install datasets huggingface_hub
84
+ ```
85
+ ```py
86
+ from datasets import Dataset
87
+ from huggingface_hub import login
88
+
89
+ login(token="hf_...") # optional if you already ran `huggingface-cli login`
90
+
91
+ rows = [
92
+ {"model_name": "resnet18", "layer_name": "fc"},
93
+ {"model_name": "resnet34", "layer_name": "fc"},
94
+ ]
95
+ ds = Dataset.from_list(rows)
96
+ ds.push_to_hub("your-username/blue-team-submission", private=True)
97
+ ```
98
+
99
+ Paste the dataset link into the app:
100
+ ```
101
+ your-username/blue-team-submission
102
+ ```
103
+
104
+ ### Red Team dataset
105
+
106
+ Expected columns:
107
+ - `dataset_name`: string dataset name
108
+ - `image_identifier`: string image identifier within the dataset
109
+
110
+ Example dataset row:
111
+ ```json
112
+ {
113
+ "dataset_name": "imagenet_val",
114
+ "image_identifier": "ILSVRC2012_val_00000001.JPEG"
115
+ }
116
+ ```
117
+
118
+ Create the dataset:
119
+ ```bash
120
+ pip install datasets huggingface_hub
121
+ ```
122
+ ```py
123
+ from datasets import Dataset
124
+ from huggingface_hub import login
125
+
126
+ login(token="hf_...") # optional if you already ran `huggingface-cli login`
127
+
128
+ rows = [
129
+ {
130
+ "dataset_name": "imagenet_val",
131
+ "image_identifier": "ILSVRC2012_val_00000001.JPEG",
132
+ },
133
+ {
134
+ "dataset_name": "objectnet",
135
+ "image_identifier": "objectnet-1.0/images/baking_sheet/01f362ca48a547c.png",
136
+ },
137
+ ]
138
+ ds = Dataset.from_list(rows)
139
+ ds.push_to_hub("your-username/red-team-submission", private=True)
140
+ ```
141
+
142
+ Paste the dataset link into the app:
143
+ ```
144
+ your-username/red-team-submission
145
+ ```
146
+
147
+ ### Access token (for private datasets)
148
+
149
+ 1. Go to your Hugging Face account settings: `https://huggingface.co/settings/tokens`
150
+ 2. Create a new token with the `Read` scope.
151
+ 3. Copy the token (it starts with `hf_...`).
152
+ 4. Paste it into the "HuggingFace access token (optional)" textbox in the app.
153
+ """
src/cka/__init__.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from src.cka.compute import linear_cka
2
+ from src.cka.embeddings import get_cached_embeddings, list_cached_embedding_names
3
+ from src.cka.storage import append_submission, load_submissions
4
+
5
+ __all__ = [
6
+ "append_submission",
7
+ "get_cached_embeddings",
8
+ "linear_cka",
9
+ "list_cached_embedding_names",
10
+ "load_submissions",
11
+ ]
src/cka/compute.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import numpy as np
4
+
5
+
6
+ def _validate_inputs(x: np.ndarray, y: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
7
+ x = np.asarray(x, dtype=np.float64)
8
+ y = np.asarray(y, dtype=np.float64)
9
+
10
+ if x.ndim != 2 or y.ndim != 2:
11
+ raise ValueError("CKA expects 2D arrays shaped [num_samples, dim].")
12
+ if x.shape[0] != y.shape[0]:
13
+ raise ValueError("CKA expects the same number of samples in both embeddings.")
14
+
15
+ return x, y
16
+
17
+
18
+ def hsic_biased(k: np.ndarray, l: np.ndarray) -> float:
19
+ """Biased HSIC, matches the reference implementation."""
20
+ m = k.shape[0]
21
+ h = np.eye(m, dtype=k.dtype) - (1.0 / m)
22
+ return float(np.trace(k @ h @ l @ h))
23
+
24
+
25
+ def hsic_unbiased(k: np.ndarray, l: np.ndarray) -> float:
26
+ """Unbiased HSIC as in Song et al. (2012)."""
27
+ m = k.shape[0]
28
+ if m < 4:
29
+ return 0.0
30
+
31
+ k_tilde = k.copy()
32
+ l_tilde = l.copy()
33
+ np.fill_diagonal(k_tilde, 0.0)
34
+ np.fill_diagonal(l_tilde, 0.0)
35
+
36
+ term1 = np.sum(k_tilde * l_tilde.T)
37
+ term2 = (np.sum(k_tilde) * np.sum(l_tilde)) / ((m - 1) * (m - 2))
38
+ term3 = (2 * np.sum(k_tilde @ l_tilde)) / (m - 2)
39
+ return float((term1 + term2 - term3) / (m * (m - 3)))
40
+
41
+
42
+ def linear_cka_feature(x: np.ndarray, y: np.ndarray, eps: float = 1e-6) -> float:
43
+ """Direct feature-space linear CKA (equivalent to biased HSIC for linear kernels)."""
44
+ x, y = _validate_inputs(x, y)
45
+
46
+ x = x - x.mean(axis=0, keepdims=True)
47
+ y = y - y.mean(axis=0, keepdims=True)
48
+
49
+ numerator = np.linalg.norm(x.T @ y, ord="fro") ** 2
50
+ denom = np.linalg.norm(x.T @ x, ord="fro") * np.linalg.norm(y.T @ y, ord="fro")
51
+ if denom == 0:
52
+ return 0.0
53
+ return float(numerator / (denom + eps))
54
+
55
+
56
+ def linear_cka(
57
+ x: np.ndarray,
58
+ y: np.ndarray,
59
+ *,
60
+ unbiased: bool = False,
61
+ eps: float = 1e-6,
62
+ ) -> float:
63
+ """Linear CKA computed via HSIC, matching the reference implementation."""
64
+ x, y = _validate_inputs(x, y)
65
+
66
+ k = x @ x.T
67
+ l = y @ y.T
68
+
69
+ hsic_fn = hsic_unbiased if unbiased else hsic_biased
70
+ hsic_kk = hsic_fn(k, k)
71
+ hsic_ll = hsic_fn(l, l)
72
+ hsic_kl = hsic_fn(k, l)
73
+
74
+ denom = np.sqrt(hsic_kk * hsic_ll)
75
+ return float(hsic_kl / (denom + eps))
src/cka/embeddings.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from functools import lru_cache
4
+
5
+ import numpy as np
6
+
7
+
8
+ @lru_cache(maxsize=1)
9
+ def get_cached_embeddings() -> dict[str, np.ndarray]:
10
+ """Return dummy cached embeddings until real data is wired in."""
11
+ rng = np.random.default_rng(1234)
12
+ num_samples = 128
13
+ dim = 64
14
+
15
+ base = rng.normal(size=(num_samples, dim)).astype(np.float32)
16
+ embeddings = {
17
+ "base": base,
18
+ "base_noise_small": (base + 0.05 * rng.normal(size=(num_samples, dim))).astype(np.float32),
19
+ "base_noise_medium": (base + 0.2 * rng.normal(size=(num_samples, dim))).astype(np.float32),
20
+ "random_1": rng.normal(size=(num_samples, dim)).astype(np.float32),
21
+ "random_2": rng.normal(size=(num_samples, dim)).astype(np.float32),
22
+ "random_3": rng.normal(size=(num_samples, dim)).astype(np.float32),
23
+ }
24
+
25
+ return embeddings
26
+
27
+
28
+ def list_cached_embedding_names() -> list[str]:
29
+ return sorted(get_cached_embeddings().keys())
src/cka/storage.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import os
5
+ import threading
6
+ from typing import Any
7
+
8
+ DEFAULT_DATA_PATH = os.environ.get(
9
+ "CKA_DATA_PATH",
10
+ os.path.join(os.getcwd(), "cka-data", "submissions.json"),
11
+ )
12
+
13
+ _LOCK = threading.Lock()
14
+
15
+
16
+ def load_submissions(data_path: str = DEFAULT_DATA_PATH) -> list[dict[str, Any]]:
17
+ if not os.path.exists(data_path):
18
+ return []
19
+
20
+ with _LOCK:
21
+ with open(data_path, "r") as f:
22
+ data = json.load(f)
23
+
24
+ if not isinstance(data, list):
25
+ raise ValueError(f"Expected a list in {data_path}.")
26
+
27
+ return data
28
+
29
+
30
+ def save_submissions(submissions: list[dict[str, Any]], data_path: str = DEFAULT_DATA_PATH) -> None:
31
+ data_dir = os.path.dirname(data_path)
32
+ if data_dir:
33
+ os.makedirs(data_dir, exist_ok=True)
34
+
35
+ tmp_path = f"{data_path}.tmp"
36
+ with _LOCK:
37
+ with open(tmp_path, "w") as f:
38
+ json.dump(submissions, f, indent=2)
39
+ os.replace(tmp_path, data_path)
40
+
41
+
42
+ def append_submission(submission: dict[str, Any], data_path: str = DEFAULT_DATA_PATH) -> list[dict[str, Any]]:
43
+ submissions = load_submissions(data_path)
44
+ submissions.append(submission)
45
+ save_submissions(submissions, data_path)
46
+ return submissions
src/display/css_html_js.py ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ custom_css = """
2
+
3
+ @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600;700&family=IBM+Plex+Mono:wght@400;600&display=swap");
4
+
5
+ /* Force dark theme everywhere */
6
+ :root, .dark, .light {
7
+ color-scheme: dark !important;
8
+ --bg-1: #0d1117;
9
+ --bg-2: #161b22;
10
+ --card-bg: #1c2128;
11
+ --ink-1: #e6edf3;
12
+ --ink-2: #8b949e;
13
+ --accent: #58a6ff;
14
+ --accent-hover: #79b8ff;
15
+ --accent-2: #bc8cff;
16
+ --border: #30363d;
17
+ --link-text-color: var(--accent);
18
+ --blue-team: #58a6ff;
19
+ --blue-team-hover: #79b8ff;
20
+ --red-team: #f85149;
21
+ --red-team-hover: #ff7b72;
22
+ --success: #3fb950;
23
+ --error: #f85149;
24
+ }
25
+
26
+ body,
27
+ .gradio-container {
28
+ font-family: "Space Grotesk", "Trebuchet MS", sans-serif;
29
+ color: var(--ink-1) !important;
30
+ background: var(--bg-1) !important;
31
+ }
32
+
33
+ .gradio-container .block {
34
+ background: var(--card-bg) !important;
35
+ border: 1px solid var(--border) !important;
36
+ border-radius: 10px;
37
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
38
+ }
39
+
40
+ /* Force text color on all Gradio elements */
41
+ .gradio-container *,
42
+ .gradio-container .prose,
43
+ .gradio-container .prose p,
44
+ .gradio-container .prose li,
45
+ .gradio-container .prose h1,
46
+ .gradio-container .prose h2,
47
+ .gradio-container .prose h3,
48
+ .gradio-container .prose h4,
49
+ .gradio-container .prose strong,
50
+ .gradio-container label,
51
+ .gradio-container span {
52
+ color: var(--ink-1);
53
+ }
54
+
55
+ .gradio-container .prose a,
56
+ .gradio-container a {
57
+ color: var(--accent) !important;
58
+ }
59
+
60
+ .gradio-container .prose code,
61
+ .gradio-container code {
62
+ background: #282e36 !important;
63
+ color: #e6edf3 !important;
64
+ }
65
+
66
+ .gradio-container .prose pre,
67
+ .gradio-container pre {
68
+ background: #161b22 !important;
69
+ border: 1px solid var(--border) !important;
70
+ }
71
+
72
+ .gradio-container input,
73
+ .gradio-container textarea,
74
+ .gradio-container select,
75
+ .gr-text-input textarea,
76
+ .gr-text-input input {
77
+ color: var(--ink-1) !important;
78
+ background: #0d1117 !important;
79
+ border: 1px solid var(--border) !important;
80
+ }
81
+
82
+ .gradio-container input::placeholder,
83
+ .gradio-container textarea::placeholder {
84
+ color: var(--ink-2) !important;
85
+ }
86
+
87
+ /* Tabs */
88
+ .gradio-container .tabs {
89
+ background: transparent !important;
90
+ }
91
+
92
+ .gradio-container button.tab-nav,
93
+ .gradio-container .tab-nav button {
94
+ color: var(--ink-2) !important;
95
+ background: transparent !important;
96
+ }
97
+
98
+ .gradio-container button.tab-nav.selected,
99
+ .gradio-container .tab-nav button.selected {
100
+ color: var(--ink-1) !important;
101
+ border-bottom-color: var(--accent) !important;
102
+ }
103
+
104
+ /* Accordion */
105
+ .gradio-container .accordion {
106
+ background: var(--card-bg) !important;
107
+ border-color: var(--border) !important;
108
+ }
109
+
110
+ /* Dataframe / table */
111
+ .gradio-container table {
112
+ background: var(--card-bg) !important;
113
+ }
114
+
115
+ .gradio-container table th {
116
+ background: #21262d !important;
117
+ color: var(--ink-1) !important;
118
+ border-color: var(--border) !important;
119
+ }
120
+
121
+ .gradio-container table td {
122
+ background: var(--card-bg) !important;
123
+ color: var(--ink-1) !important;
124
+ border-color: var(--border) !important;
125
+ }
126
+
127
+ .gradio-container table tr:nth-child(even) td {
128
+ background: #161b22 !important;
129
+ }
130
+
131
+ /* Buttons */
132
+ .gr-button {
133
+ background: var(--accent) !important;
134
+ color: #ffffff !important;
135
+ border: 1px solid transparent !important;
136
+ font-weight: 600;
137
+ letter-spacing: 0.01em;
138
+ }
139
+
140
+ .gr-button:hover {
141
+ background: var(--accent-hover) !important;
142
+ }
143
+
144
+ .gr-button.secondary {
145
+ background: var(--card-bg) !important;
146
+ color: var(--ink-1) !important;
147
+ border: 1px solid var(--border) !important;
148
+ }
149
+
150
+ .gr-button.secondary:hover {
151
+ border-color: var(--accent) !important;
152
+ color: var(--accent) !important;
153
+ }
154
+
155
+ /* Header */
156
+ .hackathon-header {
157
+ margin: 10px 0 24px;
158
+ }
159
+
160
+ .hackathon-header h1 {
161
+ font-size: 40px;
162
+ letter-spacing: 0.02em;
163
+ margin-bottom: 6px;
164
+ color: var(--ink-1) !important;
165
+ }
166
+
167
+ .hackathon-subtitle {
168
+ color: var(--ink-2) !important;
169
+ font-size: 18px;
170
+ margin-top: -4px;
171
+ margin-bottom: 8px;
172
+ }
173
+
174
+ .hackathon-nav {
175
+ font-weight: 500;
176
+ margin: 4px 0 10px;
177
+ }
178
+
179
+ .hackathon-nav a {
180
+ color: var(--ink-2) !important;
181
+ text-decoration: none;
182
+ padding: 0 8px;
183
+ }
184
+
185
+ .hackathon-nav a:hover {
186
+ color: var(--accent) !important;
187
+ }
188
+
189
+ .nav-divider {
190
+ color: var(--accent-2) !important;
191
+ }
192
+
193
+ .markdown-text {
194
+ font-size: 16px !important;
195
+ }
196
+
197
+ .tab-buttons button {
198
+ font-size: 20px;
199
+ }
200
+
201
+ /* Blue team accent */
202
+ .blue-team .gr-button.primary,
203
+ .blue-team .gr-button:not(.secondary) {
204
+ background: var(--blue-team) !important;
205
+ }
206
+ .blue-team .gr-button:not(.secondary):hover {
207
+ background: var(--blue-team-hover) !important;
208
+ }
209
+ .blue-team-header {
210
+ color: var(--blue-team) !important;
211
+ border-left: 4px solid var(--blue-team);
212
+ padding-left: 12px;
213
+ margin-bottom: 12px;
214
+ }
215
+
216
+ /* Red team accent */
217
+ .red-team .gr-button.primary,
218
+ .red-team .gr-button:not(.secondary) {
219
+ background: var(--red-team) !important;
220
+ }
221
+ .red-team .gr-button:not(.secondary):hover {
222
+ background: var(--red-team-hover) !important;
223
+ }
224
+ .red-team-header {
225
+ color: var(--red-team) !important;
226
+ border-left: 4px solid var(--red-team);
227
+ padding-left: 12px;
228
+ margin-bottom: 12px;
229
+ }
230
+
231
+ /* Status message styles */
232
+ .status-error { color: var(--error) !important; font-size: 16px; text-align: center; font-weight: 600; }
233
+ .status-warning { color: var(--accent-2) !important; font-size: 16px; text-align: center; font-weight: 600; }
234
+ .status-success { color: var(--success) !important; font-size: 16px; text-align: center; font-weight: 600; }
235
+ """
236
+
237
+ get_window_url_params = """
238
+ function(url_params) {
239
+ const params = new URLSearchParams(window.location.search);
240
+ url_params = Object.fromEntries(params);
241
+ return url_params;
242
+ }
243
+ """
src/display/formatting.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def model_hyperlink(link, model_name):
2
+ return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{model_name}</a>'
3
+
4
+
5
+ def make_clickable_model(model_name):
6
+ link = f"https://huggingface.co/{model_name}"
7
+ return model_hyperlink(link, model_name)
8
+
9
+
10
+ def styled_error(error):
11
+ return f"<p class='status-error'>{error}</p>"
12
+
13
+
14
+ def styled_warning(warn):
15
+ return f"<p class='status-warning'>{warn}</p>"
16
+
17
+
18
+ def styled_message(message):
19
+ return f"<p class='status-success'>{message}</p>"
20
+
21
+
22
+ def has_no_nan_values(df, columns):
23
+ return df[columns].notna().all(axis=1)
24
+
25
+
26
+ def has_nan_values(df, columns):
27
+ return df[columns].isna().any(axis=1)
src/hackathon/__init__.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from src.hackathon.data import get_dummy_model_embeddings, list_dummy_models, list_dummy_stimuli, stimulus_key
2
+ from src.hackathon.scoring import score_blue, score_blue_with_pairwise, score_red, score_red_with_pairwise
3
+ from src.hackathon.storage import append_submission, load_submissions, save_submissions
4
+
5
+ __all__ = [
6
+ "append_submission",
7
+ "get_dummy_model_embeddings",
8
+ "list_dummy_models",
9
+ "list_dummy_stimuli",
10
+ "load_submissions",
11
+ "save_submissions",
12
+ "score_blue",
13
+ "score_blue_with_pairwise",
14
+ "score_red",
15
+ "score_red_with_pairwise",
16
+ "stimulus_key",
17
+ ]
src/hackathon/data.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from functools import lru_cache
4
+ from typing import Iterable, Mapping
5
+
6
+ import numpy as np
7
+
8
+ Stimulus = Mapping[str, str]
9
+
10
+ _DUMMY_MODELS = [
11
+ "vit_base_patch16_224",
12
+ "vit_large_patch16_224",
13
+ "resnet50",
14
+ "resnet101",
15
+ "convnext_base",
16
+ "convnext_large",
17
+ "deit_base_patch16_224",
18
+ "clip_vit_b32",
19
+ "swin_tiny_patch4_window7_224",
20
+ ]
21
+
22
+ _DUMMY_STIMULI = [
23
+ {"dataset_name": "cifar100", "image_identifier": "test/airplane/image_0001.png"},
24
+ {"dataset_name": "cifar100", "image_identifier": "test/bear/image_0007.png"},
25
+ {"dataset_name": "cifar100", "image_identifier": "test/bottle/image_0012.png"},
26
+ {"dataset_name": "cifar100", "image_identifier": "test/bus/image_0021.png"},
27
+ {"dataset_name": "cifar100", "image_identifier": "test/girl/image_0033.png"},
28
+ {"dataset_name": "cifar100", "image_identifier": "test/keyboard/image_0044.png"},
29
+ {"dataset_name": "cifar100", "image_identifier": "test/rocket/image_0051.png"},
30
+ {"dataset_name": "cifar100", "image_identifier": "test/whale/image_0068.png"},
31
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n01440764/ILSVRC2012_val_00000964.JPEG"},
32
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n02123159/ILSVRC2012_val_00001459.JPEG"},
33
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n03255030/ILSVRC2012_val_00001903.JPEG"},
34
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n03445777/ILSVRC2012_val_00003572.JPEG"},
35
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n03729826/ILSVRC2012_val_00005336.JPEG"},
36
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n03902125/ILSVRC2012_val_00006614.JPEG"},
37
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n04254777/ILSVRC2012_val_00007190.JPEG"},
38
+ {"dataset_name": "imagenet1k", "image_identifier": "val/n04557648/ILSVRC2012_val_00009024.JPEG"},
39
+ ]
40
+
41
+
42
+ def list_dummy_models() -> list[str]:
43
+ return list(_DUMMY_MODELS)
44
+
45
+
46
+ def list_dummy_stimuli() -> list[dict[str, str]]:
47
+ return [dict(item) for item in _DUMMY_STIMULI]
48
+
49
+
50
+ def stimulus_key(stimulus: Stimulus) -> str:
51
+ dataset_name = stimulus.get("dataset_name", "").strip()
52
+ image_identifier = stimulus.get("image_identifier", "").strip()
53
+ if not dataset_name or not image_identifier:
54
+ raise ValueError("Stimulus must include dataset_name and image_identifier.")
55
+ return f"{dataset_name}::{image_identifier}"
56
+
57
+
58
+ def resolve_stimulus_indices(
59
+ selected_stimuli: Iterable[Stimulus | str],
60
+ available_stimuli: Iterable[Stimulus],
61
+ ) -> list[int]:
62
+ stimulus_index = {stimulus_key(stimulus): idx for idx, stimulus in enumerate(available_stimuli)}
63
+ keys: list[str] = []
64
+ for item in selected_stimuli:
65
+ if isinstance(item, str):
66
+ key = item
67
+ else:
68
+ key = stimulus_key(item)
69
+ keys.append(key)
70
+
71
+ if not keys:
72
+ raise ValueError("Select at least one stimulus.")
73
+ if len(keys) != len(set(keys)):
74
+ raise ValueError("Stimulus selections must be unique.")
75
+
76
+ missing = [key for key in keys if key not in stimulus_index]
77
+ if missing:
78
+ missing_str = ", ".join(missing)
79
+ raise ValueError(f"Unknown stimuli requested: {missing_str}")
80
+
81
+ return [stimulus_index[key] for key in keys]
82
+
83
+
84
+ @lru_cache(maxsize=1)
85
+ def get_dummy_model_embeddings() -> dict[str, np.ndarray]:
86
+ rng = np.random.default_rng(2026)
87
+ models = list_dummy_models()
88
+ stimuli = list_dummy_stimuli()
89
+ num_samples = len(stimuli)
90
+ dim = 64
91
+
92
+ family_by_model = {
93
+ "vit_base_patch16_224": "vit",
94
+ "vit_large_patch16_224": "vit",
95
+ "resnet50": "resnet",
96
+ "resnet101": "resnet",
97
+ "convnext_base": "convnext",
98
+ "convnext_large": "convnext",
99
+ "deit_base_patch16_224": "vit",
100
+ "clip_vit_b32": "vit",
101
+ "swin_tiny_patch4_window7_224": "swin",
102
+ }
103
+
104
+ global_base = rng.normal(size=(num_samples, dim)).astype(np.float32)
105
+ family_bases = {}
106
+ for family in sorted(set(family_by_model.values())):
107
+ family_noise = rng.normal(size=(num_samples, dim)).astype(np.float32)
108
+ family_stimulus = rng.normal(size=(num_samples, dim)).astype(np.float32)
109
+ # Separate family-level structure so cross-family CKA drops more.
110
+ family_bases[family] = 0.15 * global_base + 0.55 * family_noise + 0.30 * family_stimulus
111
+
112
+ scales = np.linspace(0.02, 0.08, len(models))
113
+
114
+ embeddings: dict[str, np.ndarray] = {}
115
+ for model_name, scale in zip(models, scales):
116
+ family = family_by_model.get(model_name, "other")
117
+ base = family_bases.get(family, global_base)
118
+ noise = rng.normal(size=(num_samples, dim)).astype(np.float32)
119
+ embeddings[model_name] = (base + scale * noise).astype(np.float32)
120
+
121
+ return embeddings
src/hackathon/modal_client.py ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Thin client for the private Modal evaluation backend.
2
+
3
+ The actual evaluation pipeline (embedding extraction, CKA scoring) lives in
4
+ a private repository and is deployed as a Modal app. This module calls the
5
+ deployed functions by name — no backend code is imported here.
6
+
7
+ Public configs (blue model registry) can still be controlled via HF Space env
8
+ vars for convenience. Secret configs (red team registry, blue heldout images)
9
+ are loaded server-side from the Modal volume — never sent from here.
10
+
11
+ The backend must be deployed first:
12
+ modal deploy scripts/modal_backend.py # from the private eval-backend repo
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import json
17
+ import os
18
+ from pathlib import Path
19
+ from typing import Any, Iterable
20
+
21
+ from src.hackathon.validation import (
22
+ BLUE_MODEL_REGISTRY_ENV,
23
+ MODEL_REGISTRY_ENV,
24
+ )
25
+
26
+
27
+ MODAL_ENABLE_ENV = "HACKATHON_MODAL_ENABLE"
28
+ MODAL_APP_ENV = "HACKATHON_MODAL_APP"
29
+ MODAL_BATCH_SIZE_ENV = "HACKATHON_MODAL_BATCH_SIZE"
30
+ DEFAULT_MODAL_APP = "iclr2026-eval"
31
+ DEFAULT_BATCH_SIZE = 64
32
+
33
+
34
+ def _is_truthy(value: str | None) -> bool:
35
+ if value is None:
36
+ return False
37
+ return value.strip().lower() in {"1", "true", "yes", "y", "on"}
38
+
39
+
40
+ def is_modal_enabled() -> bool:
41
+ return _is_truthy(os.environ.get(MODAL_ENABLE_ENV))
42
+
43
+
44
+ def _get_batch_size() -> int:
45
+ raw = os.environ.get(MODAL_BATCH_SIZE_ENV, "").strip()
46
+ if raw:
47
+ return int(raw)
48
+ return DEFAULT_BATCH_SIZE
49
+
50
+
51
+ def _get_modal_function(function_name: str) -> Any:
52
+ import modal
53
+
54
+ app_name = os.environ.get(MODAL_APP_ENV, "").strip() or DEFAULT_MODAL_APP
55
+ return modal.Function.from_name(app_name, function_name)
56
+
57
+
58
+ def _load_json_file(path: str) -> Any:
59
+ """Load a JSON or JSONL file from a local path."""
60
+ p = Path(path)
61
+ if p.suffix == ".jsonl":
62
+ lines = p.read_text().splitlines()
63
+ return [json.loads(line) for line in lines if line.strip()]
64
+ return json.loads(p.read_text())
65
+
66
+
67
+ def _load_blue_model_registry() -> list[dict[str, Any]] | None:
68
+ """Load blue model registry from env var if set, else return None.
69
+
70
+ When None is returned the backend loads its copy from the Modal volume.
71
+ """
72
+ path = os.environ.get(BLUE_MODEL_REGISTRY_ENV, "").strip()
73
+ if not path:
74
+ path = os.environ.get(MODEL_REGISTRY_ENV, "").strip()
75
+ if not path:
76
+ return None
77
+
78
+ data = _load_json_file(path)
79
+ if isinstance(data, dict):
80
+ data = data.get("models", data)
81
+ return data
82
+
83
+
84
+ def score_blue_with_pairwise(
85
+ model_names: Iterable[str],
86
+ *,
87
+ submission_id: str | None = None,
88
+ submitter: str | None = None,
89
+ ) -> tuple[float, list[dict[str, Any]]]:
90
+ """Score a blue team submission via the deployed Modal backend.
91
+
92
+ If HACKATHON_BLUE_MODEL_REGISTRY (or HACKATHON_MODEL_REGISTRY) is set,
93
+ the registry is sent to the backend. Otherwise the backend loads its
94
+ own copy from the Modal volume.
95
+
96
+ Blue heldout images are always loaded server-side (secret).
97
+ When submission_id is provided, the backend saves the result to the
98
+ Modal volume for crash recovery.
99
+ """
100
+ model_registry = _load_blue_model_registry()
101
+
102
+ fn = _get_modal_function("score_blue_submission")
103
+ result = fn.remote(
104
+ model_names=list(model_names),
105
+ model_registry=model_registry,
106
+ batch_size=_get_batch_size(),
107
+ submission_id=submission_id,
108
+ submitter=submitter,
109
+ )
110
+ avg_cka = float(result.get("avg_cka", 0.0))
111
+ return avg_cka, list(result.get("pairwise", []))
112
+
113
+
114
+ def score_red_with_pairwise(
115
+ selected_stimuli: Iterable[dict[str, str] | str],
116
+ *,
117
+ submission_id: str | None = None,
118
+ submitter: str | None = None,
119
+ ) -> tuple[float, list[dict[str, Any]]]:
120
+ """Score a red team submission via the deployed Modal backend.
121
+
122
+ The red team model registry is always loaded server-side from the
123
+ Modal volume (secret — never sent from the public Space).
124
+ When submission_id is provided, the backend saves the result to the
125
+ Modal volume for crash recovery.
126
+ """
127
+ stimuli_list: list[dict[str, str]] = []
128
+ for item in selected_stimuli:
129
+ if isinstance(item, str):
130
+ parts = item.split("::", 1)
131
+ if len(parts) == 2:
132
+ stimuli_list.append({"dataset_name": parts[0], "image_identifier": parts[1]})
133
+ else:
134
+ raise ValueError(f"Invalid stimulus key format: {item}")
135
+ else:
136
+ stimuli_list.append(dict(item))
137
+
138
+ fn = _get_modal_function("score_red_submission")
139
+ result = fn.remote(
140
+ selected_stimuli=stimuli_list,
141
+ batch_size=_get_batch_size(),
142
+ submission_id=submission_id,
143
+ submitter=submitter,
144
+ )
145
+ score = float(result.get("score", 0.0))
146
+ return score, list(result.get("pairwise", []))
147
+
148
+
149
+ def fetch_volume_submissions(team: str | None = None) -> list[dict[str, Any]]:
150
+ """Fetch submissions saved on the Modal volume.
151
+
152
+ Used to sync submissions after a Space restart.
153
+ """
154
+ fn = _get_modal_function("list_submissions")
155
+ return fn.remote(team=team)
src/hackathon/scoring.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from itertools import combinations
4
+ from typing import Iterable
5
+
6
+ import numpy as np
7
+
8
+ from src.cka.compute import linear_cka
9
+ from src.hackathon.data import get_dummy_model_embeddings, list_dummy_stimuli, resolve_stimulus_indices
10
+ from src.hackathon.modal_client import (
11
+ is_modal_enabled,
12
+ score_blue_with_pairwise as modal_score_blue_with_pairwise,
13
+ score_red_with_pairwise as modal_score_red_with_pairwise,
14
+ )
15
+
16
+
17
+ def _validate_models(model_names: Iterable[str], embeddings_by_model: dict[str, np.ndarray]) -> list[str]:
18
+ names = [name.strip() for name in model_names if name.strip()]
19
+ if len(names) < 2:
20
+ raise ValueError("Select at least two models.")
21
+ if len(names) != len(set(names)):
22
+ raise ValueError("Model selections must be unique.")
23
+
24
+ missing = [name for name in names if name not in embeddings_by_model]
25
+ if missing:
26
+ missing_str = ", ".join(missing)
27
+ raise ValueError(f"Unknown models requested: {missing_str}")
28
+
29
+ return names
30
+
31
+
32
+ def _format_score(score: float) -> float:
33
+ return round(float(score), 4)
34
+
35
+
36
+ def _pairwise_scores(
37
+ model_names: Iterable[str],
38
+ embeddings_by_model: dict[str, np.ndarray],
39
+ ) -> tuple[float, list[dict[str, float | str]]]:
40
+ scores = []
41
+ pairwise: list[dict[str, float | str]] = []
42
+ for model_a, model_b in combinations(model_names, 2):
43
+ score = linear_cka(embeddings_by_model[model_a], embeddings_by_model[model_b])
44
+ scores.append(score)
45
+ pairwise.append(
46
+ {
47
+ "Model A": model_a,
48
+ "Model B": model_b,
49
+ "CKA": _format_score(score),
50
+ }
51
+ )
52
+
53
+ if not scores:
54
+ return 0.0, []
55
+ return float(np.mean(scores)), pairwise
56
+
57
+
58
+ def score_blue_with_pairwise(
59
+ model_names: Iterable[str],
60
+ *,
61
+ embeddings_by_model: dict[str, np.ndarray] | None = None,
62
+ submission_id: str | None = None,
63
+ submitter: str | None = None,
64
+ ) -> tuple[float, list[dict[str, float | str]]]:
65
+ if embeddings_by_model is None and is_modal_enabled():
66
+ avg_cka, pairwise = modal_score_blue_with_pairwise(
67
+ model_names, submission_id=submission_id, submitter=submitter,
68
+ )
69
+ formatted = [
70
+ {"Model A": item["model_a"], "Model B": item["model_b"], "CKA": _format_score(item["cka"])}
71
+ for item in pairwise
72
+ ]
73
+ return float(avg_cka), formatted
74
+
75
+ if embeddings_by_model is None:
76
+ embeddings_by_model = get_dummy_model_embeddings()
77
+
78
+ model_names = _validate_models(model_names, embeddings_by_model)
79
+ avg_cka, pairwise = _pairwise_scores(model_names, embeddings_by_model)
80
+ return float(avg_cka), pairwise
81
+
82
+
83
+ def score_blue(
84
+ model_names: Iterable[str],
85
+ *,
86
+ embeddings_by_model: dict[str, np.ndarray] | None = None,
87
+ ) -> float:
88
+ avg_cka, _ = score_blue_with_pairwise(model_names, embeddings_by_model=embeddings_by_model)
89
+ return float(avg_cka)
90
+
91
+
92
+ def score_red_with_pairwise(
93
+ selected_stimuli: Iterable[dict[str, str] | str],
94
+ *,
95
+ embeddings_by_model: dict[str, np.ndarray] | None = None,
96
+ stimuli_catalog: Iterable[dict[str, str]] | None = None,
97
+ submission_id: str | None = None,
98
+ submitter: str | None = None,
99
+ ) -> tuple[float, list[dict[str, float | str]]]:
100
+ if embeddings_by_model is None and is_modal_enabled():
101
+ score, pairwise = modal_score_red_with_pairwise(
102
+ selected_stimuli, submission_id=submission_id, submitter=submitter,
103
+ )
104
+ formatted = [
105
+ {"Model A": item["model_a"], "Model B": item["model_b"], "CKA": _format_score(item["cka"])}
106
+ for item in pairwise
107
+ ]
108
+ return float(score), formatted
109
+
110
+ if embeddings_by_model is None:
111
+ embeddings_by_model = get_dummy_model_embeddings()
112
+ if stimuli_catalog is None:
113
+ stimuli_catalog = list_dummy_stimuli()
114
+
115
+ model_names = _validate_models(embeddings_by_model.keys(), embeddings_by_model)
116
+ stimulus_indices = resolve_stimulus_indices(selected_stimuli, stimuli_catalog)
117
+ if len(stimulus_indices) < 2:
118
+ raise ValueError("Select at least two stimuli.")
119
+
120
+ filtered = {name: embeddings_by_model[name][stimulus_indices] for name in model_names}
121
+ avg_cka, pairwise = _pairwise_scores(model_names, filtered)
122
+ return float(1.0 - avg_cka), pairwise
123
+
124
+
125
+ def score_red(
126
+ selected_stimuli: Iterable[dict[str, str] | str],
127
+ *,
128
+ embeddings_by_model: dict[str, np.ndarray] | None = None,
129
+ stimuli_catalog: Iterable[dict[str, str]] | None = None,
130
+ ) -> float:
131
+ score, _ = score_red_with_pairwise(
132
+ selected_stimuli,
133
+ embeddings_by_model=embeddings_by_model,
134
+ stimuli_catalog=stimuli_catalog,
135
+ )
136
+ return float(score)
src/hackathon/storage.py ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import os
5
+ import threading
6
+ from typing import Any, Literal
7
+
8
+ from datasets import Dataset, load_dataset
9
+
10
+ TeamName = Literal["blue", "red"]
11
+
12
+ DATA_DIR_ENV = "HACKATHON_DATA_DIR"
13
+ BLUE_PATH_ENV = "HACKATHON_BLUE_DATA_PATH"
14
+ RED_PATH_ENV = "HACKATHON_RED_DATA_PATH"
15
+ HF_DATASET_ENV = "HACKATHON_HF_DATASET"
16
+ HF_BLUE_DATASET_ENV = "HACKATHON_HF_BLUE_DATASET"
17
+ HF_RED_DATASET_ENV = "HACKATHON_HF_RED_DATASET"
18
+ HF_TOKEN_ENV = "HF_TOKEN_SUBMISSIONS"
19
+ HF_TOKEN_FALLBACK_ENV = "HF_TOKEN"
20
+
21
+ DEFAULT_DATA_DIR = os.environ.get(DATA_DIR_ENV, os.path.join(os.getcwd(), "hackathon-data"))
22
+ DEFAULT_BLUE_PATH = os.environ.get(BLUE_PATH_ENV, os.path.join(DEFAULT_DATA_DIR, "blue_submissions.json"))
23
+ DEFAULT_RED_PATH = os.environ.get(RED_PATH_ENV, os.path.join(DEFAULT_DATA_DIR, "red_submissions.json"))
24
+
25
+ _TEAM_PATHS = {
26
+ "blue": DEFAULT_BLUE_PATH,
27
+ "red": DEFAULT_RED_PATH,
28
+ }
29
+
30
+ _LOCK = threading.Lock()
31
+
32
+
33
+ def _resolve_hf_dataset(team: TeamName) -> str | None:
34
+ dataset_name = (
35
+ os.environ.get(HF_BLUE_DATASET_ENV, "").strip()
36
+ if team == "blue"
37
+ else os.environ.get(HF_RED_DATASET_ENV, "").strip()
38
+ )
39
+ if dataset_name:
40
+ return dataset_name
41
+
42
+ legacy_dataset = os.environ.get(HF_DATASET_ENV, "").strip()
43
+ if legacy_dataset:
44
+ raise ValueError(
45
+ "Set HACKATHON_HF_BLUE_DATASET and HACKATHON_HF_RED_DATASET for separate datasets. "
46
+ f"HACKATHON_HF_DATASET is no longer supported: {legacy_dataset}"
47
+ )
48
+ return None
49
+
50
+
51
+ def _require_hf_token() -> str:
52
+ token = os.environ.get(HF_TOKEN_ENV) or os.environ.get(HF_TOKEN_FALLBACK_ENV)
53
+ if not token:
54
+ raise ValueError(
55
+ "HF_TOKEN_SUBMISSIONS (or HF_TOKEN) is required to access the private submissions dataset."
56
+ )
57
+ return token
58
+
59
+
60
+ def _load_hf_submissions(dataset_name: str, token: str) -> list[dict[str, Any]]:
61
+ try:
62
+ dataset = load_dataset(dataset_name, split="train", token=token)
63
+ except Exception as exc:
64
+ message = str(exc).lower()
65
+ if any(code in message for code in ("401", "403", "permission", "unauthorized", "forbidden")):
66
+ raise ValueError(
67
+ f"HF_TOKEN_SUBMISSIONS does not have access to the private dataset: {dataset_name}"
68
+ ) from exc
69
+ if any(
70
+ text in message
71
+ for text in ("not found", "404", "doesn't exist", "no such dataset", "split")
72
+ ):
73
+ return []
74
+ raise
75
+ return dataset.to_list()
76
+
77
+
78
+ def _save_hf_submissions(dataset_name: str, token: str, submissions: list[dict]) -> None:
79
+ dataset = Dataset.from_list(submissions)
80
+ dataset.push_to_hub(dataset_name, token=token, private=True)
81
+
82
+
83
+ def _resolve_data_path(team: TeamName, data_path: str | None) -> str:
84
+ if data_path:
85
+ return data_path
86
+ if team not in _TEAM_PATHS:
87
+ raise ValueError(f"Unknown team: {team}")
88
+ return _TEAM_PATHS[team]
89
+
90
+
91
+ def load_submissions(team: TeamName, data_path: str | None = None) -> list[dict[str, Any]]:
92
+ dataset_name = _resolve_hf_dataset(team)
93
+ if dataset_name:
94
+ token = _require_hf_token()
95
+ return _load_hf_submissions(dataset_name, token)
96
+
97
+ resolved_path = _resolve_data_path(team, data_path)
98
+ if not os.path.exists(resolved_path):
99
+ return []
100
+
101
+ with _LOCK:
102
+ with open(resolved_path, "r") as f:
103
+ data = json.load(f)
104
+
105
+ if not isinstance(data, list):
106
+ raise ValueError(f"Expected a list in {resolved_path}.")
107
+
108
+ return data
109
+
110
+
111
+ def save_submissions(
112
+ team: TeamName,
113
+ submissions: list[dict[str, Any]],
114
+ data_path: str | None = None,
115
+ ) -> None:
116
+ dataset_name = _resolve_hf_dataset(team)
117
+ if dataset_name:
118
+ token = _require_hf_token()
119
+ _save_hf_submissions(dataset_name, token, submissions)
120
+ return
121
+
122
+ resolved_path = _resolve_data_path(team, data_path)
123
+ data_dir = os.path.dirname(resolved_path)
124
+ if data_dir:
125
+ os.makedirs(data_dir, exist_ok=True)
126
+
127
+ tmp_path = f"{resolved_path}.tmp"
128
+ with _LOCK:
129
+ with open(tmp_path, "w") as f:
130
+ json.dump(submissions, f, indent=2)
131
+ os.replace(tmp_path, resolved_path)
132
+
133
+
134
+ def append_submission(
135
+ team: TeamName,
136
+ submission: dict[str, Any],
137
+ data_path: str | None = None,
138
+ ) -> list[dict[str, Any]]:
139
+ dataset_name = _resolve_hf_dataset(team)
140
+ if dataset_name:
141
+ token = _require_hf_token()
142
+ with _LOCK:
143
+ submissions = _load_hf_submissions(dataset_name, token)
144
+ submissions.append(submission)
145
+ _save_hf_submissions(dataset_name, token, submissions)
146
+ return submissions
147
+
148
+ submissions = load_submissions(team, data_path)
149
+ submissions.append(submission)
150
+ save_submissions(team, submissions, data_path)
151
+ return submissions
src/hackathon/validation.py ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from pathlib import Path
5
+ from typing import Iterable
6
+
7
+ from src.hackathon.data import list_dummy_models, list_dummy_stimuli, stimulus_key
8
+
9
+ MODEL_REGISTRY_ENV = "HACKATHON_MODEL_REGISTRY"
10
+ BLUE_MODEL_REGISTRY_ENV = "HACKATHON_BLUE_MODEL_REGISTRY"
11
+ RED_MODEL_REGISTRY_ENV = "HACKATHON_RED_MODEL_REGISTRY"
12
+ STIMULI_CATALOG_ENV = "HACKATHON_STIMULI_CATALOG"
13
+ BLUE_STIMULI_CATALOG_ENV = "HACKATHON_BLUE_STIMULI_CATALOG"
14
+
15
+ BLUE_TEAM_REQUIRED_MODELS = 20
16
+
17
+
18
+ def _ensure_unique(values: list[str], label: str) -> None:
19
+ if len(values) != len(set(values)):
20
+ raise ValueError(f"{label} must be unique.")
21
+
22
+
23
+ def _load_json(path: Path) -> object:
24
+ try:
25
+ return json.loads(path.read_text())
26
+ except FileNotFoundError as exc:
27
+ raise ValueError(f"File not found: {path}") from exc
28
+ except json.JSONDecodeError as exc:
29
+ raise ValueError(f"Invalid JSON in {path}: {exc}") from exc
30
+
31
+
32
+ def _parse_registry_entries(path: str | None) -> list[dict | str]:
33
+ """Parse registry file into raw entries (strings or dicts)."""
34
+ if not path:
35
+ return []
36
+
37
+ data = _load_json(Path(path))
38
+ if isinstance(data, dict):
39
+ entries = data.get("models")
40
+ if entries is None:
41
+ raise ValueError("Model registry JSON must be a list or contain a 'models' list.")
42
+ elif isinstance(data, list):
43
+ entries = data
44
+ else:
45
+ raise ValueError("Model registry JSON must be a list or object.")
46
+
47
+ return entries
48
+
49
+
50
+ def load_model_registry(path: str | None) -> set[str]:
51
+ if not path:
52
+ return set(list_dummy_models())
53
+
54
+ entries = _parse_registry_entries(path)
55
+ names: list[str] = []
56
+ for idx, entry in enumerate(entries, start=1):
57
+ if isinstance(entry, str):
58
+ name = entry.strip()
59
+ elif isinstance(entry, dict):
60
+ name = str(entry.get("model_name", "")).strip()
61
+ else:
62
+ raise ValueError(f"Model registry entry {idx} must be a string or object.")
63
+
64
+ if not name:
65
+ raise ValueError(f"Model registry entry {idx} is missing model_name.")
66
+ names.append(name)
67
+
68
+ _ensure_unique(names, "Model registry entries")
69
+ return set(names)
70
+
71
+
72
+ def load_model_registry_specs(path: str | None) -> dict[str, dict]:
73
+ """Load full model specs keyed by model_name.
74
+
75
+ Returns a dict mapping model_name -> {"layer": ..., "embedding": ..., "preprocess": ...}.
76
+ """
77
+ if not path:
78
+ return {}
79
+
80
+ entries = _parse_registry_entries(path)
81
+ specs: dict[str, dict] = {}
82
+ for idx, entry in enumerate(entries, start=1):
83
+ if not isinstance(entry, dict):
84
+ continue
85
+ name = str(entry.get("model_name", "")).strip()
86
+ if not name:
87
+ continue
88
+ specs[name] = {
89
+ "layer": str(entry.get("layer", "")).strip(),
90
+ "embedding": str(entry.get("embedding", "flatten")).strip(),
91
+ "preprocess": entry.get("preprocess", {}),
92
+ }
93
+ return specs
94
+
95
+
96
+ def load_stimuli_catalog(path: str | None) -> list[dict[str, str]]:
97
+ if not path:
98
+ return list_dummy_stimuli()
99
+
100
+ path_obj = Path(path)
101
+ if path_obj.suffix == ".jsonl":
102
+ lines = path_obj.read_text().splitlines()
103
+ entries = [json.loads(line) for line in lines if line.strip()]
104
+ else:
105
+ data = _load_json(path_obj)
106
+ if isinstance(data, dict):
107
+ entries = data.get("stimuli")
108
+ if entries is None:
109
+ raise ValueError("Stimuli catalog JSON must be a list or contain a 'stimuli' list.")
110
+ elif isinstance(data, list):
111
+ entries = data
112
+ else:
113
+ raise ValueError("Stimuli catalog JSON must be a list or object.")
114
+
115
+ stimuli: list[dict[str, str]] = []
116
+ for idx, entry in enumerate(entries, start=1):
117
+ if not isinstance(entry, dict):
118
+ raise ValueError(f"Stimulus entry {idx} must be an object.")
119
+ dataset_name = str(entry.get("dataset_name", "")).strip()
120
+ image_identifier = str(entry.get("image_identifier", "")).strip()
121
+ if not dataset_name or not image_identifier:
122
+ raise ValueError(f"Stimulus entry {idx} must include dataset_name and image_identifier.")
123
+ stimuli.append({"dataset_name": dataset_name, "image_identifier": image_identifier})
124
+
125
+ keys = [stimulus_key(stimulus) for stimulus in stimuli]
126
+ _ensure_unique(keys, "Stimuli catalog entries")
127
+ return stimuli
128
+
129
+
130
+ def validate_blue_submission(
131
+ payload: dict,
132
+ *,
133
+ model_registry: Iterable[str] | None = None,
134
+ registry_specs: dict[str, dict] | None = None,
135
+ ) -> list[str]:
136
+ if model_registry is None:
137
+ model_registry = list_dummy_models()
138
+ registry_set = set(model_registry)
139
+
140
+ models = payload.get("models")
141
+ if not isinstance(models, list):
142
+ raise ValueError("Blue submission must include a list of models.")
143
+
144
+ names: list[str] = []
145
+ layer_mismatches: list[str] = []
146
+ missing_layers: list[str] = []
147
+ for idx, item in enumerate(models, start=1):
148
+ if isinstance(item, str):
149
+ name = item.strip()
150
+ layer_name = None
151
+ elif isinstance(item, dict):
152
+ name = str(item.get("model_name", "")).strip()
153
+ layer_name = str(item.get("layer_name", "")).strip() or None
154
+ else:
155
+ raise ValueError(f"Model entry {idx} must be a string or object with model_name.")
156
+ if not name:
157
+ raise ValueError(f"Model entry {idx} is missing model_name.")
158
+ names.append(name)
159
+
160
+ # layer_name is required when registry_specs are available
161
+ if registry_specs:
162
+ if not layer_name:
163
+ missing_layers.append(f"Model entry {idx} ({name}) is missing layer_name.")
164
+ elif name in registry_specs:
165
+ expected_layer = registry_specs[name].get("layer", "")
166
+ if layer_name != expected_layer:
167
+ layer_mismatches.append(
168
+ f"{name}: submitted layer_name '{layer_name}' "
169
+ f"does not match registry layer '{expected_layer}'"
170
+ )
171
+
172
+ _ensure_unique(names, "Model selections")
173
+
174
+ if len(names) != BLUE_TEAM_REQUIRED_MODELS:
175
+ raise ValueError(
176
+ f"Blue team submission must contain exactly {BLUE_TEAM_REQUIRED_MODELS} "
177
+ f"unique models, but got {len(names)}."
178
+ )
179
+
180
+ missing = [name for name in names if name not in registry_set]
181
+ if missing:
182
+ missing_str = ", ".join(missing)
183
+ raise ValueError(f"Unknown models requested: {missing_str}")
184
+
185
+ if missing_layers:
186
+ raise ValueError(
187
+ f"Missing layer_name for {len(missing_layers)} model(s):\n"
188
+ + "\n".join(f" - {m}" for m in missing_layers)
189
+ )
190
+
191
+ if layer_mismatches:
192
+ raise ValueError(
193
+ f"Layer name mismatch for {len(layer_mismatches)} model(s):\n"
194
+ + "\n".join(f" - {m}" for m in layer_mismatches)
195
+ )
196
+
197
+ return names
198
+
199
+
200
+ def validate_red_submission(
201
+ payload: dict,
202
+ *,
203
+ stimuli_catalog: Iterable[dict[str, str]] | None = None,
204
+ ) -> list[str]:
205
+ if stimuli_catalog is None:
206
+ stimuli_catalog = list_dummy_stimuli()
207
+
208
+ images = payload.get("differentiating_images")
209
+ if not isinstance(images, list):
210
+ raise ValueError("Red submission must include differentiating_images.")
211
+ if len(images) < 2:
212
+ raise ValueError("Select at least two stimuli.")
213
+
214
+ keys: list[str] = []
215
+ for idx, item in enumerate(images, start=1):
216
+ if not isinstance(item, dict):
217
+ raise ValueError(f"Stimulus entry {idx} must be an object.")
218
+ dataset_name = str(item.get("dataset_name", "")).strip()
219
+ image_identifier = str(item.get("image_identifier", "")).strip()
220
+ if not dataset_name or not image_identifier:
221
+ raise ValueError(f"Stimulus entry {idx} must include dataset_name and image_identifier.")
222
+ keys.append(stimulus_key({"dataset_name": dataset_name, "image_identifier": image_identifier}))
223
+
224
+ _ensure_unique(keys, "Stimulus selections")
225
+
226
+ available = {stimulus_key(stimulus) for stimulus in stimuli_catalog}
227
+ missing = [key for key in keys if key not in available]
228
+ if missing:
229
+ missing_str = ", ".join(missing)
230
+ raise ValueError(f"Unknown stimuli requested: {missing_str}")
231
+
232
+ return keys
test_submissions/blue_submission.jsonl ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ {"model_name": "resnet18", "layer_name": "fc"}
2
+ {"model_name": "resnet34", "layer_name": "fc"}
test_submissions/red_submission.jsonl ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000001.JPEG"}
2
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000002.JPEG"}
3
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000003.JPEG"}
4
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000004.JPEG"}
5
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000005.JPEG"}
6
+ {"dataset_name": "imagenet_val", "image_identifier": "ILSVRC2012_val_00000006.JPEG"}
7
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baking_sheet/01f362ca48a547c.png"}
8
+ {"dataset_name": "objectnet", "image_identifier": "objectnet-1.0/images/baking_sheet/03660225e3e0440.png"}