首页
/ Ultralytics YOLO 在 Global Wheat Head 数据集上的训练实战:基于 GWHD 的单类别田间目标检测

Ultralytics YOLO 在 Global Wheat Head 数据集上的训练实战:基于 GWHD 的单类别田间目标检测

2026-09-04 19:57:43作者:郦嵘贵Just

本文围绕 Ultralytics 官方检测数据集文档 Global Wheat Head Dataset 展开,系统讲解 GWHD(Global Wheat Head Dataset)小麦穗头数据集的构成、划分逻辑与 GlobalWheat2020.yaml 配置文件的逐字段含义,并结合 check_det_dataset 源码 剖析“首次训练自动下载”的底层机制,最终给出可复制运行的 Python/CLI 训练方案,帮助你把 YOLO26 落地到农业表型分析这一实际场景。

1. 数据集概述

Global Wheat Head Dataset(GWHD)是一个单类别目标检测数据集,用于在户外田间图像中检测小麦穗头(wheat heads)——小麦植株上结籽的穗部。它由来自 7 个国家的 9 家研究机构合作构建,图像采集自欧洲、北美、亚洲和大洋洲的多个种植区,目的是让模型在不同环境之间具备强泛化能力。

数据集共包含 5,446 张 带标注的高分辨率 RGB 田间图像,划分为三个子集:

划分 (Split) 图像数量 来源区域
Train(训练) 3,422 欧洲(法国、英国、瑞士)、北美(加拿大)
Validation(验证) 748 瑞士(ETH Zürich,ethz_1 子集)
Test(测试) 1,276 澳大利亚、日本、中国

精确的小麦穗头检测是估计穗头密度、穗部大小和产量潜力的基础,是植物表型分析与作物管理中的关键中间任务。

2. 关键特性

  • 真实田间图像:覆盖小麦穗头外观、光照条件和生育期上的自然变化,而非受控环境下的拍摄结果。
  • 跨区域构建:由 7 个国家、9 家研究机构协作完成,横跨欧洲、北美、亚洲与澳大利亚种植区,天然支持跨环境泛化评估。
  • 开箱即用的单类别标注:全部标注为 wheat_head 一个类别的边界框,可直接接入目标检测跟踪流水线。
  • 真正的泛化基准:测试集(澳大利亚、日本、中国)来自训练中未见过的基因型与区域,是衡量模型泛化能力的“留出集”。

注意(验证集的特殊性):验证集的 748 张图像来自 ethz_1 子集,而 ethz_1 同时也包含在训练集中。因此验证指标反映的是“域内”表现,真正衡量泛化能力的是来自澳、日、中三国的测试集。这一点在 GlobalWheat2020.yaml 的注释中也以 WARNING: train set contains ethz_1 明确标出。

3. Dataset YAML 配置详解

Ultralytics 通过 YAML 文件定义数据集的路径、类别与下载逻辑。GWHD 对应的配置文件是仓库内维护的 ultralytics/cfg/datasets/GlobalWheat2020.yaml,训练时只需传入文件名 GlobalWheat2020.yaml 即可。配置文件核心内容如下:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list
path: GlobalWheat2020 # dataset root dir
train: # train images (relative to 'path') 3422 images
  - images/arvalis_1
  - images/arvalis_2
  - images/arvalis_3
  - images/ethz_1
  - images/rres_1
  - images/inrae_1
  - images/usask_1
val: # val images (relative to 'path') 748 images (WARNING: train set contains ethz_1)
  - images/ethz_1
test: # test images (optional) 1276 images
  - images/utokyo_1
  - images/utokyo_2
  - images/nau_1
  - images/uq_1

# Classes
names:
  0: wheat_head

# Download script/URL (optional)
download: |
  from pathlib import Path
  from ultralytics.utils.downloads import download
  # 下载官方图像包(Zenodo 上的 Codalab 官方压缩包)与 YOLO 格式标签包
  dir = Path(yaml["path"])  # dataset root dir
  urls = [ <官方图像包下载地址>, <YOLO 标签包下载地址> ]
  download(urls, dir=dir)
  # 创建 annotations / images / labels 目录
  # 将 11 个子集(arvalis_1..3、ethz_1、rres_1、inrae_1、usask_1、
  #   utokyo_1/2、nau_1、uq_1)移入 images/,对应 .json 注释移入 annotations/

上例中的两个下载 URL 为远端资源地址,完整值请直接查看仓库源文件 GlobalWheat2020.yaml

