TorchGeo 0.10.0 Release Notes
TorchGeo 0.10 is the largest release in TorchGeo history, with a record 220 PRs from a record 29 contributors over the last 6 months. It includes full time series support, fiscal sponsorship, and security hardening, among many other exciting new features!
Highlights of this release
Full time series support
The last two years have seen a dedicated effort to add full time series support to TorchGeo. As of this release, TorchGeo contains dozens of time series benchmark datasets:
- Temporal classification: CropHarvest
- Temporal regression: Air Quality (new), Western USA Live Fuel Moisture
- Change detection: BRIGHT, CaBuAr, ChaBuD, Copernicus-Bench, LEVIR-CD, LEVIR-CD+, OSCD, xBD, xBD DistShift (new)
- Spatiotemporal classification: Copernicus-Bench, Digital Typhoon, QuakeSet
- Spatiotemporal regression: Digital Typhoon, SKIPP'D, SustainBench, QuakeSet
- Spatiotemporal segmentation: Benin Cashew Plantations, Copernicus-Bench, FLAIR-HUB (new), Kenya Crop Type, PASTIS, Rwanda Field Boundary, SeasoNet, South Africa Crop Type, Substation, ZueriCrop
- Spatiotemporal pixelwise regression: BioMassters, Copernicus-Bench
and a dozen time series models:
- 1D time series: L-TAE, Presto, Tessera
- 3D change detection: BTC, ChangeStar, ChangeViT, FC-Siamese Networks
- 3D SITS: ConvLSTM, Conv3dLSTM (new), OlmoEarth (new), Satlas
- 4D ocean and atmosphere: Aurora
We also now have temporal and spatiotemporal tasks for PyTorch Lightning integration:
- 1D: temporal regression (new)
- 3D: change detection, spatiotemporal segmentation (new), spatiotemporal pixelwise regression (new)
This release required a complete redesign of our samplers, replacing our old file-based samplers with separate spatial and temporal samplers. In particular, TorchGeo now provides several spatial sampling strategies:
and temporal sampling strategies:
Users can also take the cross-product of any two spatial and temporal samplers to support spatiotemporal sampling. For example, a training and inference pipeline for crop type mapping using Landsat and CDL might start with:
# Datasets
landsat7 = Landsat7(..., time_series=True) # B x T x C x H x W - dynamic
landsat8 = Landsat8(..., time_series=True) # B x T x C x H x W - dynamic
cdl = CDL(..., time_series=False) # B x H x W - static mosaic
dataset = (landsat7 | landsat8) & cdl
train_dataset, test_dataset = random_grid_cell_assignment(dataset, [0.6, 0.4])
# Samplers
spatial_random = RandomPatchSampler(train_dataset, size=224)
temporal_random = RandomPeriodSampler(train_dataset, freq='Y') # annual frequency
train_sampler = spatial_random @ temporal_random
spatial_sequential = GriddedPatchSampler(test_dataset, size=224, stride=112)
temporal_sequential = SequentialPeriodSampler(test_dataset, freq='Y') # annual frequency
test_sampler = spatial_sequential @ temporal_sequential
# Data loaders
train_dataloader = DataLoader(train_dataset, sampler=train_sampler)
test_dataloader = DataLoader(test_dataset, sampler=test_sampler)All GeoDatasets and GeoSamplers are compatible with full time series support. We're excited to see what new research directions our users come up with using these new flexible sampling strategies!
Fiscal sponsorship and new projects
The TorchGeo organization is now a fiscally sponsored program of Radiant Earth, a 501(c)(3) public charity. This means you can now sponsor maintenance needs, bug fixes, new features, or an annual TorchGeo workshop, and it's all tax-deductible (at least in the US)! See https://github.com/sponsors/torchgeo to make a monthly or one-time donation and help advertise your organization or gain a seat on our Technical Steering Committee.
Several new related projects joined the TorchGeo organization, including:
- TerraTorch: for GeoFM fine-tuning
- TerraKit: for dataset curation
- torchgeo-bench for GeoFM benchmarking
We also welcomed two new TSC members and one new maintainer:
- @romeokienzler (IBM) - TSC, maintainer of TerraTorch, TerraKit
- @Isabelle-Wittmann (IBM) - TSC, maintainer of TerraTorch
- @robmarkcole (EarthDaily) - maintainer of TorchGeo
Security hardening
LLMs have made keeping up with security... a fun challenge. This release includes a number of important steps to harden security across TorchGeo:
- Clarifications to our security policy (#3952)
- Datasets: checksum by default (#3930)
- Models: checksum by default (#3929)
- Convert many datasets from MD5 to SHA256 checksums (#3428, #3894, #3899, #3946)
- Always use
torch.load(weights_only=True)(#3893, #3957)
All users are recommended to update to the latest version of TorchGeo, especially if they expose its datasets or trainers to external users or like to load checkpoints from random strangers online...
Backwards-incompatible changes
Warning
This release contains a number of backwards-incompatible changes in preparation for an upcoming 1.0 release.
The torchgeo.trainers subpackage was renamed to torchgeo.tasks and the Task suffix was dropped. This puts us more inline with the naming scheme of other libraries like TerraTorch and Lightning Flash. It also removes confusion between torchgeo.trainers and lightning.pytorch.Trainer. See #996 for discussion.
Tip
To migrate, change imports like:
from torchgeo.trainers import ClassificationTaskto:
from torchgeo.tasks import ClassificationThe torchgeo.samplers subpackage underwent a complete redesign. All prior file-based samplers are now deprecated in favor of the new spatial and temporal samplers. See #3552 for discussion. Note that some samplers like RandomBatchGeoSampler and PrechippedGeoSampler do not have an exact replacement.
Tip
To migrate, change imports like:
from torchgeo.samplers import RandomGeoSampler
from torchgeo.samplers import GridGeoSamplerto:
from torchgeo.samplers import RandomPatchSampler
from torchgeo.samplers import GriddedPatchSamplerThe Sample returned by all TorchGeo datasets is now consistently of type dict[str, Tensor]. All non-Tensor return values have either been converted to a Tensor (when possible) or removed (when not). This ensures that all TorchGeo datasets are compatible with PyTorch's default collate_fn and Lightning's default transfer_batch_to_device. See #985 for discussion. In particular:
- Copernicus-Pretrain: remove JSON metadata (#3458)
- MMEarth: remove avail_bands metadata (#3464)
- SKIPP'D: remove date key (#3438)
- SkyScript: caption is now tokenized (#3788)
- VHR-10: do not return empty list of annotations for samples without objects (#3481)
In order to unify much of TorchGeo's plotting logic, a new PlottingMixin was introduced to standardize more features. In particular, all_bands and rgb_bands are now consistently a list of str band names and cmap is now compatible with matplotlib.pyplot.imshow. See #3774 for discussion.
Other minor backwards-incompatible changes include:
- ConvLSTM: remove
batch_firstparameter (#3280) - MMEarth: several helper functions are now private (#3497)
- OSCD:
alphaparameter ofplotmethod is now deprecated (#3571) - Semantic segmentation: time-series input is now deprecated (#3648)
- Type-related errors were changed from ValueError to TypeError (#3907)
Dependencies
New dependencies
- olmoearth-pretrain-minimal (#3517)
- pyogrio (#1399)
- requests (#3522)
- sphinx-github-changelog (#3425)
- tokenizers (#3788)
- tqdm (#3961)
- ty (#3334)
- types-geopandas (#3334)
- types-rasterio (#3906)
- uv-build (#3699)
Changes to existing dependencies
- geopandas: 1+ is now required (#3444)
- jsonargparse: 4.39+ is now required (#3742)
- jsonargparse: jsonnet signature is now required (#3742)
- lightly: 1.5.1+ is now required (#3521)
- lightning: 2.4+ is now required (#3444)
- myst-parser: 5.1+ is now required (#3708)
- pydata-sphinx-theme: 0.18+ is now required (#3726)
- pytest: fix support for 10+ (#3835)
- ruff: 0.16+ is now required (#3898)
- sphinx: 8+ is now required (#3726)
- torchmetrics: 1.5+ is now required (#3668)
- torchmetrics: detection extra is now required (#3563)
- webdataset: 0.2.101+ is now required (#3957)
Removed dependencies
Datasets
New datasets
- Air Quality (#3619)
- DLRSD (#3498, #3716)
- FLAIR-HUB (#3181, #3978)
- Global Mangrove Watch (#3782)
- Meta CHM (#3757)
- OpenAerialMap (#3309)
- S2-100k (#3637, #3754)
- WorldStrat (#2558)
- xBD DistShift (#3866)
Changes to existing datasets
- AgriFieldNet: fix filehandle leak (#3795)
- AgriFieldNet: add res parameter (#3795)
- ChesapeakeCVPR: don't download prior unless necessary (#3955)
- ChesapeakeCVPR: fix under-sized patches at raster edges (#3688)
- Clay Embeddings: add support for v1.5 NAIP embeddings (#3518)
- Inria Aerial Image Labeling: fix obscure regex replacement bug (#3537)
- Landsat 4/5 TM: fix default bands (#3956)
- NCCM: fix download URL (#3943)
- OSCD: improved plotting (#3571)
- PASTIS: support custom band subsets (#3647)
- PASTIS: better normalization during plotting (#3646, #3881)
- PASTIS 100: add to docs (#3641)
- Sentinel-2: extract true valid data footprint from .SAFE metadata (#2991, #3847)
- SkyScript: tokenize caption, add tokenizer parameter (#3788)
- USAVars: fix download URL (#3955)
- VHR-10: derive length dynamically instead of hard-coding (#3989)
Changes to dataset base classes
- GeoDataset: list files in VSI paths (#1399)
- IntersectionDataset: fix obscure bug when intersecting many datasets (#3722)
- PlottingMixin: add mixin to reduce duplicated plotting code (#3775, #3789, #3831)
- RasterDataset: store valid data footprint in geometries (#2903)
- RasterDataset: add ability to override nodata value (#3847)
- RasterDataset: decouple index CRS and read CRS (#3804)
- RasterDataset: support georeferences via GCPs (#3404)
- XarrayDataset: add support for upside down rasters (#3849)
Utilities
- Add a progress bar to dataset downloads (#3961)
- Add a user-agent to dataset downloads (#3732)
- Add utility to compute valid-data footprints from raster masks (#3663)
- Add utility for quantile normalization (#3451, #3652)
Data modules
New data modules
Changes to existing data modules
- Inria Aerial Image Labeling: remove time series dimension hack (#3538)
- OSCD 100: correct normalization values (#3532)
Models
New models
Changes to existing models
- BTC: derive feature channels statically to improve throughput (#3758)
- ConvLSTM: add classification head, forward_features (#3280)
- CROMA: support non-float32 dtypes (#3974)
- DOFA: support non-float32 dtypes (#3975)
- DOFA: document Sentinel-1 wavelength convention (#3942)
- L-TAE: fix backpropagation bug due to inplace operations (#3737)
- RCF: support non-float32 dtypes (#3976)
- Tessera: document correct Sentinel-2 band order (#3673)
Profilers
- I/O profiler (#3861)
Samplers
Tasks
New tasks
- MAE (#3521)
- Spatiotemporal pixelwise regression (#3086)
- Spatiotemporal segmentation (#3962)
- Temporal regression (#3668)
New mixins
Changes to existing tasks
- BYOL: fix decoupling between student and teacher networks (#3954)
- MoCo: fix support for non-default augmentations (#3935)
- SimCLR: fix support for non-default augmentations (#3935)
Transforms
Documentation
API docs
- Refactor torchgeo.tasks docs (#3749, #3805)
- Add changelog (#3425)
- Add descriptions to type aliases (#3510)
- Add link to GitHub source code (#3572)
- Fix version switcher (#3693)
- Fix broken links (#3752, #3607, #3971)
- Remove duplicate type hints (#3466)
User docs
- Add uv installation instructions (#3546, #3702, #3753)
- Contributing: document files to modify when adding new models (#3526)
- Glossary: clarify difference between 'index' and 'query' (#3829)
Related libraries
- Add AIDE (#3589)
- Add py4dgeo (#3846)
- Add rs-embed (#3627)
- DeepForest has a CLI, switched to Kornia (#3468)
- TorchGeo now has time-series support (#3980)
- TorchGeo STAC support is a WIP (#3523)
- Update metrics (#3980)
Tutorials
- Add change detection tutorial (#3222)
- Add NAIP road segmentation tutorial (#3446, #3745)
- Update earth surface water tutorial (#3377, #3480)
- Use pretrained weights in CLI tutorial (#3527)
- Convert installs from pip to uv (#3756)
Governance
- Adopt AI policy (#3632, #3830)
- Add CODEOWNERS (#3467, #3661)
- Add new maintainer (#3657)
- Update maintainer affiliation (#3501, #3604)
- Document criteria for becoming a maintainer (#3509)
- Fix typos in governance docs (#3598)
- Move images/logo directories to docs/_static (#3427)
- Add sponsorship badge (#3639, #3833)
- Add Zenodo badge (#3638)
- Add Hugging Face logo (#3726)
Testing
- Migrate CI/CD from pip to uv (#3444, #3703, #3704, #3941, #3969)
- Various improvements to static typing (#3334, #3426, #3429, #3430, #3431, #3432, #3433, #3434, #3435, #3436, #3437, #3439, #3459, #3460, #3461, #3462, #3463, #3465, #3481, #3483, #3484, #3485, #3491, #3492, #3493, #3494, #3495, #3496, #3497, #3506, #3593, #3906, #3936, #3935, #3940)
- Various improvements to code style (#3898, #3907, #3908, #3909, #3910, #3911, #3912, #3913, #3914, #3915, #3916, #3917, #3918, #3919, #3920)
- Various fixes for pre-commit (#3472, #3694, #3778)
- Increase test coverage (#3550, #3567, #3569, #3734, #3801, #3802, #3803, #3979)
- Reduce model test input sizes (#3973)
- Test models in inference mode (#3972)
- Fix filehandle leak in plots (#3800)
- Fix parallel execution race condition (#3765)
- Fix or silence warnings (#3447, #3744, #3798, #3799, #3858, #3890, #3982)
- I/O Bench: always run on the CPU (#3677)
- Skip tests for case study notebooks (#3477, #3665)
Contributors
This release is made possible thanks to the following contributors:
- @adamjstewart
- @adriantre
- @akhellad
- @ArsalaanAhmad
- @ashnair1
- @box1401
- @burakekim
- @calebrob6
- @Chessing234
- @crowmoed
- @DarthReca
- @Dinghye
- @evgeniialappo
- @f-schi
- @FrankFeng-23
- @gatienc
- @hfangcat
- @hkristen
- @isaaccorley
- @kshitijrajsharma
- @mw3iss
- @nightcityblade
- @nilsleh
- @nuglifeleoji
- @piperwolters
- @PLTNGM
- @robmarkcole
- @wolfilip
- @yichiac










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 

