3. 农业数据集构建与标注

目标检测模型的性能上限,很大程度上在数据集阶段就已经被决定了。农业场景的数据集构建并不是“拍一堆照片、框一堆框”这么简单,它需要围绕检测任务本身,先明确要检测什么、如何界定边界、由谁来标、按什么规则标,最后才是选择工具和公开数据。本节围绕类别定义、标注工具、标注规范和公开数据集对比四个环节展开,并给出可直接参考的实践做法。

一、类别定义:先想清楚“检测什么”

类别体系是数据集的骨架。农业检测任务常见的类别定义方式有三种:按物种(如苹果、番茄、柑橘)、按器官(如花、幼果、成熟果、病叶)、按状态(如健康、早期病斑、严重病斑)。同一张图里,如果既想检测“番茄”又想检测“病斑”,就必须明确这是两个层级的目标,不能混在一个扁平类别表里,否则标注员会在“框整颗果实”还是“框病斑区域”之间反复摇摆。

实践中建议遵循三条原则。第一,互斥性:任意一个目标实例只能属于一个类别,例如“成熟番茄”和“未成熟番茄”按颜色区分后,就不再保留一个笼统的“番茄”类。第二,可辨识性:类别差异必须在图像分辨率下肉眼可辨,若两个病害阶段在 1080p 图像上几乎无法区分,就应合并或提升采集分辨率。第三,任务相关性:只保留对下游决策有用的类别,例如采摘机器人只需要“可采摘果实”,不必细分十个品种。

一个可参考的示例类别表如下(示例,非实测数据):

类别 ID类别名定义要点典型最小框尺寸
0成熟番茄果面红色占比≥60%,可见轮廓完整约 24×24 像素
1未成熟番茄果面以青绿色为主,未转色约 24×24 像素
2病果果面存在明显病斑或腐烂区域约 32×32 像素
3叶片病斑叶片上独立可辨的病斑区域约 16×16 像素

最小框尺寸的设定非常关键。它直接决定了标注时“多小的目标才标”,也影响后续模型输入分辨率的选择。若最小框为 16 像素,而训练时把图像缩放到 640×640,则原图中 16 像素的目标在缩放后可能只剩几个像素,模型难以学习,这时就需要提高采集分辨率或采用切图训练策略。

二、标注工具:按任务形态选工具

目标检测最常用的是矩形框标注,工具选择主要看三点:是否支持团队协作与任务分配、是否支持导出 COCO/YOLO/VOC 等主流格式、是否支持预标注与审核流程。常见选择包括 LabelImg(轻量、单机、适合小规模)、CVAT(支持视频、多人协作、审核流)、Label Studio(可配置多种标注类型)、Roboflow(在线协作与增强一体化)。

以 YOLO 格式为例,每张图对应一个同名 txt 文件,每行一个目标,格式为:

类别ID 中心x 中心y 宽 高
0 0.512 0.437 0.086 0.094
1 0.301 0.622 0.071 0.083

其中坐标均为归一化值,即除以图像宽高后的比例,取值范围 0~1。这一点必须在标注规范中写清楚,因为不同工具默认导出格式不同,COCO 使用绝对像素坐标的 [x_min, y_min, w, h],VOC 使用 [x_min, y_min, x_max, y_max],混用会导致训练时框全部错位。建议在项目开始时固定一种中间格式,转换脚本单独维护并做抽样校验。

三、标注规范:把“凭感觉”变成“可判定”

标注规范的本质是把模糊判断转成可执行的判定条件。一份可用的规范至少应覆盖:框的贴合程度(紧贴目标外轮廓,不留明显空白,也不切掉目标边缘)、遮挡处理(遮挡超过约 50% 不标,遮挡 20%~50% 按可见部分紧贴标注并在备注中记录)、截断处理(目标在图像边缘被截断且可见面积足够时标注,框到图像边界为止)、密集目标处理(相邻果实框允许少量重叠,但不得把两个目标框成一个)、以及难例标记(模糊、过曝、严重遮挡的目标标记为 difficult,训练时可选择忽略)。

规范落地还需要一致性校验。推荐做法是:先由一名标注员标 50 张作为“黄金集”,再由第二人独立复标,计算两者的框 IoU 与类别一致率。若平均 IoU 低于 0.75 或类别一致率低于 90%,说明规范存在歧义,应先修订规范再批量标注,而不是直接扩大标注量。批量标注过程中按 10% 比例抽检,发现系统性偏差(例如某标注员习惯把框画大一圈)时及时返工。

