NEON Tree Species Classification (ResNet-18)
Classifies tree crowns detected by
DeepForest into 167 species using USDA PLANTS codes. Trained on RGB imagery from 30
NEON sites across North America.
Usage
1from deepforest import main
2from deepforest.model import CropModel
3
4detector = main.deepforest()
5detector.load_model("weecology/deepforest-tree")
6
7species_model = CropModel.load_model("weecology/cropmodel-neon-resnet18-species")
8
9results = detector.predict_tile(path="tile.tif", crop_model=species_model)
10# results has columns: cropmodel_label, cropmodel_score
Results (Test Set)
| Metric | Value |
|---|
| Accuracy | 86.9% |
| Macro F1 | 0.80 |
| Weighted F1 | 0.87 |
| Classes | 167 |
Full per-class precision/recall/F1 in
classification_report.csv.
Training
| Parameter | Value |
|---|
| Architecture | ResNet-18 (torchvision, ImageNet pretrained) |
| Input | 224×224 RGB, ImageNet normalization |
| Optimizer | AdamW (lr=1e-3, weight_decay=1e-4) |
| Scheduler | ReduceLROnPlateau |
| Max epochs | 500 (early stopping patience=15) |
| Best epoch | 11 (val_loss=0.62) |
| Batch size | 512 |
| Class weights | None |
| Seed | 42 |
Dataset
47,971 tree crowns from 30 NEON sites. Labels from NEON Vegetation Structure Taxonomy (VST) field surveys. RGB crown crops extracted at 0.1m resolution.
| Split | Samples |
|---|
| Train (70%) | 33,579 |
| Val (15%) | 7,195 |
| Test (15%) | 7,197 |
Split method: random, seed=42.
Sites: ABBY, BART, BONA, CLBJ, DEJU, DELA, GRSM, GUAN, HARV, HEAL, JERC, KONZ, LENO, MLBS, MOAB, NIWO, ONAQ, OSBS, PUUM, RMNP, SCBI, SERC, SJER, SOAP, SRER, TALL, TEAK, UKFS, UNDE, WREF
License
MIT