File size: 11,375 Bytes
3217f9a
 
 
 
 
 
 
 
 
 
 
00ec82c
 
1de07f5
 
00ec82c
 
3217f9a
 
 
 
 
 
 
1de07f5
3217f9a
 
 
 
 
1de07f5
3217f9a
 
 
 
 
 
 
 
cd43d04
3217f9a
cd43d04
e329a6e
237bb08
cd43d04
237bb08
 
 
 
 
 
3217f9a
 
 
9031464
3217f9a
cd43d04
 
3217f9a
755ca51
4edfcae
237bb08
 
 
 
 
 
 
 
 
 
 
 
 
 
3217f9a
 
 
cd43d04
3217f9a
755ca51
4edfcae
237bb08
 
 
 
9031464
05f0f04
 
9031464
755ca51
 
3217f9a
cd43d04
00ec82c
f1ffdeb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
00ec82c
f1ffdeb
 
 
 
 
cd43d04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e329a6e
 
3217f9a
 
 
 
00ec82c
 
3217f9a
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
---

language:
- en
license: cc-by-nc-4.0
tags:
- vision
- image-classification
- botany
- western-australia
- dinov3
- mixture-of-experts
- litert
- onnx
- adaround
- fp8
- int8
- android
- biodiversity
- flora
datasets:
- gbif
pipeline_tag: image-classification
---


# PlantDetect: Western Australia Plant Vision (999 Species)

<div align="center">

### Built with DINOv3

**Fine-grained botanical vision models specializing in the flora of Western Australia.**

