Downloads · 30 days
23
17% of all-time downloads
taylor-geospatial/ftp-b7
ftp-b7 is a image segmentation model from taylor-geospatial. Use it for the image segmentation task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as cc-by-nc-4.0.
[](https://arxiv.org/abs/2607.04449) [](https://research.taylorgeospatial.org/fields-of-the-planet/) [](https://huggingface.co/datasets/taylor-geospatial/ftw-planet)
Downloads · 30 days
23
17% of all-time downloads
All-time downloads
132
Public
Parameters
67.4M
1.1 GB on disk
Likes
1
Public
Click a slice to open those files.
.pt2290 MB · 27%
From the Hugging Face model README
3m PlanetScope field-boundary segmentation model from Fields of the Planet
(FTP), a PlanetScope companion to Fields of the World
(FTW). Larger-backbone
variant of the paper's main reported model (ftp-b3).
U-Net decoder over an EfficientNet-B7 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.
smp.Unet(encoder_name="efficientnet-b7"), in_channels=8, classes=3[0.05, 0.2, 0.75], ignore_index=3| File | Format | Notes |
|---|---|---|
config.json + model.safetensors | segmentation_models_pytorch Hub format | recommended for most users — safetensors (no pickle), self-describing architecture, needs only pip install segmentation-models-pytorch |
ftp-b7.ckpt | PyTorch Lightning checkpoint | state_dict + hyper_parameters only — optimizer/scheduler state stripped |
ftp-b7.onnx | ONNX (opset 17) | single-file, dynamic batch/H/W, needs onnxruntime (plain PyTorch cannot execute .onnx) |
ftp-b7.pt2 | torch.export ExportedProgram | standalone, dynamic batch / static 512x512, loads with torch.export.load — no ftw_planet install needed |
import segmentation_models_pytorch as smp
model = smp.from_pretrained("taylor-geospatial/ftp-b7").eval()
logits = model(image) # image: (B, 8, H, W) float32, 2 seasonal windows x 4 bands
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.
import torch
import segmentation_models_pytorch as smp
ckpt = torch.load("ftp-b7.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
import onnxruntime as ort
sess = ort.InferenceSession("ftp-b7.onnx", providers=["CPUExecutionProvider"])
logits = sess.run(None, {"image": image_np})[0] # image_np: (B, 8, H, W) float32
ftw_planet needed)import torch
exported = torch.export.load("ftp-b7.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.
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-B7 row.
| Method | Sensor | Backbone | PQ | SQ | [email protected] | F1[.5:.95] | |ΔN|/N ↓ | Bd. err mean (m) ↓ | Bd. err p95 (m) ↓ | Pixel IoU † | PQ small ‡ | PQ med ‡ | PQ large ‡ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DelineateAnything * | PlanetScope | YOLO11x | 9.5 | 73.3 | 12.7 | 7.0 | 0.75 | 13.7 | 37.8 | 51.1 | 1.7 | 7.1 | 16.3 |
| DelineateAnything-S * | PlanetScope | YOLO11n | 3.5 | 70.8 | 4.8 | 2.5 | 0.82 | 13.2 | 34.2 | 40.7 | 0.8 | 2.8 | 6.7 |
| DelineateAnything v2 * | PlanetScope | YOLO11x | 7.5 | 75.0 | 10.0 | 5.6 | 0.82 | 9.4 | 25.5 | 27.1 | 4.4 | 11.4 | 14.8 |
| FTW-PRUE+ | Sentinel-2 | EfficientNet-B3 | 21.0 | 71.4 | 28.9 | 14.6 | 0.33 | 18.6 | 54.7 | 61.8 | 5.8 | 25.3 | 33.8 |
| FTW-PRUE+ | Sentinel-2 | EfficientNet-B7 | 24.2 | 71.0 | 32.8 | 17.2 | 0.35 | 14.4 | 43.4 | 63.6 | 7.5 | 28.4 | 37.7 |
| FTP-PRUE+ | PlanetScope | EfficientNet-B3 | 35.5 | 75.7 | 46.2 | 27.1 | 0.33 | 7.4 | 22.8 | 68.8 | 15.7 | 39.2 | 52.0 |
| FTP-PRUE+ (this model) | PlanetScope | EfficientNet-B7 | 35.4 | 74.4 | 46.1 | 27.0 | 0.30 | 7.4 | 22.8 | 74.2 | 15.6 | 40.6 | 50.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.
The B3 variant scores higher PQ (35.5 vs 35.4) at about 5x fewer parameters, but B7 has better pixel IoU (74.2 vs 68.8) and medium-field PQ (40.6 vs 39.2).
@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}
}
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.