标注规范应配 5~10 张“正例/反例”示意图,例如“正确紧贴”“框过大”“漏标遮挡目标”“把两个果实框成一个”,这比纯文字描述更能统一标注员的理解。

四、公开数据集对比:能用但要看清边界

农业公开数据集可以显著降低冷启动成本,但必须看清其采集条件与自身任务的匹配度。PlantVillage 是经典的叶片病害分类数据集,以受控背景下的单叶图像为主,适合做病害分类与预训练特征学习,但它不是目标检测数据集,图像中通常只有一片叶子居中,缺少真实田间场景的多目标、遮挡与复杂背景,直接用于田间检测会存在明显的域差异。AgriNet 一类农业图像数据集覆盖面更广,包含多种作物与场景,可用于预训练或类别扩展,但使用前仍需核对类别定义、标注格式与许可协议。

更实际的做法是“公开数据预训练 + 自有数据微调”:先用公开数据训练骨干网络或做初始化,再用符合本地作物、本地光照与本地相机条件的自有标注数据微调。下表给出对比维度(示例性归纳,具体以各数据集官方说明为准):

对比维度PlantVillageAgriNet 类综合数据集自建田间数据集
主要任务叶片病害分类分类/检测等多任务按项目定制检测
场景真实性受控背景为主较多样与部署场景一致
标注形式图像级标签视子集而定矩形框/多边形
主要用途预训练、分类基线预训练、类别扩展微调与最终评估

下面的图示把本节的关键关系串起来:从类别定义出发,经采集与标注规范约束,进入工具标注与一致性校验,最终形成可训练数据集,并标明公开数据在其中的位置——它主要作用于预训练环节,而最终评估必须依赖与部署场景一致的自建数据。

农业检测数据集构建主线与公开数据定位 类别定义 互斥·可辨·相关 图像采集 多光照·多角度·多遮挡 标注规范 贴合·遮挡·截断·难例 工具标注 CVAT / LabelImg / LS 一致性校验 IoU≥0.75 · 一致率≥90% 格式导出 YOLO / COCO / VOC 可训练数据集 划分 train/val/test 规范歧义或系统性偏差 → 修订规范并返工 公开数据集:预训练与基线 PlantVillage:叶片病害分类,受控背景,非检测标注 AgriNet 类:多作物多场景,可做预训练与类别扩展 注意:核对类别定义、标注格式与许可协议 自建数据:微调与最终评估 与部署相机、光照、作物品种一致 测试集独立划分,不参与训练与调参 公开数据不能替代本地测试集 预训练→微调

五、构建闭环中的几个易错点

第一,采集与类别脱节。先定类别再采集,能避免“拍完才发现某类样本极少”。建议按类别设定最低样本量,例如每类不少于 300 个实例,稀有类通过定向补采或合理的数据增强补足,但增强不能替代真实样本的多样性。

第二,训练集与测试集同源泄漏。同一植株、同一时间段连拍的多张图若被随机分到训练集和测试集,测试指标会虚高。应按“地块/植株/采集批次”为单位划分,而不是按单张图像随机划分。

第三,忽略负样本。田间图像中大量背景(土壤、支架、天空、杂草)不含目标,适当加入纯背景图作为负样本,可以降低误检率。负样本同样需要经过同一套采集与筛选流程。

第四,标注版本管理。规范修订后,旧标注需要按新规范回溯检查。建议为数据集打版本号(如 v1.0、v1.1),记录每次修订的类别变更、返工范围与样本量变化,使训练结果可追溯。

公开数据集的使用必须遵守其许可协议,部分数据集仅限研究用途。将公开数据与自建数据混合训练时,应在数据清单中标注来源,避免评估时把公开数据混入测试集,导致指标无法反映真实部署效果。

把以上环节串起来看,数据集构建的产出不只是一堆图片和标签文件,而是一套可复现的资产:明确的类别表、成文的标注规范、经过一致性校验的标注结果、固定格式的导出文件,以及划分清晰的训练/验证/测试集。这套资产的质量,直接决定了后续模型训练与评估结果是否可信。