Skip to content

Releases: ucam-eo/TEE

v1.2.1

07 Apr 14:11

Choose a tag to compare

v1.2.1

Label Export/Import

  • Vectorized export: pixel labels exported as polygons via d3-contour marching squares
  • Shapefile import: JSZip extraction, point grouping by name, polygon rasterization fix
  • Panel 6 delete fix: last label deletion now updates both panels

User Management

  • Email field in user enrolment (UI, API, and CLI)
  • Zulip welcome on first sign-in
  • Restored Users tab UI (lost during earlier refactoring)

User Guide

  • Complete rewrite for non-technical ecology audience
  • Screenshots, Mermaid diagrams, TOC, numbered sections, PDF version
  • Classification schemas, classifier parameters, spatial split documented

Labelling

  • Store cluster pixel_coords on promote
  • Multiple shapefile uploads with Clear button
  • EUNIS habitat classification schema

Infrastructure

  • Unified deploy-compute.sh
  • Zarr support with chunked fetching
  • 19 new validation tests

v1.2.0-beta

07 Apr 11:26

Choose a tag to compare

v1.2.0-beta Pre-release
Pre-release

Beta 1.2.0

Label Export/Import

  • Vectorized export: pixel labels are now exported as polygons (via d3-contour marching squares) instead of individual points — reduces 216K features to a handful of polygons per class
  • Shapefile import fix: uses JSZip to extract .shp/.dbf from zip (was passing raw zip bytes)
  • Import grouping: multiple points with same name are reconstituted as a single label with pixel_coords, centroid embedding, and threshold
  • Panel 6 last-delete fix: deleting the last label now correctly clears the panel 6 mirror

Labelling

  • Store cluster pixel_coords on promote for exact rebuild on show/hide
  • Clear localStorage labels when viewport is deleted
  • Fix panel 6 header hiding the auto/manual label dropdown
  • Allow multiple shapefile uploads with explicit Clear button

Evaluation

  • Create Map: GeoTIFF generation from classifier predictions
  • EUNIS terrestrial habitat classification schema (6 groups, 35 level-2, 246 level-3)
  • Zarr support with chunked fetching and coverage probing
  • Shared zarr utilities (get_zarr, probe_zarr_coverage, read_region_chunked)

Infrastructure

  • Unified deploy-compute.sh with --local flag (replaces restart.sh)
  • Port 8001 for tunnel — no Django needed for evaluation
  • Zarr-first viewport processing with NPY fallback
  • 19 new validation tests for export/import pipeline

Beta 1.1.0 — Spatial evaluation, hyperparameter sweep

06 Apr 11:44

Choose a tag to compare

What's New

Spatial train/test split

  • Draw train (blue), test (yellow), and map (green) bounding boxes on the satellite map
  • Training points sampled from train areas only; test set is fixed from test areas
  • Avoids spatial autocorrelation for more realistic accuracy estimates
  • Bounding boxes saved in config files
  • Warning when test set is too small (<100 pixels)

Hyperparameter sweep

  • Click "+" next to any classifier's parameters to add variants
  • Each variant gets its own learning curve (e.g., "MLP (v1)", "MLP (v2)")
  • Config file supports list format: "mlp": [{"hidden_layers": "64,32"}, {"hidden_layers": "256,128,64"}]
  • Variant-aware chart colors (lighter/darker shades) and labels

Performance improvements

  • Vectorized point extraction from tiles (~100x faster per tile)
  • GDF filtered by tile bbox before CRS reprojection (~40x faster)
  • Max pixel samples now controls actual sampling budget

UI improvements

  • Crosshair cursor when drawing rectangles
  • Auto-draw: selecting area type starts drawing immediately
  • Map dragging disabled while drawing (no pan/draw conflict)
  • Config file includes inline documentation of choices

Bug fixes

  • Spatial MLP IndexError: separate data pool for spatial classifiers
  • UnboundLocalError for spatial_labels on cache hit
  • Deploy script: kill -9 for reliable process termination

Deployment

# Hosted server
docker pull sk818/tee:stable
sudo ./manage.sh   # option 7

# Compute server
./scripts/deploy-compute.sh gpu-box

Beta 1.0.0 — Large-area evaluation with GPU compute

03 Apr 16:55

Choose a tag to compare

What's New

