| --- |
| license: apache-2.0 |
| tags: |
| - location-encoder |
| - geospatial |
| - remote-sensing |
| - siren |
| - implicit-neural-representation |
| library_name: pytorch |
| --- |
| |
| # HydroLoc |
|
|
| A **ReSIREN location encoder** that maps a geographic coordinate `(lat, lon)` to a 512-d |
| embedding. It is a MIND-style model (residual [SIREN](https://arxiv.org/abs/2006.09661) trunk |
| over an Equal-Earth projection of the coordinate) trained by **distilling two frozen image |
| foundation models** evaluated over ~106k global Sentinel-2 water patches from the |
| [Hydro dataset](https://huggingface.co/datasets/isaaccorley/hydro): |
|
|
| - **DINOv3 ViT-L/16** (`vit_large_patch16_dinov3`, timm) on the RGB quicklooks β 1024-d |
| - **OlmoEarth v1.2 Base** on the 12-band multispectral tiles β 768-d |
|
|
| The trunk is supervised with a **Matryoshka** objective (nested prefixes 64/128/256/512), |
| so any leading slice `embedding[:, :m]` is itself a usable, compact location embedding β the |
| signal is front-loaded into the earliest dimensions. |
|
|
| ## Usage |
|
|
| ```python |
| import torch |
| from hydroloc import HydroLoc |
| |
| model = HydroLoc.from_pretrained("isaaccorley/hydroloc").eval() |
| |
| latlon = torch.tensor([[37.77, -122.42], # (lat, lon) in degrees |
| [-8.70, 45.00]]) |
| with torch.no_grad(): |
| emb = model(latlon) # [2, 512] |
| emb64 = emb[:, :64] # compact 64-d Matryoshka prefix |
| ``` |
|
|
| `hydroloc.py` is self-contained and depends only on `torch` (plus `huggingface_hub` and |
| `safetensors` for `from_pretrained`). |
|
|
| ## Coordinate convention |
|
|
| Input is `(..., 2)` with **column 0 = latitude, column 1 = longitude**, in degrees. Internally |
| the coordinate is mapped through the Equal-Earth projection before the SIREN trunk. |
|
|
| ## Files |
|
|
| - `hydroloc.py` β standalone model definition + loader |
| - `model.safetensors` β trunk weights |
| - `config.json` β architecture config |
|
|
| ## Architecture |
|
|
| | | | |
| |---|---| |
| | Trunk | residual SIREN, `embed_dim=512`, `depth=4`, `w0_first=30` | |
| | Input | Equal-Earth-projected `(lat, lon)` | |
| | Output | 512-d embedding; Matryoshka prefixes `[64, 128, 256, 512]` | |
| | Objective | cosine + MSE distillation of L2-normalized teacher embeddings | |
| | Teachers | DINOv3 ViT-L/16 (RGB), OlmoEarth v1.2 Base (multispectral) | |
|
|
| The per-teacher distillation heads are training-only and not included; the released artifact is |
| the coordinate β embedding trunk. |
|
|
| ## Notes |
|
|
| - Trained on water locations, so embeddings are most meaningful over oceans/coasts/inland water. |
| - The embedding is spatially smooth (nearby coordinates β similar embeddings) and, under PCA, |
| recovers global coastline structure. |
|
|