CoolFace
Datasetpublic

mohanty/PlantVillage

PlantVillage Dataset The PlantVillage Dataset is an open access repository of 54,306 images of healthy and diseased plant leaves, collected to advance research in automated plant disease diagnosis. It covers 14 crop species and 26 diseases. This dataset was introduced in the paper "Using Deep Learning for Image-Based Plant Disease Detection" by Mohanty et al. (2016). Quick Start The dataset comes with pre-defined 80/20 train/test splits that preserve the leaf… See the full description on the dataset page: https://huggingface.co/datasets/mohanty/PlantVillage.

sourceHugging Facecc-by-sa-3.0updated 8mo agoView on Hugging Face
14likes5.4kdownloads
Dataset Card

PlantVillage Dataset

![Paper](https://www.frontiersin.org/journals/plant-science/articles/10.3389/fpls.2016.01419/full) ![GitHub](https://github.com/spMohanty/PlantVillage-Dataset)

<img src="https://raw.githubusercontent.com/spMohanty/PlantVillage-Dataset/master/generatedforpaper/plantvillage.jpg" alt="PlantVillage Dataset Sample" width="600"/>

The PlantVillage Dataset is an open access repository of 54,306 images of healthy and diseased plant leaves, collected to advance research in automated plant disease diagnosis. It covers 14 crop species and 26 diseases.

This dataset was introduced in the paper **"Using Deep Learning for Image-Based Plant Disease Detection"** by Mohanty et al. (2016).

Quick Start

The dataset comes with pre-defined 80/20 train/test splits that preserve the leaf grouping logic (ensuring images of the same leaf do not appear in both sets).

python
from datasets import load_dataset

# Load the default configuration (color images)
# This automatically downloads the train and test splits.
dataset = load_dataset("mohanty/PlantVillage", "color")

print(dataset)
# DatasetDict({
#     train: Dataset({ features: [...], num_rows: 43596 }),
#     test: Dataset({ features: [...], num_rows: 10709 })
# })

Dataset Configurations

You can choose from three configurations depending on your needs:

ConfigurationDescriptionUsage
`color`Original RGB images (Default)load_dataset("mohanty/PlantVillage", "color")
`grayscale`Grayscale versionsload_dataset("mohanty/PlantVillage", "grayscale")
`segmented`Background removed, leaf segmentedload_dataset("mohanty/PlantVillage", "segmented")

Advanced: Custom Splitting

Note: The dataset already includes a standard train/test split (as shown in Quick Start), which is recommended for benchmarking. The instructions below are only for advanced users who require custom cross-validation folds.

If you require a different split ratio or cross-validation scheme, you must strictly respect the leaf_id to prevent data leakage. Multiple images often capture the same physical leaf; separating them across train/test sets will bias your evaluation.

Here is a complete example of how to reshuffle and split the dataset 80/20:

python
import numpy as np
from datasets import load_dataset, concatenate_datasets

# 1. Load the full dataset (combining default train/test splits)
dataset = load_dataset("mohanty/PlantVillage", "color")
full_dataset = concatenate_datasets([dataset["train"], dataset["test"]])

# 2. Get unique leaf IDs representing physical leaves
all_leaf_ids = np.unique(full_dataset["leaf_id"])

# 3. Shuffle and Split Leaf IDs (e.g., 80% train, 20% test)
np.random.seed(42)
np.random.shuffle(all_leaf_ids)

split_ratio = 0.8
split_idx = int(len(all_leaf_ids) * split_ratio)

train_leaf_ids = set(all_leaf_ids[:split_idx])
test_leaf_ids = set(all_leaf_ids[split_idx:])

# 4. Filter the full dataset to create new splits
# This ensures all images of a specific leaf are exclusively in one split
custom_train = full_dataset.filter(lambda x: x["leaf_id"] in train_leaf_ids)
custom_test = full_dataset.filter(lambda x: x["leaf_id"] in test_leaf_ids)

print(f"Custom Train Size: {len(custom_train)}")
print(f"Custom Test Size: {len(custom_test)}")

Dataset Features

  • `image`: PIL Image.
  • `label`: Class label (e.g., Apple___Black_rot).
  • `leaf_id`: Unique identifier for the physical leaf.
  • `crop`: Crop name.
  • `disease`: Disease name.

Citation

bibtex
@article{Mohanty_Hughes_Salathé_2016,
    title   = {Using deep learning for image-based plant disease detection},
    volume  = {7},
    DOI     = {10.3389/fpls.2016.01419},
    journal = {Frontiers in Plant Science},
    author  = {Mohanty, Sharada P. and Hughes, David P. and Salathé, Marcel},
    year    = {2016},
    month   = {Sep}
} 

Author

Sharada Mohanty <sharada.mohanty@epfl.ch> Marcel Salathé <Marcel.Salathe@epfl.ch> Digital Epidemiology Lab, EPFL