[![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Model-yellow)](https://huggingface.co/thenukegun10x/wa-plant-identifier)
[![License: CC BY-NC 4.0](https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc/4.0/)

</div>

---

## 1. Multi-View Botanical Inference (Single vs. Multi-Photo)

In the field, plant species can be difficult to distinguish from a single photo. By providing multiple complementary angles of the same plant (e.g. Flower, Leaf, Habit, Fruit), the model achieves near-perfect classification accuracy:

| Photos Provided by User | Mobile Dense Student (`plant_dense_4view`) — `PlantDetect-Dense-4View-BF16` | Server MoE++ BEST (`PlantDetect-BF16`) | Real-World Botanical Impact |
| :--- | :--- | :--- | :--- |
| **1 Photo (Single-Shot)** | **`82.08% Top-1`** (`93.03% Top-5`) | **`89.31% Top-1`** (`96.14% Top-5`) | Fast single photo identification |
| **2 Photos (Dual-Angle)** | **`94.27% Top-1`** (`99.28% Top-5`) | **`97.11% Top-1`** (`99.66% Top-5`) | Flower + Leaf resolves 94%+ of species |
| **3 Photos (Tri-Angle)** | **`97.45% Top-1`** (`99.84% Top-5`) | **`98.77% Top-1`** (`99.95% Top-5`) | Flower + Leaf + Growth habit |
| **4 Photos (Quad-Angle)** | **`98.31% Top-1`** (`99.90% Top-5`) | **`99.42% Top-1`** (`100.00% Top-5`) | **`99.9% Top-5`** certainty in the field |

*Re-benched 2026-08-30 sequential `BF16` `27,673` val, `K-view mean logits` via `bench_multiview_finals.py` (`data/bench_multiview_finals.json`) — `PlantDetect-Dense-4View-BF16` / `PlantDetect-BF16`.*

---

## 2. Complete Model Artifact Catalog (Direct Download Links)

### A. Mobile Edge & Embedded Models (Dense ViT-Base)
*Optimized for Samsung Galaxy S24 (Exynos 2400 / Snapdragon 8 Gen 3), iOS, Windows DirectML, and Raspberry Pi.*

| Model File | Model Type | Runtime Target | Format / Precision | File Size | Top-1 (1-View) | Top-1 (4-View) | Target Hardware |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| [**`PlantDetect-Dense-INT8.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-INT8.safetensors) | Single-Shot | PyTorch / Python | **Standard W8A16 INT8** | **`93.3 MB`** | 83.02% | 97.34% | Ultra-compact Python edge |
| [**`PlantDetect-Dense-FP8-AdaRound.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-FP8-AdaRound.safetensors) | Single-Shot | PyTorch / Python | **AdaRound FP8 (E4M3)** | **`92.7 MB`** | 83.02% | 97.34% | GPU / Python lightweight |
| [**`PlantDetect-Dense-BF16.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-BF16.safetensors) | Single-Shot | PyTorch / Python | **Full `bfloat16`** | **`181.5 MB`** | 83.02% | 97.34% | Dense PyTorch reference |
| [**`PlantDetect-Dense-4View-INT8.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-4View-INT8.safetensors) | **4-View Distilled** | PyTorch / Python | **Standard W8A16 INT8** | **`93.3 MB`** | 82.08% | **98.31%** | Dedicated multi-photo mobile edge |
| [**`PlantDetect-Dense-4View-FP8-AdaRound.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-4View-FP8-AdaRound.safetensors) | **4-View Distilled** | PyTorch / Python | **AdaRound FP8 (E4M3)** | **`92.7 MB`** | 82.08% | **98.31%** | Dedicated multi-photo GPU edge |
| [**`PlantDetect-Dense-4View-BF16.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-Dense-4View-BF16.safetensors) | **4-View Distilled** | PyTorch / Python | **Full `bfloat16`** | **`181.5 MB`** | 82.08% | **98.31%** | Lossless 4-view dense reference |
| [**`onnx/PlantDetect-Dense-INT8.onnx`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/onnx/PlantDetect-Dense-INT8.onnx) | Single-Shot | ONNX Runtime | **Mixed-Precision INT8** | **`106.3 MB`** | 83.02% | 97.34% | Android, iOS CoreML, Windows |
| [**`onnx/PlantDetect-Dense-FP32.onnx`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/onnx/PlantDetect-Dense-FP32.onnx) | Single-Shot | ONNX Runtime | **Full FP32** | `363.3 MB` | 83.02% | 97.34% | Standard reference ONNX |
| [**`onnx/PlantDetect-Dense-4View-INT8.onnx`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/onnx/PlantDetect-Dense-4View-INT8.onnx) | **4-View Distilled** | ONNX Runtime | **Mixed-Precision INT8** | **`106.3 MB`** | 82.08% | **98.31%** | Multi-photo ONNX Runtime |
| [**`onnx/PlantDetect-Dense-4View-FP32.onnx`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/onnx/PlantDetect-Dense-4View-FP32.onnx) | **4-View Distilled** | ONNX Runtime | **Full FP32** | `363.3 MB` | 82.08% | **98.31%** | Multi-photo reference ONNX |
| [**`litert/PlantDetect-Dense-INT8.tflite`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/litert/PlantDetect-Dense-INT8.tflite) | Single-Shot | Google LiteRT (TFLite) | **Full Integer INT8** | **`387.0 MB`** | 83.02% | 97.34% | Samsung S24 NPU acceleration |
| [**`litert/PlantDetect-Dense-FP16.tflite`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/litert/PlantDetect-Dense-FP16.tflite) | Single-Shot | Google LiteRT (TFLite) | **Float16** | **`196.2 MB`** | 83.02% | 97.34% | Mobile GPU / XNNPACK CPU |
| [**`litert/PlantDetect-Dense-4View-INT8.tflite`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/litert/PlantDetect-Dense-4View-INT8.tflite) | **4-View Distilled** | Google LiteRT (TFLite) | **Full Integer INT8** | **`385.8 MB`** | 82.08% | **98.31%** | Samsung S24 Multi-View NPU |
| [**`litert/PlantDetect-Dense-4View-FP16.tflite`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/litert/PlantDetect-Dense-4View-FP16.tflite) | **4-View Distilled** | Google LiteRT (TFLite) | **Float16** | **`195.8 MB`** | 82.08% | **98.31%** | Multi-View Mobile GPU |

---

### B. Server / Desktop GPU Models (Mixture-of-Experts)

| Model File | Model Type | Architecture | Format | Size | Top-1 (1-View) | Top-1 (4-View) | Primary Use Case |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| [**`PlantDetect-FP8-AdaRound.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-FP8-AdaRound.safetensors) | Single-Shot | MoE++ (16 FFNs) | **AdaRound FP8 (E4M3)** | **`104.3 MB`** | **89.31%** | **99.42%** | **Fastest, ultra-compact GPU server inference** |
| [**`PlantDetect-BF16.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-BF16.safetensors) | Single-Shot | MoE++ (16 FFNs) | **Full `bfloat16`** | **`205.2 MB`** | **89.31%** | **99.42%** | Lossless baseline reference |
| [**`PlantDetect-4View-FP8-AdaRound.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-4View-FP8-AdaRound.safetensors) | **4-View Distilled** | MoE++ 4-View | **AdaRound FP8 (E4M3)** | **`104.3 MB`** | 85.15% | **99.07%** | Dedicated multi-photo teacher (FP8) |
| [**`PlantDetect-4View-BF16.safetensors`**](https://huggingface.co/thenukegun10x/wa-plant-identifier/resolve/main/PlantDetect-4View-BF16.safetensors) | **4-View Distilled** | MoE++ 4-View | **Full `bfloat16`** | **`205.2 MB`** | 85.15% | **99.07%** | Lossless multi-photo baseline |

> **⚠️ FP8 Hardware Compatibility:** `FP8 (E4M3)` requires recent GPU hardware with native FP8 support (NVIDIA Ada Lovelace / Hopper — e.g. RTX 40xx, L4, H100) and `CUDA 12+` / `PyTorch 2.1+`. **Not commonly supported** on older GPUs, CPUs, or mobile. Please check your hardware supports FP8 — **if unsure, use `BF16`** (identical `89.31%`/`99.42%` accuracy, `205MB` vs `104MB`). FP8 works via `bf16` autocast on unsupported hardware but without size/speed benefit.

> **Quantization Architecture Details:**
> * **FP8 Models (`*-FP8-AdaRound.safetensors`):** Quantized using **AdaRound FP8** with quadratic activation reconstruction loss $\min \|Wx - \tilde{W}(V)x\|_2^2$ over non-uniform E4M3 discrete grids (100% Top-1 FP32 match).

> * **INT8 Models (`*-INT8.safetensors` / `.onnx` / `.tflite`):** Quantized using **Symmetric Per-Channel W8A16 Dynamic Range Quantization**, delivering **`43.81 dB` SQNR** and **`0.999985` cosine similarity**.



---



## 3. 🖥️ Official Plant CLI Guide



### 1. Installation

```bash

git clone https://huggingface.co/thenukegun10x/wa-plant-identifier

cd wa-plant-identifier

pip install -r requirements.txt

```



### 2. Identify a Plant from a Single Photo

```bash

python plant_cli.py identify wild_flower.jpg --topk 5

```



### 3. Multi-View Botanical Identification (Flower + Leaf + Habit)

Achieves **97%–99% certainty** by averaging logits across complementary plant angles:

```bash

python plant_cli.py identify flower.jpg leaf.jpg habit.jpg fruit.jpg
```



### 4. Batch Directory Identification

Recursively process an entire field folder and export results to CSV:

```bash

python plant_cli.py batch --dir field_photos/ --pattern "*.jpg" --recursive --out results.csv

```

---

## 4. Python Quickstart Examples

### Multi-View Inference with PyTorch / Safetensors
```python

import torch

import numpy as np

from PIL import Image

from safetensors.torch import load_file

from src.models.plant_vit import PlantViT



# 1. Load model

model = PlantViT(stem_name="vit_base_patch16_dinov3", n_classes=999, use_moe=None)

sd = load_file("PlantDetect-Dense-BF16.safetensors")

model.load_state_dict(sd, strict=False)

model.eval()



# 2. Preprocess multiple photos of the same plant (e.g. Flower + Leaf)

def preprocess(path):

    img = Image.open(path).convert("RGB").resize((383, 383))

    crop = img.crop((23, 23, 359, 359))

    arr = (np.array(crop, dtype=np.float32) / 255.0 - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225]

    return torch.from_numpy(arr.transpose(2, 0, 1)).unsqueeze(0)



photos = [preprocess("flower.jpg"), preprocess("leaf.jpg")]



# 3. Compute mean logits across all views

with torch.no_grad():

    logits_list = [model(p)[0] for p in photos]

    mean_logits = torch.stack(logits_list).mean(dim=0)

    top_species_idx = mean_logits.argmax(dim=-1).item()



print(f"Identified Species Index: {top_species_idx}")

```

---

## Attribution & Licensing

* **Built with DINOv3:** Uses the DINOv3 vision backbone (`vit_base_patch16_dinov3.lvd1689m`) developed by Meta AI.
* **Dataset Attribution:** Observation data sourced from the **Global Biodiversity Information Facility (GBIF)** and **Western Australian Herbarium (FloraBase / DBCA)**.
* **License:** Released under **Creative Commons Non-Commercial (CC BY-NC 4.0)** for scientific and non-commercial research.