Tree Genus Classification (CropModel)
Classifies tree crowns detected by
DeepForest into 54 genera. Trained on RGB imagery from 29
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
7genus_model = CropModel.load_model("weecology/cropmodel-tree-genus")
8
9results = detector.predict_tile(path="tile.tif", crop_model=genus_model)
10# results has columns: cropmodel_label, cropmodel_score
Results (Test Set)
| Metric | Value |
|---|
| Accuracy | 44.0% |
| Macro F1 | 0.25 |
| Weighted F1 | 0.44 |
| Classes | 54 |
Full per-class precision/recall/F1 in
classification_report.csv.
Training
| Parameter | Value |
|---|
| Architecture | ResNet-18 (torchvision, ImageNet pretrained) |
| Input | 224x224 RGB, ImageNet normalization |
| Resize interpolation | nearest-neighbor |
| Optimizer | AdamW (lr=2.5e-4, weight_decay=1e-4) |
| Scheduler | ReduceLROnPlateau |
| Max epochs | 500 (early stopping patience=15) |
| Best epoch | 3 (val_loss=2.22) |
| Batch size | 256 |
| Class weights | sqrt inverse-frequency |
| Seed | 42 |
Dataset
16,348 deduplicated tree crowns from 29 NEON sites. One sample per unique individual, rare species (<6 samples) removed. Labels from NEON Vegetation Structure Taxonomy (VST) field surveys. RGB crown crops extracted at 0.1m resolution.
| Split | Samples |
|---|
| Train (70%) | 11,443 |
| Val (15%) | 2,452 |
| Test (15%) | 2,453 |
Split method: stratified 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, TALL, TEAK, UKFS, UNDE, WREF
License
MIT