TorchGeo 0.9.0 Release Notes
TorchGeo 0.9 includes 13 new datasets and a number of improvements required for better time series support, encompassing 3 months of hard work by 15 contributors from around the world. We are now trying to make more frequent releases to get exciting new features out to users as quickly as possible!
Highlights of this release
Embeddings datasets
TorchGeo was the first library to provide pre-trained geospatial foundation models, and offers more GeoFMs than all other GeoML libraries combined [1]. Users have always had the ability to generate their own embeddings using TorchGeo. However, using FMs requires considerable expertise and compute, preventing widespread adoption.
Several prominent papers have introduced the idea of Earth Embeddings, pre-computed embeddings made from satellite imagery mosaics or annual time series data at regional to global scale. As part of a larger review of Earth Embeddings [2], we have added all known patch-based and pixel-based embedding products to TorchGeo!
| Dataset | Kind | Spatial Extent | Spatial Resolution | Temporal Extent | Temporal Resolution | Dimensions | Dtype | License |
|---|---|---|---|---|---|---|---|---|
| Clay Embeddings | Patch | Global* | 5.12 km | 2018–2023* | Snapshot | 768 | float32 | ODC-By-1.0 |
| Major TOM Embeddings | Patch | Global | 2.14–3.56 km | 2015–2024* | Snapshot | 2048 | float32 | CC-BY-SA-4.0 |
| Earth Index Embeddings | Patch | Global | 320 m | 2024 | Snapshot | 384 | float32 | CC-BY-4.0 |
| Copernicus-Embed | Patch | Global | 0.25° | 2021 | Annual | 768 | float32 | CC-BY-4.0 |
| LGND Clay Embeddings | Patch | Global | 256 m | 2024–2025 | Snapshot | 1024 | float32 | CC-BY-4.0 |
| EarthEmbeddings | Patch | Global* | 2.24–3.84 km | 2015–2024* | Snapshot | 256–1152 | float16, float32 | CC-BY-SA-4.0 |
| Presto Embeddings | Pixel | Togo | 10 m | 2019–2020 | Annual | 128 | uint16 | CC-BY-4.0 |
| Tessera Embeddings | Pixel | Global | 10 m | 2017–2025* | Annual | 128 | int8 → float32 | CC0-1.0 |
| Google Satellite Embedding | Pixel | Global | 10 m | 2017–2025 | Annual | 64 | int8 → float64 | CC-BY-4.0 |
| Embedded Seamless Data | Pixel | Global | 30 m | 2000–2024 | Annual | 12 | uint16 → float32 | CC-BY-4.0 |
Most of the FMs and pre-training datasets used to generate these embeddings can also be found in TorchGeo, offering complete reproducibility. Expect more experiments comparing the performance of different embedding products from us in the coming months, and check out our review!
Time series datasets and models
As part of our ongoing time series rewrite, this release adds time series support for RasterDataset and several new time series models!
All raster datasets can now be configured to either merge all images into a single mosaic or stack all images into a time series:
Landsat9(..., time_series=False) # merge: [C, H, W]
Landsat9(..., time_series=True) # stack: [T, C, H, W]
CDL(..., time_series=False) # merge: [H, W]
CDL(..., time_series=True) # stack: [T, H, W]TorchGeo now offers several time series models:
1D time series ($$B \times T \times C$$)
3D change detection ($$B \times 2 \times C \times H \times W$$)
3D image time series ($$B \times T \times C \times H \times W$$)
4D ocean and atmosphere ($$B \times T \times C \times Z \times Y \times X$$)
Most time series datasets now consistently return data in $$T \times C \times H \times W$$ format. Expect more changes to our samplers and trainers in future releases as we strive for 100% time series support!
Backwards-incompatible changes
Warning
TorchGeo 0.9, like 0.8, has a number of backwards-incompatible changes required for a more stable 1.0 release in the future. Below we motivate each change and describe how to migrate any existing code.
GeoDataset: return Tensor outputs when possible
Prior versions of GeoDataset directly returned CRS and query bounding boxes in each sample dictionary. These were designed to support stitching together individual model predictions over space. However, these non-Tensor values could not be transferred to the GPU, requiring custom collation functions and deletion during training.
The 'crs' key has now been removed, and can be retrieved from the dataset. The 'bounds' key has been converted to a Tensor. A new 'transform' key can more directly be used for stitching predictions.
Tip
Instead of:
sample = dataset[...]
crs = sample['crs']use:
crs = dataset.crsPoint datasets (EDDMapS, GBIF, iNaturalist) now use the 'keypoints' key instead of returning the entire index. This enables support for Kornia transforms on these objects.
Tip
Instead of:
keypoints = sample['bounds'].get_coordinates()use:
keypoints = sample['keypoints']There are still several places where sample dictionaries can contain lists or strings. Expect these to be removed or replaced with Tensors in future releases.
Models: avoid downloading by default
Several model architectures and trainers were downloading ImageNet weights by default. This surprised users who didn't expect any downloads and resulted in frequent CI failures. In TorchGeo 0.9, no datasets or models will download anything by default. Model weights will only be downloaded by explicit request.
Tip
To restore the previous behavior, replace:
# Downloads weights unexpectedly
model = ChangeStar()
model = EarthLoc()
model = FarSeg()
model = unet(weights=None)
# Downloads weights with no control over which weights
task = InstanceSegmentationTask(weights=True)
task = ObjectDetectionTask(weights=True)with:
model = ChangeStar(backbone_weights=WeightsEnum)
model = EarthLoc(pretrained=True)
model = FarSeg(backbone_weights=WeightsEnum)
model = unet(weights=WeightsEnum)
task = InstanceSegmentationTask(weights=WeightsEnum)
task = ObjectDetectionTask(weights=WeightsEnum)This is now enforced in CI by preventing all downloads during testing.
Other
- xView2 was renamed to xBD (#3132)
- SemanticSegmentationTask.predict_step now returns a dictionary (#3357)
- SeasoNet and Substation now return $$T \times C \times H \times W$$ time series by default (#3369, #3371)
- The dataset download backend was changed, and Google Drive datasets may no longer download correctly. Most datasets have been moved to Hugging Face, some remain and require manual download (#3338)
Dependencies
New dependencies
- pytest-socket (#3343)
Changes to existing dependencies
- Python: 3.12+ is now required (#3201)
- geopandas: 0.13+ is now required (#3139)
- h5py: 3.10+ is now required (#3201)
- jsonargparse: 4.35+ is now required (#3201)
- matplotlib: 3.7.3+ is now required (#3201)
- netcdf4: 1.6.5+ is now required (#3201)
- numpy: 1.26+ is now required (#3201)
- packaging: 21+ is now required (#3201)
- pandas: 2.1.1+ is now required (#3201)
- pandas-stubs: 2.1.1+ is now required (#3201)
- pillow: 10+ is now required (#3201)
- pycocotools: 2.0.8+ is now required (#3201)
- pyproj: 3.6.1+ is now required (#3201)
- pytest: 7.3.2+ is now required (#3201)
- requests: 2.25+ is now required (#3201)
- scikit-image: 0.22+ is now required (#3201)
- scipy: 1.11.2+ is now required (#3201)
- shapely: 2.0.2+ is now required (#3201)
- torch: 2.2+ is now required (#3201)
- torchvision: 0.17+ is now required (#3201)
- types-requests: 2.25+ is now required (#3201)
- types-shapely: 2.0.2+ is now required (#3201)
- typing-extensions: 4.8+ is now required (#3201)
Datasets
New datasets
- Clay Embeddings (#3293, #3358)
- Copernicus-Embed: pictured above (#3252)
- Earth Embeddings (#3391)
- Earth Index Embeddings (#3282)
- Embedded Seamless Data (ESD) (#3403)
- Google Satellite Embedding (AlphaEarth Foundations) (#3244)
- Major TOM Embeddings (#3295)
- OSCD100 (#3221, #3411)
- PASTIS100 (#3265)
- Presto Embeddings (#3288)
- Tessera Embeddings (#3245, #3310)
Changes to existing datasets
- BigEarthNetV2: fix downloaded filename (#3363)
- Cloud Cover Detection: don't rename downloaded directories (#3158)
- LEVIR-CD: download from Hugging Face (#3351)
- NLCD: add 2024 data (#3189)
- Point datasets: return keypoints (#3139)
- SeasoNet: $$SC \times H \times W \rightarrow T \times C \times H \times W$$ (#3371)
- SSL4EO-S12: correct docs on # channels for TOA vs. SR (#3379)
- Substation: return time series by default, plotting fix (#3369)
- SustainBench Crop Yield: download from Hugging Face (#3337)
- xBD: rename xView2 dataset (#3132)
- Fix plot docstring reference to getitem (#3353)
Changes to dataset base classes
- Dataset: use index consistently (#3264)
- Dataset: return Sample = dict[str, Any] (#3200)
- GeoDataset: remove 'crs', convert 'bounds' (#3138, #3350)
- GeoDataset: return spatial 'transform' (#3140)
- RasterDataset: add time series support (#3183)
- RasterDataset: refactor open/reproject to single method (#3014)
- XarrayDataset: document that this is an experimental feature (#3362)
Utilities
- download_and_extract_archive: replace torchvision utility (#3339)
- download_url: replace torchvision utility, remove support for Google Drive downloads (#3338)
- check_integrity: replace torchvision utility, add support for cryptographically secure checksum algorithms (#3302)
- extract_archive: replace torchvision utility, enforce stricter tarball checks (#3307)
Data Modules
New data modules
Changes to existing data modules
- xBD: rename xView2 data module (#3132)
Changes to data module base classes
- GeoDataModule: don't delete 'crs' and 'bounds' from sample (#3138)
Models
New model architectures
New model weights
- Tile2Vec (#3230)
- U-Net: add ChesapeakeRSC road segmentation weights (#3407)
- U-Net: add PRUE FTW weights (#3406)
Changes to existing models
- ChangeStar: replace backbone_pretrained bool with backbone_weights enum (#3348)
- EarthLoc: pretrained model now defaults to False (#3341)
- FarSeg: replace backbone_pretrained bool with backbone_weights enum (#3348)
- U-Net: don't download weights unless requested (#3344)
Trainers
- ClassificationMixin: unify features of classification trainers, add class-wise metrics (#3328)
- ChangeDetectionTask: add labels parameter (#3328)
- ChangeDetectionTask: add precision and recall metrics (#3328)
- ClassificationTask: add labels, pos_weight, ignore_index parameters (#3328)
- ClassificationTask: add dice loss support (#3328)
- ClassificationTask: add precision and recall metrics (#3328)
- InstanceSegmentationTask: weights bool to enum (#3349)
- InstanceSegmentationTask: add weights_backbone parameter (#3349)
- ObjectDetectionTask: weights bool to enum (#3352)
- SemanticSegmentationTask: add labels and pos_weight parameters (#3328)
- SemanticSegmentationTask: add dice loss support (#3328)
- SemanticSegmentationTask: add precision, recall, and F1-score metrics (#3328)
- SemanticSegmentationTask: predict_step now returns dict (#3357)
Documentation
- Fix broken or redirected links (#3345, #3381, #3413)
- Move images/logo to subdirectory (#3365)
- API: redesign and reorganize dataset docs (#3385, #3395, #3409)
- API: reorganize model architectures (#3324)
- Tutorials: document more TorchGeo slicing options (#3374)
- User: update related libraries (#3412)
- Version bump (#3129, #3329, #3420)
Tests
- agents: help Copilot and friends better review PRs (#3306, #3336, #3355)
- pytest: ensure no downloads occur during testing (#3341, #3343, #3344, #3348, #3349, #3352, #3405)
- pytest: don't verify checksum of fake files (#3367)
- pytest: document purpose of data module tests (#3354)
- ty: various type hint fixes (#3303, #3304, #3335, #3386, #3387, #3388, #3390, #3392, #3393, #3394, #3396, #3397, #3398, #3399, #3400, #3401)
- uv: replace pip with uv in CI (#3318)
Contributors
This release is made possible thanks to the following contributors:








Período: 31/08 a 01/10/2026
Horário: das 19h às 22h
Carga horária: 48 horas – 16 aulas
As duas primeiras aulas serão gravadas. A partir de 02/09, os encontros serão online e ao vivo.
















Historic map of Belém used in the QGIS 4.2 splash screen. Source:
MobiML architecture overview. Photo by Michael Szell. Source:
Imagen de la plataforma ciudadana Observadores del Mar
Event/occurrence model (Fuente: Biodiversity Information Standards (TDWG), licensed under a 