逐字段解读:

  • path: GlobalWheat2020:数据集根目录名。若该相对路径不存在,解析器会将其挂到全局数据集目录 DATASETS_DIR 下(默认即 datasets/ 所在的本地数据目录),这是“自动下载”行为的落盘位置。
  • train(7 个子集):法国 Arvalis 的 3 个子集、瑞士 ETH Zürich 的 ethz_1、英国 Rothamsted(rres_1)、法国 INRAE 的 inrae_1、加拿大萨斯喀彻温大学的 usask_1,合计 3,422 张。
  • val:仅 ethz_1(748 张),与训练集共享该子集,见第 2 节的域内说明。
  • test(4 个子集):日本东京大学的 utokyo_1/utokyo_2、中国南京农业大学的 nau_1、澳大利亚昆士兰大学的 uq_1,合计 1,276 张,用于跨环境泛化评估。
  • names: {0: wheat_head}:单类别定义,类别索引 0 对应 wheat_head。检测头输出的特征维度、损失计算与结果可视化(Results.boxes 上的 cls → 类别名映射)均依赖这一映射。
  • download:内嵌的 Python 下载脚本,负责拉取图像包与标签包,并把 11 个子集目录从压缩包中重命名整理到 images/,把对应的 COCO 风格 .json 注释文件移入 annotations/

4. 自动下载机制的源码剖析

文档强调“数据集(约 7.0 GB)在首次使用时自动下载,无需手动操作”。这一行为由 ultralytics/data/utils.py 中的 check_det_dataset() 实现,完整调用链如下:

  1. 定位配置文件L566-L572):传入裸名称(如 GlobalWheat2020)时会自动补齐 .yaml 后缀并在包内 cfg/datasets/ 目录中找到 GlobalWheat2020.yaml;若传入目录则调用 find_dataset_yaml 查找其中的描述文件。
  2. 解析与校验L582-L619):YAML.load() 读取文件后,强制检查 train/val 键必须存在,names(或 nc)必须存在且类型正确——这正是 YAML 里必须写 names: {0: wheat_head} 的原因。
  3. 路径解析L623-L637):path 若为相对路径且不存在,会被重新解析为 DATASETS_DIR / GlobalWheat2020;随后 train/val/test 每个子集路径都拼接根目录并逐一 resolve()
  4. 触发自动下载L639-L663):逐一检查 val 列表中的目录是否已存在,若缺失且 autodownload=True,则取出 YAML 中的 download 字段并分三种情况执行:
    • http 开头且以 .zip 结尾 → 直接调用 safe_download 下载并解压;
    • bash 开头 → 作为 shell 脚本执行;
    • 其余情况(GWHD 属于此类)→ 作为 Python 脚本执行exec(s, {"yaml": data})L659-L660),脚本内即可引用当前解析好的 data 字典,从而拿到 yaml["path"] 作为落盘目录。执行成功后日志会打印 success (xx.xs), saved to <DATASETS_DIR>

从源码结构看,下载目录 DATASETS_DIR 可通过 settings.yaml 配置修改;若下载目录中仍找不到图像,程序会抛出 FileNotFoundError 并提示当前数据集目录位置(L647-L651),便于排查网络或磁盘问题。

此外,check_det_dataset() 末尾还会通过 check_font() 预下载可视化所需字体(L664),保证训练回调中绘制 wheat_head 边界框时不缺字体依赖。

5. 训练 YOLO26:Python 与 CLI 两种方式

在 GWHD 上训练 yolo26n 模型(100 个 epoch、图像尺寸 640)的标准用法如下。首次运行时框架会先执行第 4 节所述的自动下载流程(约 7.0 GB),之后再进入训练。

=== "Python"

from ultralytics import YOLO

# 加载预训练模型(训练推荐使用)
model = YOLO("yolo26n.pt")

# 训练模型
results = model.train(data="GlobalWheat2020.yaml", epochs=100, imgsz=640)

=== "CLI"

# 从预训练 *.pt 模型开始训练
yolo detect train data=GlobalWheat2020.yaml model=yolo26n.pt epochs=100 imgsz=640

参数要点:

  • data:数据集描述符,传文件名即可,check_det_dataset() 会自动定位到包内配置;
  • model=yolo26n.ptn 为最轻量档位的 YOLO26 检测模型,适合单类别、中小规模数据;更大模型(s/m/l/x)可参考 YOLO26 模型页
  • epochs=100:训练轮数,GWHD 仅 5,446 张图像,100 轮配合早停(patience)是常见配置;
  • imgsz=640:输入分辨率,田间小目标场景可在显存允许时适当调大以保留更多穗头细节。

完整参数列表请参考 Training 模式文档。训练完成后,可将验证/测试流程切到 valtest split 上评估,其中 test 指标(澳、日、中三国数据)才是泛化能力的真实度量。

6. 样本图像与标注形态

