玉米雄穗目标检测数据集 | 玉米雄穗 作物表型 智慧农业 无人机巡检 小样本检测9142期
数据集概述
本数据集专注于无人机航拍视角下的玉米雄穗(tassel)检测 ,服务于农业无人机巡检、作物表型分析及智能育种。数据涵盖田间玉米雄穗图像,适配雄穗计数、抽雄期监测及生长评估等应用。

数据集核心信息
| 数据要素 | 详细说明 |
|---|---|
| 类别 | 共 1 类:玉米雄穗(tas) |
| 数量 | 约 250 张图像 |
| 格式 | 图像为 JPG/PNG;标签为 YOLO 格式的 txt 文件(归一化坐标),含 data.yaml 配置文件 |
| 数据划分 | 建议按 8:2 划分,训练集 200 张,验证集 50 张 |
| 应用价值 | 1. 作物表型 :支撑玉米雄穗的自动计数与抽雄期监测,辅助表型分析。 2. 智能育种 :为育种材料雄穗性状评估提供量化数据。 3. 农业巡检 :为无人机巡检系统提供雄穗识别能力,支持生长监测。 4. 算法研发:为小样本目标检测、数据增强策略研究提供真实场景数据。 |

完整类别列表(共1类)
| 序号 | 类别名称 | 英文标签 | 说明 |
|---|---|---|---|
| 1 | 玉米雄穗 | tas | 玉米顶部的雄花序 |

数据三要素解析
类别与目标覆盖
- 数据集定义 1 个核心类别:玉米雄穗(tas),聚焦单一目标,便于快速部署与高精度检测。
- 雄穗位于玉米植株顶部,在航拍图像中呈羽状或分枝状结构,与叶片、茎秆有一定的视觉区分度。
- 单类别设计降低了模型复杂度,有利于在边缘设备上实现高效推理。
数据规模与挑战
- 图像总量约 250 张,规模较小,直接训练易导致过拟合 或泛化能力差。
- 实际拍摄图像,已人工标注,数据质量可靠。
- 强烈建议 :采用数据增强 (旋转、翻转、亮度调整、Mosaic、copy_paste等)扩展至 1000+ 张,提升模型泛化能力。
格式与配套资源
- 采用通用 YOLO 格式(txt),每张图像对应一个同名标签文件,包含类别 ID 与归一化边界框坐标。
- 提供
data.yaml配置文件,可直接用于 YOLOv5、YOLOv8 等模型训练。 - 附赠数据划分脚本 、训练代码 、推理与评估代码,用户可直接运行。
知识普及:玉米雄穗检测的技术要点
- 小样本学习策略:数据量小(250张)时,必须使用强数据增强(Mosaic、MixUp、copy_paste、HSV调整等)来扩充有效样本量,降低过拟合风险。
- copy_paste增强 :YOLOv8 内置的
copy_paste增强可将标注的雄穗自动复制粘贴到其他图像中,极大增加正样本多样性,尤其适合小目标检测。 - 小目标检测 :雄穗在航拍图像中可能尺寸较小,建议使用更高分辨率输入(如
imgsz=1280)或更大的模型(如 YOLOv8m/l)。 - 关注召回率:农业计数场景中,漏检(低召回)比误检影响更大,评估时应重点关注 Recall 指标。
- 主动学习迭代:使用当前模型预测未标注图像,筛选出"疑似雄穗"(置信度 0.3-0.6)的样本,人工标注后加入训练集,迭代提升模型性能。
- 应用闭环:检测结果可结合无人机位置信息,生成雄穗分布图,辅助育种筛选与农艺管理。
快速开始(代码示例)
1. 准备配置文件 (data.yaml)
yaml
train: ../datasets/corn_tas/images/train
val: ../datasets/corn_tas/images/val
nc: 1
names: ['tas']
2. 数据划分脚本 (split_data.py)
python
import os
import random
import shutil
from pathlib import Path
def split_dataset(image_dir, label_dir, output_dir, train_ratio=0.8):
os.makedirs(f"{output_dir}/images/train", exist_ok=True)
os.makedirs(f"{output_dir}/images/val", exist_ok=True)
os.makedirs(f"{output_dir}/labels/train", exist_ok=True)
os.makedirs(f"{output_dir}/labels/val", exist_ok=True)
images = [f for f in os.listdir(image_dir) if f.endswith(('.jpg', '.png', '.jpeg'))]
random.seed(42)
random.shuffle(images)
split_idx = int(len(images) * train_ratio)
train_files = images[:split_idx]
val_files = images[split_idx:]
for img_file in train_files:
shutil.copy(f"{image_dir}/{img_file}", f"{output_dir}/images/train/{img_file}")
txt_file = Path(img_file).with_suffix('.txt')
if os.path.exists(f"{label_dir}/{txt_file}"):
shutil.copy(f"{label_dir}/{txt_file}", f"{output_dir}/labels/train/{txt_file}")
else:
open(f"{output_dir}/labels/train/{txt_file}", 'w').close()
for img_file in val_files:
shutil.copy(f"{image_dir}/{img_file}", f"{output_dir}/images/val/{img_file}")
txt_file = Path(img_file).with_suffix('.txt')
if os.path.exists(f"{label_dir}/{txt_file}"):
shutil.copy(f"{label_dir}/{txt_file}", f"{output_dir}/labels/val/{txt_file}")
else:
open(f"{output_dir}/labels/val/{txt_file}", 'w').close()
print(f"✅ 划分完成!训练集: {len(train_files)} 张,验证集: {len(val_files)} 张")
split_dataset(
image_dir='your_data/images',
label_dir='your_data/labels',
output_dir='datasets/corn_tas'
)
3. 训练脚本 (train.py)
python
from ultralytics import YOLO
import torch
model = YOLO('yolov8m.pt')
results = model.train(
data='datasets/corn_tas/data.yaml',
epochs=300,
imgsz=640,
batch=16,
name='corn_tas_yolov8m',
device='cuda' if torch.cuda.is_available() else 'cpu',
workers=4,
optimizer='AdamW',
lr0=0.001,
weight_decay=0.0005,
patience=50,
project='runs/corn',
amp=True,
close_mosaic=25,
# 强数据增强
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.5,
translate=0.2,
scale=0.5,
fliplr=0.5,
mosaic=1.0,
mixup=0.5,
copy_paste=0.3,
degrees=15.0,
shear=2.0
)
4. 推理脚本 (predict.py)
python
from ultralytics import YOLO
model = YOLO('runs/corn/corn_tas_yolov8m/weights/best.pt')
results = model.predict(
source='test_field.jpg',
save=True,
conf=0.25,
iou=0.45,
project='runs/predict',
name='corn_test',
imgsz=640
)
for result in results:
boxes = result.boxes
print(f"检测到 {len(boxes)} 个雄穗")
标签
玉米雄穗 作物表型 智慧农业 无人机巡检 小样本检测 目标检测 YOLO格式 深度学习数据集 计算机视觉