Large-area evaluation

  • Evaluate classifiers on country-scale shapefiles (tested on Austria: 42K features, 40 tiles)
  • GeoTessera point sampling for pixel classifiers (k-NN, RF, XGBoost, MLP)
  • Real tile-aligned 256×256 patches for U-Net and spatial MLP
  • Configurable sampling strategies: equal, sqrt-proportional, proportional to area

Remote GPU compute

  • tee-compute server for offloading ML to GPU boxes via SSH tunnel
  • Deploy script for easy server management
  • OpenBLAS fix for servers with >128 CPU cores
  • Server-side cancellation (cancel button stops backend computation)

U-Net improvements

  • Pixel-aligned patches from real GeoTessera tiles (not point grids)
  • 16× augmentation (4 rotations × 2 flips × 2 noise levels)
  • GPU support via PyTorch with CUDA

UI improvements

  • Unified learning curve x-axis: % of labelled pixels used for training (log scale)
  • Scrolling progress log in validation panel
  • Status button showing backend + compute hostnames
  • Per-class polygon counts from full shapefile (not truncated GeoJSON)
  • Sampling strategy dropdown (equal / sqrt-proportional / proportional)
  • Max pixel samples and max patches controls

Data & caching

  • Disk result cache: instant re-runs with same shapefile/field/year
  • Single tile pass: point samples and patches extracted from same tiles
  • Estimated total labelled pixels from polygon areas at upload

Example data

  • austria.zip included — Austrian INVEKOS crop field data (42,789 polygons, 17 crop classes)

Deployment

# Hosted server (tee.cl.cam.ac.uk)
docker pull sk818/tee:stable
sudo ./manage.sh  # option 5

# GPU compute server
pip install -e packages/tessera-eval[server]
tee-compute --port 5050

See the User Guide for full setup instructions.

Alpha 3.7.0

20 Mar 11:53

Choose a tag to compare

What's New

Label Sharing

  • Private mode: share embedding+label pairs with the Tessera team (no locations)
  • Public mode: share geolocated labels as ESRI Shapefile for other users to import
  • Import button shows available shared labels with badge counter

New Built-in Schema

  • HOTW (Habitats of the World) added alongside UKHab

Architecture Cleanup

  • Removed GeoTIFF tile codepath — PNG-only pyramids
  • Removed legacy label system (~600 lines of dead code)
  • Removed Stage 2 satellite pipeline
  • Renamed maps.heatmapmaps.panel5, HEATMAP_LAYER_RULESPANEL5_LAYER_RULES
  • Enforced embeddings (uint8) vs vectors (float32) naming convention
  • Simplified progress system to single source of truth
  • Upgraded shp-write to v0.4.3

Bug Fixes

  • Polygon drawing: fixed cross-module bare calls, latlng unwrapping, completion dblclick
  • Map sync: fixed missed panel5 renames in sync arrays
  • Viewport re-creation: thorough cleanup of stale files, race conditions
  • IndexedDB cache migration for .embeddings → .values rename
  • Shapefile upload: read all .shp files in ZIP (points + polygons)
  • OSM attribution compliance
  • Safari fixes: Float32Array JSON serialization, shp-write MIME type

Documentation

  • Comprehensive docs: architecture, frontend API, backend API, extension guide
  • Schema file format documentation with examples
  • Known technical debt documented (dual label systems, double quantization)

Viewport Creation

  • Removed blocking GeoTessera registry check (was 28s delay)
  • Granular progress: shows GeoTessera init time, download MB/speed
  • GeoTessera availability check deferred to pipeline

Other

  • Smaller polygon vertex markers (1/4 size)
  • Panel titles: "Create labelled points", "Classification results"
  • tile_health auto-discovers year directories

v3.5.0 — Django Auth Migration

17 Mar 10:36

Choose a tag to compare

What's changed

Replaces the custom /data/passwd + bcrypt authentication with Django's built-in contrib.auth backed by SQLite, following Anil Madhavapeddy's security review.

Highlights

  • Django admin UI at /admin/ for managing users and quotas
  • Automatic passwd migration — existing /data/passwd files are imported on first container boot (no manual steps)
  • Management commands: tee_adduser, tee_removeuser, tee_listusers, tee_setquota, migrate_passwd
  • PBKDF2 password hashing (default) with BCrypt support for migrated hashes
  • Session fixation protection via session.cycle_key() on login
  • No frontend changes — API response shapes are identical

