Team Ai
Datasetpublic

taylor-geospatial/ftw-planet

Note: Due to licensing restrictions, the imagery has been removed from the dataset. However the original PlanetScope item IDs and timestamps are made available in index.parquet. Please see the source code for how to download the dataset. Fields of the Planet (FTP) Paired PlanetScope SR scenes, two seasonal windows per patch (planting and harvest), co-registered with Fields of The World field-boundary labels, across 24 countries and 25 labeled regions. 66,584 patches across 24… See the full description on the dataset page: https://huggingface.co/datasets/taylor-geospatial/ftw-planet.

sourceHugging Facecc-by-nc-4.0updated 10d agoView on Hugging Face
1likes95downloads
Dataset Card
Note: Due to licensing restrictions, the imagery has been removed from the dataset. However the original PlanetScope item IDs and timestamps are made available in index.parquet. Please see the source code for how to download the dataset.

Fields of the Planet (FTP)

Paired PlanetScope SR scenes, two seasonal windows per patch (planting and harvest), co-registered with Fields of The World field-boundary labels, across 24 countries and 25 labeled regions.

  • —66,584 patches across 24 countries and 25 labeled regions, drawn from 70,484 labeled FTW patches
  • —52,235 patches with both windows passing UDM2 usability (usable_pair = True)
  • —Imagery: PlanetScope ortho_analytic_4b_sr, 4 bands (B/G/R/NIR), 3 m GSD, native UTM, uint16 (reflectance = DN / 10000)
  • —Labels: 3 classes — 0 background, 1 field interior, 2 field boundary; uint8 with NBITS=2; boundaries rasterized with all_touched=True to match the FTW originals.

Results

Polygon-level results macro-averaged over the ten dense-label held-out countries dominated by smallholder fields (paper Table 1).

MethodSensorBackbonePQSQRQ@.5F1[.5:.95]\ΔN\/N ↓Bd. err mean (m) ↓Bd. err p95 (m) ↓Pixel IoU †PQ small ‡PQ med ‡PQ large ‡
DelineateAnything *PlanetScopeYOLO11x9.573.312.77.00.7513.737.851.11.77.116.3
DelineateAnything-S *PlanetScopeYOLO11n3.570.84.82.50.8213.234.240.70.82.86.7
DelineateAnything v2 *PlanetScopeYOLO11x7.575.010.05.60.829.425.527.14.411.414.8
FTW-PRUE+Sentinel-2EfficientNet-B321.071.428.914.60.3318.654.761.85.825.333.8
FTW-PRUE+Sentinel-2EfficientNet-B724.271.032.817.20.3514.443.463.67.528.437.7
FTP-PRUE+PlanetScopeEfficientNet-B335.575.746.227.10.337.422.868.815.739.252.0
FTP-PRUE+PlanetScopeEfficientNet-B735.474.446.127.00.307.422.874.215.640.650.9

Bold marks the best value per column. \* Released models evaluated without training on FTW or FTP, each at its best swept inference resolution and confidence setting. † Pixel IoU is not comparable across sensors due to differences in resolution. ‡ PQ for small (<0.5 ha), medium (0.5-2 ha), and large (>2 ha) ground-truth fields.

Layout

ftw-planet/
├── README.md
├── assets/                 # figures used in this card
├── index.parquet           # GeoParquet 1.1, one row per patch
└── dataset/
    ├── austria.tar
    ├── ...
    └── vietnam.tar         # 25 region shards, ~96 GiB total

Each tar is a WebDataset shard with five files per patch_id:

<pid>.window_a.tif        PlanetScope SR, planting window
<pid>.window_b.tif        PlanetScope SR, harvest window
<pid>.label.tif           3-class label
<pid>.polygons.parquet    true FTW field polygons, clipped to the patch
<pid>.json                metadata (mirrors the index row)

