Introduction#
eo-data-embedding is not a classical L0/L1/L2 instrument processor; its data-processing model
is a batch-then-serve embedding pipeline: a one-time, GPU-oriented encode pass turns Sentinel-1/2
imagery into vector embeddings that are persisted once, after which every downstream capability
(similarity search, few-shot probe, bitemporal change detection) operates cheaply over the stored
embeddings.
Processing chain#
flowchart LR
tile["tile<br/>(C,256,256)"] --> embed["embed<br/>frozen Clay v1.5 ViT<br/>(N,1024)"]
embed --> store["store<br/>Parquet"]
store --> search["search<br/>FAISS cosine"]
store --> probe["probe<br/>few-shot vs CNN"]
store --> change["change<br/>Δembedding, bitemporal"]
classDef core fill:#e8f5e9,stroke:#2e7d32,color:#11270f;
classDef out fill:#fff3e0,stroke:#ef6c00,color:#3a2400;
class tile,embed,store core;
class search,probe,change out;
Processing chain — a one-time encode pass, then a fan-out to three consumers over the stored embeddings.#
Tile — raw scene
(C,H,W)(S2 reflectance / S1 backscatter) split into fixed(C,256,256)tiles (change.tile_image); EuroSAT arrives pre-tiled.Embed —
encodenormalizes per verified band stats and runs the frozen encoder undertorch.no_grad()→ class-token(N,1024)(or per-patch tokens for spatial change maps).Store — one Parquet row per tile (
id, modality, vector[, label]); reloaded viaload_embeddings+stack_vectorsinto the dense(N,1024)matrix.Fan-out — the stored matrix feeds three independent consumers: search (FAISS
IndexFlatIP, cosine), probe (few-shotLogisticRegressionvs a ResNet-18 baseline), change (zero-training delta-embedding distance + supervised probe, held-out threshold).
Detailed per-module algorithms, parameters and equations are in the Software Design Document and the Interface Control Document; this DPM captures the top-down decomposition and processing flow.