CoolFace
Modelpublic

taylor-geospatial/ftp-b3

sourceHugging Facecc-by-nc-4.0updated 27d agoView on Hugging Face
1likes132downloads
Model Card

FTP-PRUE+ (EfficientNet-B3) — Fields of the Planet

![arXiv](https://arxiv.org/abs/2607.04449) ![Project Page](https://research.taylorgeospatial.org/fields-of-the-planet/) ![Dataset](https://huggingface.co/datasets/taylor-geospatial/ftw-planet)

3m PlanetScope field-boundary segmentation model from Fields of the Planet (FTP), a PlanetScope companion to Fields of the World (FTW). This is the paper's main reported model.

U-Net decoder over an EfficientNet-B3 encoder, trained on paired planting- and harvest-window PlanetScope surface-reflectance imagery (8 input channels: 2 seasonal windows x 4 bands) to predict a 3-class field mask (background / field / boundary) at 3m ground sample distance.

Files

FileFormatNotes
config.json + model.safetensorssegmentation_models_pytorch Hub formatrecommended for most users — safetensors (no pickle), self-describing architecture, needs only pip install segmentation-models-pytorch
ftp-b3.ckptPyTorch Lightning checkpointstate_dict + hyper_parameters only — optimizer/scheduler state stripped
ftp-b3.onnxONNX (opset 17)single-file, dynamic batch/H/W, needs onnxruntime (plain PyTorch cannot execute .onnx)
ftp-b3.pt2torch.export ExportedProgramstandalone, dynamic batch / static 512x512, loads with torch.export.load — no ftw_planet install needed

Usage

segmentationmodelspytorch (recommended)

python
import segmentation_models_pytorch as smp

model = smp.from_pretrained("taylor-geospatial/ftp-b3").eval()
logits = model(image)  # image: (B, 8, H, W) float32, 2 seasonal windows x 4 bands

Lightning checkpoint (raw smp.Unet)

The checkpoint's state_dict is just an smp.Unet under a model. prefix. Unless you need the Lightning training wrapper, smp.from_pretrained above is simpler.

python
import torch
import segmentation_models_pytorch as smp

ckpt = torch.load("ftp-b3.ckpt", map_location="cpu")
hp = ckpt["hyper_parameters"]
model = smp.Unet(encoder_name=hp["backbone"], encoder_weights=None, in_channels=hp["in_channels"], classes=hp["num_classes"])
model.load_state_dict({k.removeprefix("model."): v for k, v in ckpt["state_dict"].items()})
model.eval()

logits = model(image)  # image: (B, 8, H, W) float, 2 seasonal windows x 4 bands

ONNX

python
import onnxruntime as ort

sess = ort.InferenceSession("ftp-b3.onnx", providers=["CPUExecutionProvider"])
logits = sess.run(None, {"image": image_np})[0]  # image_np: (B, 8, H, W) float32

torch.export (standalone, no ftw_planet needed)

python
import torch

exported = torch.export.load("ftp-b3.pt2")
model = exported.module()
logits = model(image)  # image: (B, 8, 512, 512) float32, any batch size

Output is 3-class logits (background / field / boundary). Argmax plus the repo's watershed post-processing (scripts/eval/postprocess_eval.py) recovers instance polygons.

Results

Polygon-level results macro-averaged over the ten dense-label held-out countries dominated by smallholder fields (paper Table 1). This checkpoint is the FTP-PRUE+ / EfficientNet-B3 row.

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+ (this model)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.

Citation

bibtex
@misc{corley2026fieldsplanetfieldboundary,
  title         = {Fields of the Planet: Field Boundary Mapping Beyond 10m},
  author        = {Isaac Corley and Caleb Robinson and Jennifer Marcus and Hannah Kerner},
  year          = {2026},
  eprint        = {2607.04449},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CV},
  url           = {https://arxiv.org/abs/2607.04449}
}

License

Weights are released under CC-BY-NC-4.0 (non-commercial), subject to the licensing terms of the underlying data sources.

Trained on PlanetScope imagery © Planet Labs PBC, 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.

Trained on FTW field-boundary polygons (CC-BY-4.0); see fieldsoftheworld/ftw-baselines for source terms.