diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ebfb56..e2110ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,51 @@ # Changelog +## 0.2.0 (2026-11-12) + +Second experimental release. It adds a foundation-model workflow, ViT and DPT conversion, +more raster blocks for standard CNN encoders, and a plain-language way in. + +- **Prithvi-EO-1.0 Sen1Floods11.** `tensor_ee.models.prithvi_sen1floods11` composes the + 100M-parameter flood model from window blocks and runs it in staged exports, as one + 224 × 224 crop or a region of whole crops, from its released trained checkpoint. It was + checked live against PyTorch on synthetic crops and on one real Sentinel-2 crop from the + held-out Bolivia event: logits within 1.41e-5, with 0 argmax disagreements. Water IoU + against that crop's hand label was 0.911, an example and not an accuracy score. A 2 × 2 + region of synthetic crops matched within 6.11e-6. Merged stages run a crop in 16 exports + instead of 33. +- **ViT-B/16 and DPT conversion.** The converter recognizes timm ViT-B/16 encoders and SMP + 0.5.0 DPT models at 224 × 224, and converts them to graphs byte-identical to hand-composed + targets. The numerical evidence is narrower than for the other models: random weights + only; offline, the full-width head and logits are within 2.06e-5 of float32 PyTorch; live + agreement covers reduced twins and individual blocks, not the full-width model. +- **Ten new blocks, 88 in all** (23 raster, 65 window). Raster: `relu6`, `hardsigmoid`, + `hardswish`, `batch_norm`, `bilinear_upsample`, `grouped_conv2d` (grouped and depthwise) + and `standardize`. Window: `class_token_attention`, `concat_rows` and + `window_depth_to_space`. Each was validated live at the settings its catalogue row lists. +- **New settings on existing blocks,** each keyword-only, validated live, with today's + default graph unchanged: stride 2 and per-crop padding for `conv3x3_window`, epsilon 1e-6 + for `layer_norm`, ×2 with aligned corners for `window_resize`, and an opt-in slice gather + for `relative_position_bias`. +- **SMP adapter.** Unet on `resnext50_32x4d` and `mobilenet_v2` encoders now builds its graph + offline through the grouped and depthwise convolution. Neither whole model has been + checked in Earth Engine. +- **A way in.** A plain-language start guide and three Colab notebooks: a quickstart with the + trained U-Net, an offline check of whether your own model is supported, and your own CNN + from checkpoint to an exported region. +- **Numerical comparisons.** The 1e-4 absolute target against float32 PyTorch applies to + block fixtures and to a model's final outputs. A model's intermediate outputs are checked + against float64 PyTorch instead. +- **For contributors.** Gate fixtures are generated from integer arithmetic, so the + graph-identity checks can be judged on Linux as well as on macOS arm64. + +`pip install tensor-ee` provides the library, the converter and the models. The notebooks, +the tools that drive the Prithvi staged runs, the demos and the tests need a checkout. + +Support and numerical evidence apply only to the documented settings, and numerical +agreement does not establish segmentation accuracy. The Prithvi checkpoint is a separate +third-party release under its own terms. The SegWater and Swin-T checkpoint files and the +full training dataset description are not yet public. + ## 0.1.0 (2026-10-21) First experimental release of TensorEE, for expressing supported PyTorch models as diff --git a/CITATION.cff b/CITATION.cff index 24c1c78..5c7b409 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,8 +8,8 @@ authors: given-names: Noel Ivan # Concept DOI: resolves to the latest archived release on Zenodo. doi: 10.5281/zenodo.23524569 -version: 0.1.0 -date-released: 2026-10-21 +version: 0.2.0 +date-released: 2026-11-12 license: MIT abstract: >- Experimental building blocks that run pretrained PyTorch models natively in @@ -17,5 +17,6 @@ abstract: >- model-serving endpoint. A restricted CNN compiler translates the SegWater ResNet18 U-Net and standard segmentation-models-pytorch Unet and UnetPlusPlus models on ResNet and VGG encoders, a converter maps supported attention models (SMP SegFormer-B0, - and SMP UPerNet with timm's Swin-T) onto the library's blocks, and a planner + SMP UPerNet with timm's Swin-T, and SMP DPT with timm's ViT-B/16) onto the library's blocks, + a hand-composed model runs the Prithvi-EO-1.0 Sen1Floods11 flood checkpoint, and a planner and runner split their graphs into staged exports. diff --git a/docs/getting-started.md b/docs/getting-started.md index c6e11f2..5c77267 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -22,7 +22,7 @@ python -m pip install tensor-ee ``` pip ends with `Successfully installed`, followed by what it installed; the distribution -is `tensor-ee` 0.1.0. Allow several minutes: most of the download is PyTorch, about 600 MB +is `tensor-ee` 0.2.0. Allow several minutes: most of the download is PyTorch, about 600 MB once installed on macOS. On Linux, pip's default PyTorch build also brings the CUDA libraries, a few gigabytes; to skip them, install the CPU-only build before installing TensorEE, as the continuous integration does: diff --git a/pyproject.toml b/pyproject.toml index 2b04270..5b9ac9e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta" [project] name = "tensor-ee" -version = "0.1.0" -description = "Experimental building blocks for running pretrained PyTorch models natively in Google Earth Engine: a restricted CNN compiler (the SegWater U-Net; standard SMP Unet and UnetPlusPlus on ResNet and VGG encoders), a converter for supported attention models (SMP SegFormer-B0; SMP UPerNet with timm's Swin-T), and a planner and runner for staged exports." +version = "0.2.0" +description = "Experimental building blocks for running pretrained PyTorch models natively in Google Earth Engine: a restricted CNN compiler (the SegWater U-Net; standard SMP Unet and UnetPlusPlus on ResNet and VGG encoders), a converter for supported attention models (SMP SegFormer-B0; SMP UPerNet with timm's Swin-T; SMP DPT with timm's ViT-B/16), a hand-composed Prithvi-EO-1.0 Sen1Floods11 model, and a planner and runner for staged exports." readme = "README.md" license = "MIT" license-files = ["LICENSE"] diff --git a/tensor_ee/__init__.py b/tensor_ee/__init__.py index 1242628..36139bd 100644 --- a/tensor_ee/__init__.py +++ b/tensor_ee/__init__.py @@ -5,7 +5,7 @@ try: __version__ = _distribution_version("tensor-ee") except _PackageNotFoundError: - __version__ = "0.1.0" # Source checkouts need no installed distribution metadata. + __version__ = "0.2.0" # Source checkouts need no installed distribution metadata. from .comparison import PixelTensor, compare_segmentation from .compatibility import CompatibilityReport, check_compatibility