File size: 3,160 Bytes
3d21b4b
0e3ea0a
 
 
 
3d21b4b
 
5955a7b
3d21b4b
 
b4bd4a7
3d21b4b
 
 
 
0e3ea0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35d6de8
 
926a9f1
 
 
 
 
 
0e3ea0a
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---
title: Forager's Field Station
emoji: πŸ„
colorFrom: yellow
colorTo: green
sdk: gradio
sdk_version: 6.16.0
python_version: "3.11"
app_file: app.py
pinned: false
hf_oauth: true
license: apache-2.0
short_description: Pocket-sized intelligence for identifying edible wild foods
---

# Forager's Field Station

Photograph a wild plant or mushroom and the model identifies it β€” **or refuses
when it isn't sure.** A domain router plus three `tf_efficientnet_lite2`
classifiers (~9M params each), ~0.04B parameters total. The same stack runs
offline on a Hailo 8L NPU in a handheld field device; this Space is its CPU twin.

Built for the **Build Small Hackathon** β€” Backyard AI track. The honest fit:
a forager in the woods has no signal, so a small on-device model isn't a
compromise, it's the only thing that works.

## How it works

```
photo ─► domain router (berry / mushroom / plant / other)
            β”‚  conf < 0.74  or  "other"  ─► ABSTAIN
            β–Ό
        ONE expert owns each domain (no cross-expert voting):
            berry ─► berry_expert   mushroom ─► highvalue_expert
            plant ─► medicinals_expert
            β”‚  below confidence gate  ─► ABSTAIN
            β–Ό
        SAFE / CAUTION / DEADLY  + scientific name, lookalike, key difference
```

Single-expert routing is a safety choice: an off-domain expert never gets to
misclassify an input it doesn't own (e.g. the mushroom expert never sees a
plant, so it can't call a poison hemlock "ramps"). The deadly plants live in the
medicinals expert, which scored 0% toxic-as-edible on held-out validation.

The system is built to **refuse by default.** Across real-world test photos it
abstained rather than guess on the cases it couldn't handle, and never labelled
a deadly specimen as edible.

## Models

| Model | Domain | Classes |
|---|---|---|
| `domain_router_v2` | berry / mushroom / plant / other | 4 |
| `berry_expert` | wild berries + toxic lookalikes | 11 |
| `highvalue_expert` | chanterelles, morels, lion's mane, ginseng… | 11 |
| `medicinals_expert` | wild medicinal plants + toxic lookalikes | 21 |

Trained on iNaturalist research-grade observations. Apache-2.0.

πŸ“¦ **Weights published as fine-tuned models:** [HomesteaderLabs/forager-field-station-models](https://huggingface.co/HomesteaderLabs/forager-field-station-models) β€” `.pt` + `.onnx` for the router and all three experts, fine-tuned from `timm/tf_efficientnet_lite2.in1k`.

## Field notes

The build story β€” edge constraints, the single-expert safety pivot, the
safety-vs-usefulness curve, and a one-line bug that inverted our OOD detector β€” is in
[FIELD_NOTES.md](FIELD_NOTES.md).

## Safety notice

**Identification aid only β€” never an authority.** Wild plant and mushroom
identification carries fatal risk. No output should be acted on β€” including any
consumption decision β€” without independent verification by a qualified expert.
Amatoxin poisoning (Amanita, Galerina, Conocybe) is lethal with no reliable
field antidote. The maintainers accept no liability for decisions made from
model output.

β€” [HomesteaderLabs](https://homesteaderlabs.com)