<pid>.polygons.parquet holds the original FTW vector field boundaries, reprojected to the patch's UTM grid and clipped to its bounds. This is the same vector source the .label.tif raster is burned from, so you can score polygon-level metrics against true geometry instead of connected components of the mask. Columns: id, geometry, area_ha (true planimetric area in hectares), plus any of crop_id / crop_name / area / perimeter present in the source. Patches with no fields carry an empty (0-row) GeoParquet, so every sample has the file.

Tars are uncompressed; the TIFFs inside are ZSTD-22. They stream as WebDataset shards and also extract cleanly with tar -xf <country>.tar.

Downloading

python
from huggingface_hub import hf_hub_download, snapshot_download

repo_id = "<this-repo-id>"  # e.g. "<org>/ftw-planet"

# one country shard
path = hf_hub_download(repo_id, "dataset/rwanda.tar", repo_type="dataset")

# the whole dataset
snapshot_download(repo_id, repo_type="dataset", local_dir="ftw-planet")

Reading the index

python
import geopandas as gpd
from huggingface_hub import hf_hub_download

repo_id = "<this-repo-id>"
idx = hf_hub_download(repo_id, "index.parquet", repo_type="dataset")
gdf = gpd.read_parquet(idx)
clean = gdf[gdf.usable_pair & (gdf.cloud_cover_a < 0.05) & (gdf.cloud_cover_b < 0.05)]

The index is GeoParquet 1.1 with a bbox covering struct and is Hilbert-sorted into 14 row groups, so spatial queries from DuckDB / duckdb-wasm can prune row groups by bbox without parsing WKB:

sql
INSTALL spatial; LOAD spatial; INSTALL httpfs; LOAD httpfs;

SELECT patch_id, country
FROM 'index.parquet'
WHERE bbox.xmin > -10 AND bbox.xmax < 25
  AND bbox.ymin > 35  AND bbox.ymax < 60
  AND usable_pair;

Index columns

Identity / geometry:

columntypenotes
patch_idstrunique within country
countrystrone of 24 slugs
geometrypolygonEPSG:4326 patch footprint
crsstrnative UTM CRS of the tifs (e.g. EPSG:32636)
bounds_4326float[4][minx, miny, maxx, maxy] convenience field

Paths (relative to the tar / planet root):

columnexample
image_a_pathrwanda/window_a/1592589.tif
image_b_pathrwanda/window_b/1592589.tif
label_pathrwanda/labels/1592589.tif

Scene provenance, per window suffix _a / _b:

columnnotes
item_id_{a,b}PlanetScope item ID
scene_date_{a,b}UTC acquisition timestamp
cloud_cover_{a,b}scene-level fraction in [0,1]
coverage_{a,b}AOI coverage of the source scene
source_{a,b}source product / pipeline tag

Per-patch UDM2 statistics (fraction of pixels in the patch), per window:

columnmeaning
udm2_clear_{a,b}clear sky
udm2_cloud_{a,b}cloud
udm2_shadow_{a,b}cloud shadow
udm2_light_haze_{a,b}light haze
udm2_heavy_haze_{a,b}heavy haze
udm2_snow_{a,b}snow / ice
udm2_unusable_{a,b}UDM2 unusable mask
udm2_confidence_mean_{a,b}mean UDM2 confidence band
udm2_usable_flag_{a,b}bool — derived per-patch quality

FTW season metadata:

columnnotes
ftw_target_date_{a,b}target acquisition date for each window
ftw_season_startgrowing-season start (per FTW)
ftw_season_endgrowing-season end (per FTW)

Quality:

columntypenotes
usable_pairboolboth windows pass UDM2 usability — the primary training subset

Licensing

Fields of the Planet is made available under CC-BY-NC-4.0 (non-commercial), subject to the licensing terms of the underlying data sources.

PlanetScope imagery is © Planet Labs PBC and was obtained directly from the Planet archive under a research license for academic and nonprofit use. Use and redistribution of Planet imagery remain subject to the applicable Planet license terms. See the Planet Licensing Information Center for additional information.