|
|
--- |
|
|
license: cc-by-4.0 |
|
|
datasets: |
|
|
- GlobalWheat/GWFSS_v1.0 |
|
|
metrics: |
|
|
- f1 |
|
|
base_model: |
|
|
- microsoft/resnet-50 |
|
|
pipeline_tag: image-segmentation |
|
|
tags: |
|
|
- computer-vision |
|
|
- semantic-segmentation |
|
|
- instance-counting |
|
|
- phenotyping |
|
|
- agriculture |
|
|
- crop-analysis |
|
|
- yield-estimation |
|
|
- wheat |
|
|
--- |
|
|
|
|
|
# 🌾 HeadCount |
|
|
|
|
|
A semantic segmentation model for counting wheat heads in field images. Designed for yield estimation, flowering time detection, and field maturity assessment. |
|
|
|
|
|
**[Interactive Demo →](https://huggingface.co/spaces/chmcbs/HeadCount)** |
|
|
|
|
|
**[GitHub Repo →](https://github.com/chmcbs/HeadCount)** |
|
|
|
|
|
## Model Details |
|
|
|
|
|
- **Architecture:** DeepLabV3+ with ResNet50 encoder |
|
|
- **Framework:** PyTorch with segmentation-models-pytorch |
|
|
- **Input:** RGB images (resized to 512×512) |
|
|
- **Output:** 4-class segmentation (Background, Leaf, Stem, Head) |
|
|
- **Counting Method:** Distance transform + peak detection on head mask |
|
|
- **Loss Function:** Dice loss with inverse frequency weighting (1.5× stem boost) |
|
|
- **Optimizer:** Adam with CosineAnnealingLR scheduling |
|
|
|
|
|
## Performance |
|
|
|
|
|
| Class | F1 | |
|
|
|------------|-------| |
|
|
| Background | 0.858 | |
|
|
| Leaf | 0.889 | |
|
|
| Stem | 0.535 | |
|
|
| Head | 0.897 | |
|
|
|
|
|
## Example Usage |
|
|
|
|
|
```python |
|
|
from inference import GWFSSModel |
|
|
from PIL import Image |
|
|
|
|
|
# Load model |
|
|
model = GWFSSModel("model.pth") |
|
|
|
|
|
# Load and process image |
|
|
image = Image.open("input.jpg") |
|
|
predictions = model.predict(image) |
|
|
|
|
|
# Count heads |
|
|
num_heads = model.count_heads(predictions) |
|
|
print(f"🌾 {num_heads} heads detected") |
|
|
|
|
|
# Create visualisation |
|
|
overlay = model.overlay_mask(image, predictions, alpha=0.5, heads_only=True) |
|
|
overlay.save("output.png") |
|
|
``` |
|
|
|
|
|
## Limitations |
|
|
|
|
|
Best performance is achieved with overhead imagery under diffuse lighting. Known challenges include: |
|
|
- **Lighting Sensitivity:** Bright or harsh lighting can cause over-segmentation, splitting single heads into multiple detections |
|
|
- **Overlapping Heads:** Dense clusters with significant overlap are challenging to separate accurately |
|
|
- **Colour Dependency:** Performance is lower on senesced plants |
|
|
|
|
|
## Training Data |
|
|
|
|
|
This model is trained on [`GWFSS_v1.0_labelled`](https://huggingface.co/datasets/GlobalWheat/GWFSS_v1.0) from the [Global Wheat Full Semantic Organ Segmentation](https://doi.org/10.1016/j.plaphe.2025.100084) dataset. |