Upgrade

On the host VM:

sudo ./manage.sh   # option 5 (Update container)

The container auto-runs migrate, collectstatic, and migrate_passwd --auto on startup.

Improved error messages

  • process_viewport.py now shows friendlier retry/failure messages

v3.4.0

16 Mar 17:42

Choose a tag to compare

v3.4.0

Manual Labelling Mode

  • Pin labels — Ctrl+click (or double-click) to place point labels with embedding capture
  • Polygon labels — Ctrl+double-click to draw polygon boundaries, rasterized at 10m resolution
  • Per-class similarity sliders — expand label coverage by adjusting embedding distance thresholds
  • Classification — click Classify for full-viewport nearest-centroid classification in Panel 5
  • Panel 4 integration — manual label classes colored in PCA/UMAP scatter plot
  • Timeline — track label coverage across years with clock icon
  • Schema support — UKHab v2 or custom JSON/CSV for standardized class names

Auto-label Improvements

  • Rename promoted labels with pencil icon
  • Eye icon replaces Hide/Show text, clock icon replaces Timeline text
  • Fix: promoted cluster pixels no longer inflate after viewport switch

Validation

  • Export Results and Download Models buttons moved to top header bar
  • Spatial MLP (3×3 and 5×5) and U-Net (GPU) classifiers added

User Guide

  • Comprehensive rewrite: documents all 4 viewer modes (Explore, Change Detection, Labelling, Validation) with per-panel descriptions
  • Manual labelling guide: pins, polygons, thresholds, classification, Panel 4 coloring
  • Export docs split for header vs manual label exports (JSON, GeoJSON, ESRI Shapefile ZIP)

Bug Fixes

  • Fix Panel 4 colors disappearing on viewport return
  • Restore threshold-gated classification (prevents marking all pixels)
  • Set-active icon moved to leftmost position in label rows

v3.3.0 — Labelling UX improvements

16 Mar 16:05

Choose a tag to compare

What's new

  • Polygon drawing fix — vertex clicks no longer create spurious point rows in the labels list
  • Smooth similarity slider — debounced with requestAnimationFrame; no DOM rebuild mid-drag
  • Label row layout — pixel count moved to right of slider; unified layout for polygon and point rows
  • Scrollbar fix — labels list scrollbar no longer overlaps the delete button
  • Toolbar cleanup — removed redundant "View Labels" and "Save as Label" buttons
  • Satellite acquisition date — ESRI imagery date shown in Panel 2 header

v3.2.0

13 Mar 17:15

Choose a tag to compare

What's New

U-Net Classifier

  • U-Net (GPU) classifier operating on the full 2D embedding grid (1, 128, H, W) via PyTorch
  • Supports CUDA, MPS (Apple Silicon), and CPU
  • Configurable epochs, learning rate, depth, and base filters
  • 1 repeat per training size (vs 5 for sklearn classifiers)
  • Trained models download as .pt files
  • Greyed out in deployed mode (separate tile server)
  • PyTorch imported lazily — not bundled in Docker image

Spatial MLP Improvements

  • 4× flip augmentation for Spatial MLP (3×3) and (5×5) — horizontal, vertical, and both flips are label-preserving for land cover patches

Other

  • TEE mosaic logo added to README
  • Graceful handling of non-JSON server errors in the client

Full changelog: v3.1.0...v3.2.0

v3.1.0

13 Mar 10:40

Choose a tag to compare

What's New

Validation & Evaluation

  • Spatial MLP (3×3) classifier with cancel button and sorted class table
  • Spatial MLP (5×5) classifier with memory-efficient spatial feature gathering
  • Streaming learning curves via NDJSON with per-classifier early finish
  • Confusion matrix panel with metric toggle and CSV export
  • Trained model download after validation runs
  • Tunable hyperparameters for all classifiers

UI & UX

  • Suggested labelling workflow in user guide
  • Research disclaimer and acceptance checkbox on login
  • Fixed mode-dependent panel visibility across all four viewer modes
  • Fixed UMAP recomputing on every dropdown selection
  • Fixed similarity search pins not clearing on subsequent double-clicks
  • Fixed View Labels button not showing panel
  • Removed 2017 from year selection (poor part-year Sentinel data)

Stability

  • Restored fetch timeout and improved evaluation error messages

Full changelog: v3.0.0...v3.1.0