Latent Commonality Expectation-Maximisation for Box-supervised Tree Crown Instance Segmentation
Organizations: Department of Data Science, University of Technology Sydney
Abstract
Individual tree crown segmentation from aerial imagery underpins tree-level carbon accounting, biodiversity, and restoration monitoring at landscape scale. However, existing models are predominantly trained on dense canopy forest imagery and degrade in savannah and drylands, where tree crowns are sparse, of variable appearance, and underrepresented in annotated benchmarks. These models also typically depend on costly polygon annotations. We introduce LACE (LAtent Commonality Expectation-maximisation), a box-supervised instance segmentation model, evaluated on 0.1 m/px aerial RGB tree crown imagery. LACE uses a frozen DINOv3-web ViT-L/16 encoder, applied at four spatial offsets and interlaced into a denser feature grid, with a lightweight CenterNet-style detection head trained solely on bounding boxes. We use expectation-maximisation to separate recurring appearance, the "treeness", within bounding boxes from surroundings. On the OAM-TCD benchmark test set, LACE reaches a mask AP of (3 seeds) trained on 900 box-annotated images and without mask annotations, above the 0.626 scored by Restor's released mask-supervised Mask R-CNN, which was trained on the full ~4.2k image set. On a sparse-canopy holdout set, mask AP rises to versus for Detectree2, a mask-supervised baseline. On NeonTreeEvaluation, using the official evaluation code, LACE reaches [email protected] (5 seeds) from 23,424 hand-annotated RGB boxes alone, matching the authors' DeepForest model's published 0.719, using under 0.1% of its training annotations and none of its LiDAR-derived 30M-crown pretraining set. By leveraging frozen self-supervised features, LACE matches or surpasses fully-supervised specialist baselines from boxes alone, removing the need for polygon annotation in tree crown instance segmentation for sparse-canopy environments where labelled data is scarce.
Figures & tables
| GSD | Biome | ||||||
|---|---|---|---|---|---|---|---|
| Method | Output | Input | Extra net(s) | (cm) | Tr | Te | Sv |
| Trained on crown polygons | |||||||
| Mask R-CNN (OAM-TCD) [ 33 ] | Mask | RGB | – | 10 | |||
| Detectree2 [ 18 ] | Mask | RGB | – | 10 | |||
| Mask R-CNN / DETR [ 76 ] | Mask | MS+LiD | – | 5 | |||
| CrownViM [ 77 ] | Mask | RGB | – | 10 | |||
| Component | Setting |
|---|---|
| Encoder | DINOv3 ViT-L/16, frozen, layer 24 only, dimensions (NEON: layers 21–24, ) |
| Feature grid | 4 offsets , interlaced to px; cells per px tile |
| Detector | stem to width ; blocks, group norm, ReLU; heatmap and -channel regression heads; stride |
| Target encoding | CenterNet Gaussians, grid , stride , radius at IoU overlap , floor cell |
| Detector training | Adam, lr , weight decay , cosine schedule, batch , max epochs, early stopping on validation box AP 50 (minimum epochs, patience ), best-on-validation checkpoint |
| Decoding | local maxima, score , top per tile; operating point for single-threshold metrics |
| Method | Superv. | Imgs | AP 50 | AP 50:95 | Box AP 50 |
|---|---|---|---|---|---|
| Restor Mask R-CNN a | masks | 4169 | 0.626 | 0.277 | 0.654 |
| Detectree2 b | masks | 900 | 0.597 | 0.258 | 0.591 |
| SelvaBox SAM 3 c | box+SAM | 3024 | 0.569 | 0.203 | 0.730 |
| Box2Mask Swin-L d | box | 900 | 0.540 | 0.198 | 0.582 |
| Box2Mask R-50 d | box | 900 | 0.387 | 0.130 | 0.471 |
| LACE (ours) (3-seed) | box | 900 | 0.663 | 0.279 | 0.640 |
| Method | P | R | max R | |
|---|---|---|---|---|
| DeepForest, published a | 0.659 | 0.790 | 0.719 | – |
| DeepForest, replicated (v2.1.0) b | 0.745 | 0.709 | 0.726 | 0.765 |
| Ours (5-seed) |
| Canopy neutral | ||||
|---|---|---|---|---|
| Method | AP 50 | AP 75 | AP 50:95 | Box AP 50 |
| Detectree2 | ||||
| LACE (ours) | ||||
| 0.0095 | 0.0107 | 0.0069 | 0.0272 | |
| Code | Biome (WWF) | Tiles | Crown px | Canopy px |
| Sparse-canopy slice | ||||
| 7 | Trop./Subtrop. Grassland, Savanna & Shrubland | 102 | 2.3% | 8.7% |
| 12 | Mediterranean Forest, Woodland & Scrub | 56 | 4.8% | 7.6% |
| 8 | Temperate Grassland, Savanna & Shrubland | 31 | 4.8% | 11.5% |
| 13 | Desert & Xeric Shrubland | 24 | 6.2% | 15.2% |
| 10 | Montane Grassland & Shrubland | 16 | 1.1% | 1.9% |
| Box-to-mask module | Mean IoU | |||
|---|---|---|---|---|
| LACE commonality EM (ours) | ||||
| SAM 3, zero-shot a | ||||
| SAM 3, SelvaMask fine-tuned b |
| Feature grid | [email protected] | max Recall | NIWO site F1 |
|---|---|---|---|
| Native px, interpolated to px | |||
| Interlaced -offset, real px | |||
| Configuration | Mask AP 50 | Mask AP 50:95 |
|---|---|---|
| , (3 seeds) | ||
| , (3 seeds) |
| M-step | E-step | GT Oracle boxes | Predicted boxes |
|---|---|---|---|
| generative ( ) | absolute | ||
| generative ( ) | recentred | ||
| contrastive ( ) | absolute | ||
| contrastive ( ) | recentred | ||
| repulsion alone | |||
| recentring alone | |||
| Split | Ranking | AP 50 | AP 75 | AP 50:95 |
|---|---|---|---|---|
| OAM-TCD 439 | (detector score) | |||
| Sparse 236 | Detectree2 (FT) | |||
| (detector score) | ||||
| Ranking | AP 50 | AP 75 | AP 50:95 | Val box AP 50 |
|---|---|---|---|---|
| (drop ) | ||||
| (drop ) | ||||
| Canopy-class fraction | Tiles | Mask AP 50 | Box AP 50 | Mask Box |
|---|---|---|---|---|
| 196 | ||||
| 95 | ||||
| 86 | ||||
| 62 |
Appendix figures & tables5 assets
Supplementary material from the paper’s appendix.
Appendix
| Box IoU | Mask IoU | Mask IoU within box-IoU stratum | |||||
|---|---|---|---|---|---|---|---|
| Method | |||||||
| Restor Mask R-CNN | |||||||
| Detectree2 (fine-tuned) | |||||||
| SelvaBox SAM 3 | |||||||
| Box2Mask Swin-L | |||||||
| Box2Mask R-50 | |||||||
| Mean crown IoU | ||||||
| Config. | init | final | Eff. rank | Pairwise | Oracle | Pred. |
| 16 | 16 | |||||
| 16 | 15 | |||||
| 16 | 13 | |||||
| 16 | 16 | |||||
| 2 | 2 | |||||
| Setting | Value |
|---|---|
| Engine | pycocotools COCOeval , unmodified; iouType segm then bbox |
| Unit | the whole holdout tiles; AP pooled over images, not averaged per tile |
| Categories | one, tree (OAM-TCD cat ). With a single category the class mean is degenerate, which is why we write AP 50 rather than mAP 50 |
| IoU thresholds | linspace(0.5, 0.95, 10) , the COCO convention. An earlier arange(0.5, 0.96, 0.05) placed , and one ulp high and rejected IoUs landing exactly there, worth AP 50:95 |
| Recall thresholds | -point (COCO default) |
| Area ranges | all only. Per-instance areas are persisted, so a size-stratified cut can be made later without re-scoring |
| Row | Geometry | Deviations from released configuration |
|---|---|---|
| LACE (ours) | whole | none; decoder floor and topk are the protocol values |
| Restor Mask R-CNN | whole (their own test configuration) | SCORE_THRESH_TEST ; DETECTIONS_PER_IMAGE ; RPN.PRE/POST_NMS_TOPK_TEST |
| Detectree2 | at overlap, subtiles, stitched | INPUT.MIN_SIZE_TEST set to its own MIN_SIZE_TRAIN of rather than Detectron2’s inherited COCO default of , which would downscale our subtiles at test but not at train; stitched at the protocol floor rather than its ; clean_crowns merge (IoU or containment ) |
| SelvaBox SAM 3 | at overlap, native m/px | their OAM-TCD benchmark configuration, not the px at m/px deployment preset, which would resample this imagery up; SAM 3 run at the px tile size its wrapper defaults to; IoU-NMS merge; their edge-band cull not applied |
| Box2Mask | as the Detectree2 row | same crops, grid and stitcher; the architecture’s cap of instances per subtile is left in place |
| RPN topk | Dets/tile | Recall | AP 50 | AP 50:95 |
|---|---|---|---|---|
| (released) | ||||
| (Detectron2 default, reported ) |
Instance Segmentation
Instance segmentation identifies each object and assigns it a separate pixel-level mask in images or video.
See all 157 papers