Plant.health major expansion: from 90 to 500+ diseases

By
Ondřej Veselý
3 min read
Share this post

The new system now distinguishes 548 plant health classes — up from 90 in the previous model — covering a much broader range of insects, fungi, bacteria, and abiotic stresses.

Despite the ~6× expansion in scope, aggregate accuracy remains comparable to the prior version. We evaluated performance on images of sick plants: Top-1 hit rate = 58%, Top-3 hit rate = 73%. When an image has multiple ground-truth labels (e.g., mechanical damage and water deficiency), a prediction counts as a hit if the model suggests at least one of those labels.

There are no integration changes. The JSON response structure, endpoints, authentication and request parameters all remain the same.

From multilabel to a dual-model system

Our previous model was multilabel—each class received an independent score, so probabilities didn’t sum to 100%.

The new system uses two single-label submodels that each return normalized probabilities (summing to 100%); we then combine their outputs to produce final suggestions. This change makes results easier to interpret.

Note: You may see lower probability values than before. That’s expected given the normalization and broader class set—no action is required on your side.

A comparison of the legacy (left) and new (right) models on a sunburnt clivia. While the legacy model's most specific class is 'light excess', the new model can identify 'sunburn' specifically. Additionally, the sum of the legacy model's probabilities is greater than 100%.

health=auto: smarter behavior

The new model now returns non-disease lookalikes that are often confused with symptoms (e.g., lichen or moss cover, flower buds, emerging leaves, harmless insects).

With health=auto, the full Plant.Health result is returned only when the top disease suggestion is higher than a confidence threshold. This makes automatic health assessments more informative when users aren’t sure what they’re seeing.

Important: The is_healthy classifier and the health=auto modifier are independent. A result can be is_healthy=true even when the model detects non-harmful classes; these are not treated as diseases and will be marked by a new indicator in the API response non_harmful=true.

Expanded Knowledge Base

Each class in the new model is now linked to the plant.health knowledge base, available in multiple languages.
Entries include descriptions, treatment recommendations, and reference URLs, making diagnoses not only more precise but also more actionable for both end users and developers.

Given the size and language coverage, entries for some less-common classes are LLM-assisted under expert supervision.

Share this post
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.