Views
No views yet
docs/phase2_findings.md).full_run_110k/ main model: 110k train pairs, no regularization
checkpoints/ model.safetensors (trainable weights only) + optimizer/scheduler + meta.json
metrics/ baseline.json (Phase-1 untrained control) + aligned.json (evaluate output)
loss_curve.csv per-checkpoint training and validation loss + val recall@k
ab_regularized_110k/ regularized variant: same data with dropout + spectrum augmentation + weight decay
checkpoints/
metrics/
loss_curve.csv
precomputed_features/ cached CLIP ViT-L/14 image features + resampled 1024-bin spectra + manifest
configs/ the exact YAML configs used
docs/phase2_findings.md training setup, results, and analysis
README.md this cardraw_crossmatch/ (the ~40 GB raw image+spectrum build) is included only if exported with
--include-raw; it is regenerable from the code and configs.pooled recall@k averages over 20 random 2000-object candidate pools
(the size-independent comparison; see below). gap is final train minus val InfoNCE loss.| run | train pairs | pooled recall@1 | pooled recall@10 | val loss | train/val gap | image probe R2 |
|---|---|---|---|---|---|---|
| Phase-1 baseline (untrained) | - | ~0.0005 (chance) | ~0.005 | ~5.5 | - | 0.576 |
| trained, 20k | 16k | 0.0090 | 0.0745 | 4.81 | 2.35 | 0.659 |
| trained, 110k (main) | 110k | 0.0176 | 0.1186 | 4.17 | 1.21 | 0.663 |
| 110k + regularized | 110k | 0.0142 | 0.1056 | 4.005 | 0.20 | 0.684 |
1from common import load_config, build_model, resolve_device
2from training.checkpoint import load_checkpoint
3
4config = load_config("configs/align_cached.yaml") # from configs/ in this repo
5device = resolve_device(config)
6model = build_model(config, device)
7load_checkpoint(model, "full_run_110k/checkpoints/best", map_location=str(device))
8model.eval()configs/align_cached.yaml uses image_encoder.type: identity, i.e. it expects precomputed CLIP
features as the image input (see precomputed_features/). To run on new raw images instead, use
configs/align.yaml, which runs CLIP ViT-L/14 on the fly.git clone https://github.com/crimsonKn1ght/galaxy-image-spectrum-clip && cd galaxy-image-spectrum-clip
pip install -r requirements.txt
export HF_TOKEN=... # avoids rate-limited HATS reads
python build_crossmatch.py --config configs/crossmatch_legacy_desi.yaml # ~40 GB (n_objects: 140000)
python precompute_features.py --config configs/align.yaml --out-dir aligned/legacy_desi_clipfeat
python run_baseline.py --config configs/align_cached.yaml
python train.py --config configs/align_cached.yaml
python evaluate.py --config configs/align_cached.yaml --checkpoint checkpoints/align_cached/best
python scripts/pooled_retrieval.py --config configs/align_cached.yaml --checkpoint checkpoints/align_cached/bestoutput.n_objects for a quick trial. Full method and rationale in docs/phase2_findings.md.MultimodalUniverse/legacysurvey (images) and MultimodalUniverse/desi (spectra);
HATS versions in the UniverseTBD/multimodal-universe-hats collection. Each underlying survey carries
its own terms - check the dataset cards before redistributing data or trained weights. The code is
released under the MIT License; these artifacts are derived from the surveys above.