GWHD 的图像呈现了户外田间的真实多样性:不同拍摄角度(俯视穗层、近距单穗)、光照、生育期与背景杂草混杂。标注形态为边界框:每张图中每个可见的小麦穗头对应一个 wheat_head 框,标签文件为 YOLO 归一化格式(由下载脚本从官方 .json 注释转换而来,存放于数据集根目录的 labels/ 下,与 images/ 子集一一对应)。在检测结果可视化中,每个框上会渲染 wheat_head <置信度> 标签。

原文档附带了一张带标注示例图(多穗头田间图像 + 检测框),此处不重复引用外部图片,读者训练完成后可通过 model.val()plots 输出自行查看同类的真实标注效果。

7. 应用场景

GWHD 广泛用于训练与评估小麦穗头检测的深度学习模型,其跨区域、跨基因型、跨条件的多样性使其成为植物表型分析与作物管理领域的核心资源,具体支撑:

  • 产量估算:穗头密度 × 单穗粒数 → 田间产量潜力估计;
  • 作物健康监测:结合图像中的穗部状态评估成熟度与长势;
  • 表型组学:大规模表型数据获取,服务育种筛选;
  • 跟踪与密度统计:基于检测框可直接扩展为视频跟踪与区域计数流水线。

8. 引用与致谢

若在你的研究或开发工作中使用了 GWHD,请引用以下论文:

@article{david2020global,
 title={Global Wheat Head Detection (GWHD) Dataset: A Large and Diverse Dataset of High-Resolution RGB-Labelled Images to Develop and Benchmark Wheat Head Detection Methods},
 author={David, Etienne and Madec, Simon and Sadeghi-Tehran, Pouria and Aasen, Helge and Zheng, Bangyou and Liu, Shouyang and Kirchgessner, Norbert and Ishikawa, Goro and Nagasawa, Koichi and Badhon, Minhajul and others},
 journal={arXiv preprint arXiv:2005.02162},
 year={2020}
}

在此向参与该数据集创建与维护的 9 家研究机构致谢,感谢其为植物表型分析与作物管理研究社区提供了这一重要资源。数据集的完整说明见官方站点(见 GlobalWheat2020.yaml 头部注释中的 URL)。

9. 常见问题(FAQ)

Q1:Global Wheat Head 数据集用来做什么?

主要用于训练与开发小麦穗头检测的深度学习模型,服务于小麦表型分析与作物管理:更精确地估计穗头密度、穗部大小与整体产量潜力,并辅助评估作物健康度与成熟度,支撑高效、可持续的作物管理决策。

Q2:数据集有多少图像和类别?

单一类别 wheat_head,划分为 3,422 张训练图像、748 张验证图像、1,276 张测试图像。训练与验证数据来自欧洲与北美,测试集来自澳大利亚、日本与中国,用于评估模型对未见环境的泛化能力。

Q3:如何训练 YOLO26n?

确认 GlobalWheat2020.yaml 存在于包内(无需手动下载配置文件),然后按第 5 节的 Python 或 CLI 示例运行 data="GlobalWheat2020.yaml" 训练即可,全部参数见 Training 文档

Q4:如何下载该数据集?

无需手动下载:首次以 data="GlobalWheat2020.yaml" 训练时,check_det_dataset() 检测到本地缺失会自动执行 YAML 中的 download 脚本,从远端拉取约 7.0 GB 的图像包与标签包并解压到本地数据集目录(机制详见第 4 节源码剖析)。更多检测数据集可浏览 Detection 数据集总览

Q5:配置文件在哪里?

GlobalWheat2020.yaml 随仓库分发,位于 ultralytics/cfg/datasets/GlobalWheat2020.yaml,包含数据集根路径、各 split 子集列表、单类别定义与自动下载脚本,是模型训练在 Ultralytics YOLO 中识别该数据集的唯一入口。

Q6:为什么穗头检测对作物管理重要?

穗头密度与大小是评估作物健康、成熟度与产量潜力的直接指标。基于 GWHD 训练的模型(参见 YOLO 模型总览)可规模化采集这些表型,帮助农研人员监控作物状态、优化水肥等资源投入,提升产量与资源利用效率,支撑可持续农业与粮食安全。

10. 小结

  • GWHD 是 Ultralytics 官方内置的单类别田间目标检测数据集wheat_head,5,446 张),配置入口为 GlobalWheat2020.yaml
  • 训练只需一条命令(data="GlobalWheat2020.yaml"),自动下载与目录整理由 check_det_dataset() 通过执行 YAML 内嵌 download 脚本完成;
  • 评估时务必区分验证集(域内,ethz_1 与训练集共享)与测试集(澳/日/中跨环境留出集)两类指标的不同含义。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
504
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384