|
Download README.md from dcher95/phenofield-e98: direct link, hf CLI and curl.
- Browser
- Download file 2.49 kB
-
https://huggingface.co/dcher95/phenofield-e98/resolve/main/README.md
- Command line
-
hf download hf://dcher95/phenofield-e98/README.md
-
curl -L -H "Authorization: Bearer $HF_TOKEN" -o README.md https://huggingface.co/dcher95/phenofield-e98/resolve/main/README.md
2.49 kB
metadata
license: other
tags:
- phenology
- ecology
- species-distribution
PhenoField e98 (e98_large_specdrop_dyn4l)
Frozen phenology field encoder (CrossModalVAE, AdaLN-DiT dynamic branch, species dropout).
Image-free interface: forward_field(species_id, prism_window, alphaearth_emb) →
(z_static [576], z_dynamic [192]). The dynamic encoder consumes only the 365×7 trailing PRISM
window and the 64-d AlphaEarth embedding (no doy / lat-lon / climplicit weights exist in this
checkpoint) — season enters through the PRISM window alone.
Files
| file | what |
|---|---|
last.ckpt |
Lightning checkpoint (weights + full training config in hyper_parameters) |
hparams.yaml |
same config, human-readable |
models/*.py |
the exact model code (CrossModalVAE, AdaLNDynamicEncoder) — self-contained, relative imports only |
species_embeddings_v2.pt |
BioCLIP text matrix [6825, 768]; the constructor loads it via config['species_embedding_path'] |
species_vocab.json |
species name → id (indexes rows of the embedding matrix) |
inputs/prism_weekly.npz |
climatological per-(cell, week) 365×7 PRISM windows for the CONUS 0.5° grid |
inputs/alphaearth_2017.parquet |
per-point AlphaEarth 64-d embeddings (nearest-cell lookup) |
inputs/grid_centroids_0.5deg.csv, inputs/plant_flowering_events.parquet |
grid definition + plant flowering observations |
Loading
import sys, torch
from huggingface_hub import snapshot_download
from omegaconf import OmegaConf
d = snapshot_download('dcher95/phenofield-e98')
sys.path.insert(0, d)
from models.cross_modal_vae import CrossModalVAE
ckpt = torch.load(f'{d}/last.ckpt', map_location='cpu', weights_only=False)
cfg = OmegaConf.to_container(OmegaConf.create(ckpt['hyper_parameters']).model, resolve=True)
cfg['species_embedding_path'] = f'{d}/species_embeddings_v2.pt'
model = CrossModalVAE(cfg)
state = {k[len('model.'):]: v for k, v in ckpt['state_dict'].items() if k.startswith('model.')}
missing, unexpected = model.load_state_dict(state, strict=False)
assert not missing and not unexpected # this models/ copy loads clean
model.eval()
Do not load this checkpoint with the models/ in dcher95/PhenoField's top level — that class
silently drops dynamic_encoder.null_species_emb (the parameter species dropout trains).
Use the models/ shipped here (a copy of vendor/bwei_ppe).
Downstream pipeline: pipelines/ in the ANTHEIA repo (Summer-2026-CfE project).