CoolFace
Datasetpublic

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.

sourceHugging Facecc-by-nc-4.0updated 6d agoView on Hugging Face
0likes268downloads
Dataset Card

<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

MetricValue
Total source images451
Segmentation masks451 (1:1 with images)
Images with instance crops309
Images without instance crops142
Total plant instances4,041
L1 clusters20 (A – T)
L2 clusters121
Instances per image with instances (min / avg / max)1 / 13.08 / 16
Instance labels14 (10 crops, 4 weeds)
Segmentation classes present in masks18 (of 29 defined in class_map.json)

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.

ClassColorArea (px)% of foregroundImages
Crop \Wheat#55f2c3281,167,28335.56%75
Crop \Barley#5f8c31242,783,76430.71%45
Weed \Weed (generic)#9ab23696,086,14412.15%355
Crop \Lentil#55f26f37,830,9354.79%33
Crop \Oat#318c4c37,017,6064.68%42
Crop \Peas#55f29927,364,9433.46%44
Crop \Canola#8ff25523,334,0352.95%34
Crop \Flax#318c3413,056,7461.65%53
Weed \Grass#f2494c12,269,8681.55%68
Crop \Soybean#318c659,433,8791.19%51
Crop \Corn#65f2558,096,3371.02%54
Crop \Chickpea#468c311,166,9510.15%20
Weed \Broadleaf#b2365b913,8620.12%16
Weed \Dandelion#b2364438,0550.01%2
Weed \Palmer Amaranth#b2853637,4330.01%1
Weed \Morning Glory#f2a54926,362<0.01%2
Weed \Redroot Pigweed#b29d3613,446<0.01%1
Weed \Lamb's-quarters#f265497,472<0.01%2

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.

LabelInstances
Crop \Wheat1,104
Crop \Oat574
Crop \Barley557
Crop \Peas497
Crop \Lentil457
Crop \Canola277
Crop \Corn250
Crop \Soybean226
Weed \Grass44
Crop \Flax27
Weed \Broadleaf15
Crop \Chickpea7
Weed \Dandelion3
Weed \Morning Glory3

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.

json
{
  "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

ModeEntry pointUse case
Image2Imageimage2image.json / images/Full images grouped by L2 cluster with imaging-metadata attributes
Segmentationmasks/ + class_map.jsonDense pixel-level semantic segmentation, 1:1 with images/
Plant2Imageplant2image.jsonMaps each source image to its instance crops
Plant2Plantplant2plant.jsonMaps each instance crop to its plant species label
json
// 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.