Tutorials#

Introduction#

This page walks through eo-data-embedding end to end: first the zero-setup CPU demo, then a source-checkout walkthrough of the embed-once, query-many pipeline. Runnable example notebooks are integrated into the notebooks section.

Getting started#

Welcome to eo-data-embedding — a toolkit that turns Sentinel-1/2 imagery into reusable vector embeddings and runs similarity search, few-shot classification and change detection over them. The quickest way to see it work needs no GPU, dataset or model:

pip install -e .
eo-data-embedding demo

This downloads a small EuroSAT sample plus a prebuilt embedding bundle and opens the Gradio similarity-search UI in your browser. Before going further on a fresh machine, confirm the pipeline with the synthetic green-light gate:

eo-data-embedding smoke

A clean (exit 0) run means the encode → store → FAISS → probe path works in your environment.

Using the software on a typical task#

The typical workflow is to embed a dataset once, then query the resulting store repeatedly. In a source checkout (git clone + pip install -e .):

# 1. Extract embeddings with frozen Clay (Phase 1; needs a GPU + Clay weights)
eo-data-embedding extract --n 2000 --out artifacts/embeddings.parquet

# 2a. Build the FAISS index and report retrieval metrics (Phase 2)
eo-data-embedding search --store artifacts/embeddings.parquet --k 10

# 2b. Few-shot linear probe with a label-efficiency sweep (Phase 3)
eo-data-embedding probe --store artifacts/embeddings.parquet --shots 5 20 50

# 2c. Bitemporal change-detection probe on OSCD (Phase 5)
eo-data-embedding change --download

Step 1 is the only heavy, GPU-bound step; steps 2a–2c are independent and run cheaply over the same stored embeddings. Each command writes a results file under artifacts/ (e.g. search_results.md, probe_results.md, change_probe_results.md). On the reference benchmark the probe reaches macro-F1 0.895 ± 0.011 at 50 labels/class and retrieval reaches mAP@10 0.774.

The snippet below illustrates the documentation’s executable-cell support:

def some_documented_func(arg_name: str) -> str:
    """
    Description about this function
    :param arg_name: Explanation about this argument
    :return: Explanation about your return value
    """
    return arg_name

some_documented_func('Foo')
'Foo'