SkillAgentSearch skills...

AgML

AgML is a centralized framework for agricultural machine learning. AgML provides access to public agricultural datasets for common agricultural deep learning tasks, with standard benchmarks and pretrained models, as well the ability to generate synthetic data and annotations.

Install / Use

/learn @Project-AgML/AgML

README

<p align="center"> <img src="docs/assets/agml-logo.png" alt="agml logo" width="400" height="400"> </p>

👨🏿‍💻👩🏽‍💻🌈🪴 Want to join the AI Institute for Food Systems team and help lead AgML development? 🪴🌈👩🏼‍💻👨🏻‍💻

We're looking to hire a postdoc with both Python library development and ML experience. Send your resume and GitHub profile link to jmearles@ucdavis.edu!


Overview

AgML is a comprehensive library for agricultural machine learning. Currently, AgML provides access to a wealth of public agricultural datasets for common agricultural deep learning tasks. In the future, AgML will provide ag-specific ML functionality related to data, training, and evaluation. Here's a conceptual diagram of the overall framework.

<p align="center"> <img src="docs/assets/agml-framework.png" alt="agml framework" width="350" height="291"> </p>

AgML supports both the TensorFlow and PyTorch machine learning frameworks.

Installation

To install the latest release of AgML, run the following command:

pip install agml

NOTE: Some features of AgML, such as synthetic data generation, require GUI applications. When running AgML through Windows Subsystem for Linux (WSL), it may be necessary to configure your WSL environment to utilize these features. Please follow the Microsoft documentation to install all necessary prerequisites and update WSL. The latest version of WSL includes built-in support for running Linux GUI applications.

Quick Start

AgML is designed for easy usage of agricultural data in a variety of formats. You can start off by using the AgMLDataLoader to download and load a dataset into a container:

import agml

loader = agml.data.AgMLDataLoader('apple_flower_segmentation')

You can then use the in-built processing methods to get the loader ready for your training and evaluation pipelines. This includes, but is not limited to, batching data, shuffling data, splitting data into training, validation, and test sets, and applying transforms.

import albumentations as A

# Batch the dataset into collections of 8 pieces of data:
loader.batch(8)

# Shuffle the data:
loader.shuffle()

# Apply transforms to the input images and output annotation masks:
loader.mask_to_channel_basis()
loader.transform(
    transform = A.RandomContrast(),
    dual_transform = A.Compose([A.RandomRotate90()])
)

# Split the data into train/val/test sets.
loader.split(train = 0.8, val = 0.1, test = 0.1)

The split datasets can be accessed using loader.train_data, loader.val_data, and loader.test_data. Any further processing applied to the main loader will be applied to the split datasets, until the split attributes are accessed, at which point you need to apply processing independently to each of the loaders. You can also turn toggle processing on and off using the loader.eval(), loader.reset_preprocessing(), and loader.disable_preprocessing() methods.

You can visualize data using the agml.viz module, which supports multiple different types of visualization for different data types:

# Disable processing and batching for the test data:
test_ds = loader.test_data
test_ds.batch(None)
test_ds.reset_prepreprocessing()

# Visualize the image and mask side-by-side:
agml.viz.visualize_image_and_mask(test_ds[0])

# Visualize the mask overlaid onto the image:
agml.viz.visualize_overlaid_masks(test_ds[0])

AgML supports both the TensorFlow and PyTorch libraries as backends, and provides functionality to export your loaders to native TensorFlow and PyTorch formats when you want to use them in a training pipeline. This includes both exporting the AgMLDataLoader to a tf.data.Dataset or torch.utils.data.DataLoader, but also internally converting data within the AgMLDataLoader itself, enabling access to its core functionality.

# Export the loader as a `tf.data.Dataset`:
train_ds = loader.train_data.export_tensorflow()

# Convert to PyTorch tensors without exporting.
train_ds = loader.train_data
train_ds.as_torch_dataset()

You're now ready to use AgML for training your own models! Luckily, AgML comes with a training module that enables quick-start training of standard deep learning models on agricultural datasets. Training a grape detection model is as simple as the following code:

import agml
import agml.models

import albumentations as A

loader = agml.data.AgMLDataLoader('grape_detection_californiaday')
loader.split(train = 0.8, val = 0.1, test = 0.1)
processor = agml.models.preprocessing.EfficientDetPreprocessor(
    image_size = 512, augmentation = [A.HorizontalFlip(p=0.5)]
)
loader.transform(processor)

model = agml.models.DetectionModel(num_classes=loader.num_classes)

model.run_training(loader)

Public Dataset Listing

AgML contains a wide variety of public datasets from various locations across the world:

AgML Dataset World Map

The following is a comprehensive list of all datasets available in AgML. For more information, you can use agml.data.public_data_sources(...) with various filters to filter datasets according to your desired specification.

| Dataset | Task | Number of Images | | :--- | ---: | ---: | bean_disease_uganda | Image Classification | 1295 | carrot_weeds_germany | Semantic Segmentation | 60 | plant_seedlings_aarhus | Image Classification | 5539 | soybean_weed_uav_brazil | Image Classification | 15336 | sugarcane_damage_usa | Image Classification | 153 | crop_weeds_greece | Image Classification | 508 | sugarbeet_weed_segmentation | Semantic Segmentation | 1931 | rangeland_weeds_australia | Image Classification | 17509 | fruit_detection_worldwide | Object Detection | 565 | leaf_counting_denmark | Image Classification | 9372 | apple_detection_usa | Object Detection | 2290 | mango_detection_australia | Object Detection | 1730 | apple_flower_segmentation | Semantic Segmentation | 148 | apple_segmentation_minnesota | Semantic Segmentation | 670 | rice_seedling_segmentation | Semantic Segmentation | 224 | plant_village_classification | Image Classification | 55448 | autonomous_greenhouse_regression | Image Regression | 389 | grape_detection_syntheticday | Object Detection | 448 | grape_detection_californiaday | Object Detection | 126 | grape_detection_californianight | Object Detection | 150 | guava_disease_pakistan | Image Classification | 306 | apple_detection_spain | Object Detection | 967 | apple_detection_drone_brazil | Object Detection | 689 | plant_doc_classification | Image Classification | 2598 | plant_doc_detection | Object Detection | 2598 | wheat_head_counting | Object Detection | 6512 | peachpear_flower_segmentation | Semantic Segmentation | 42 | red_grapes_and_leaves_segmentation | Semantic Segmentation | 258 | white_grapes_and_leaves_segmentation | Semantic Segmentation | 273 | ghai_romaine_detection | Object Detection | 500 | [ghai_green_cabbage_detection](https://github.com/Project-AgM

View on GitHub
GitHub Stars271
CategoryEducation
Updated13h ago
Forks41

Languages

Python

Security Score

100/100

Audited on Mar 29, 2026

No findings