lifei-123/AgriStress-500
Precision AI · AgriStress-500 A curated stress test for agricultural AI: 500 real drone images from working fields across crops, geographies, sensors, altitudes, and lighting conditions. Each image captures field conditions that challenge real-world deployment sun glare, tilted leaves, row occlusion, mixed species, rare growth stages, and edge cases underrepresented in public datasets. Use AgriStress-500 to test embeddings, segmentation models, classifiers, and VLMs before… See the full description on the dataset page: https://huggingface.co/datasets/lifei-123/AgriStress-500.
<h1 align="center">Precision AI · AgriStress-500</h1>
<p align="center"> <img src="https://img.shields.io/badge/license-CC--BY--NC--4.0-blue" alt="License"> <img src="https://img.shields.io/badge/version-1.0.2-blue" alt="Version"> </p>
A curated stress test for agricultural AI: 500 real drone images from working fields across crops, geographies, sensors, altitudes, and lighting conditions.
Each image captures field conditions that challenge real-world deployment sun glare, tilted leaves, row occlusion, mixed species, rare growth stages, and edge cases underrepresented in public datasets.
Use AgriStress-500 to test embeddings, segmentation models, classifiers, and VLMs before deployment, and identify the failure modes most likely to emerge between lab and field.
Dataset Statistics
Per-class Segmentation Area
Total pixel area painted for each class across all 451 masks. Areas are the exact pixel counts of each class color (looked up in class_map.json); % area is the share of total foreground (non-background) pixels (790,645,121 px total); images is how many masks contain the class.
Crop foreground is dominated by dense small-grain fields (wheat + barley ≈ 66% of all annotated area), while weeds — aside from the generic Weed | Weed class — occupy small, sparse regions. The Weed | Weed class is the most widespread (present in 355 masks) but is a generic, unspeciated weed label; the specific weed species below it are comparatively rare.
Instance Label Distribution
Each entry under instances/ is a per-plant crop mapped to a species label in plant2plant.json. Generic/unspeciated weeds are not emitted as labelled instances, so this taxonomy (14 labels) differs from the mask classes above.
Crops (10): Wheat, Oat, Barley, Peas, Lentil, Canola, Corn, Soybean, Flax, Chickpea Weeds (4): Grass, Broadleaf, Dandelion, Morning Glory
Directory Layout
AgriStress-500 / # repository root
├── README.md
├── class_map.json # segmentation class → RGB color map (29 classes)
├── image2image.json # Image2Image — L2 cluster metadata (121 entries)
├── plant2image.json # Plant2Image — image → instance-crop mapping (309 images)
├── plant2plant.json # Plant2Plant — instance → species label (4,041 entries)
├── images/ # 121 folders, 451 PNG source images
│ ├── A1/ …
│ └── T4/
├── masks/ # 121 folders, 451 PNG semantic-segmentation masks (1:1 with images/)
│ └── …
└── instances/ # PNG per-plant instance crops (4,041 total)
└── …142 of the 451 images carry no instance crops — no window met the sampling purity/coverage thresholds during instance generation. This is expected, not an error; those images still have a full segmentation mask.
Segmentation Masks
Every source image images/<L2>/pai-<token>.png has a pixel-aligned semantic segmentation mask at the same relative path under masks/ (451 ↔ 451, 1:1). Masks are RGB PNGs: background is black (0, 0, 0) and each foreground class is painted a fixed color. Look up a mask pixel's RGB in `class_map.json` to recover its class.
{
"classes": [
{ "id": 7, "name": "Crop | Wheat", "color": [85, 242, 195], "hex": "#55f2c3" },
"..."
],
"by_color": { "#55f2c3": "Crop | Wheat", "...": "..." }
}class_map.json defines 29 entries — 28 foreground classes (crops, weeds, stubble) plus background; 18 of them appear in this release's masks (see the per-class area table above). The instance crops under instances/ are derived from these masks.
Image Naming
All image and instance filenames use an anonymized identifier:
pai-<8-char token>.png # source image / mask
pai-<8-char token>-<N>.png # instance crop (N is 1-based, max 16)The 8-character token is alphanumeric (A–Z, a–z, 0–9); the same token refers to the same source image across images/, masks/, and instances/, so cross-references between the three stay valid. No capture timestamp, crop-type slug, camera model, or internal identifier is present anywhere in the release.
Access Modes
// plant2image.json
{ "instance_to_image": { "images/<L2>/<token>.png": ["instances/<L2>/<token>-1.png", "..."] } }
// plant2plant.json
{ "instance_labels": { "instances/<L2>/<token>-<N>.png": "<Type> | <Name>" } }License
Released under CC-BY-NC-4.0 (non-commercial). © Precision AI.
