4. 数据集构建与增强
在YOLO农作物病虫害识别项目中,模型精度上限往往在数据准备阶段就已经被决定。一个常见误区是:拿到田间采集的几千张图片后,直接全部投入训练,结果验证集mAP虚高、上线后对逆光叶片或病斑小目标几乎失效。问题通常不在网络结构,而在数据划分与增强策略。本节围绕三件事展开:如何科学划分训练/验证/测试集,如何针对病虫害图像设计几何与色彩增强,以及如何用Mosaic与MixUp提升小目标与复杂背景下的鲁棒性。
一、训练/验证/测试集的划分原则
三份数据承担不同职责:训练集用于更新权重;验证集用于调参、早停和选择最佳权重;测试集只在最终评估时使用一次,代表“未来真实数据”。划分时最容易踩的坑是数据泄漏——同一块田、同一株作物、同一拍摄时段的多张连拍图被随机分到训练集和验证集,模型会“记住”背景而非学习病斑特征,导致验证指标虚高。
因此划分应以“采集单元”为粒度,而不是以单张图片为粒度。推荐做法是:先按田块或植株编号分组,再以组为单位做分层抽样,保证各子集中健康、轻度、重度等类别比例接近总体分布。典型比例为训练:验证:测试 = 7:2:1 或 8:1:1;样本量少于2000张时,测试集不宜低于10%,否则评估方差过大。划分完成后应固化文件清单,避免每次训练重新随机划分造成指标不可比。
# 示例:按田块分组分层划分(示例参数,非实测结果)
import random, collections
groups = collections.defaultdict(list) # 田块ID -> 图片列表
for img, field_id in samples:
groups[field_id].append(img)
fields = list(groups)
random.seed(42); random.shuffle(fields)
n = len(fields)
train_f = fields[:int(n*0.7)]
val_f = fields[int(n*0.7):int(n*0.9)]
test_f = fields[int(n*0.9):]
# 再按类别比例微调,确保各子集病斑类别分布接近
划分后建议输出一份统计表,检查各类别在三份子集中的数量与占比是否合理,尤其关注稀有病害是否在验证/测试集中“消失”。
二、面向病虫害的几何与色彩增强
病虫害图像有其特殊性:病斑常为小目标、颜色是关键判别线索(如锈病的橙黄色、叶枯的灰褐色),而田间光照变化剧烈。增强策略必须“保语义、增变化”,不能破坏判别特征。
几何增强方面,水平翻转、随机缩放(0.5~1.5倍)、随机平移是安全的基础操作;小角度旋转(±15°)可模拟拍摄姿态差异。但垂直翻转需谨慎——叶片正反面纹理差异大,垂直翻转可能生成自然界不存在的样本。裁剪(Random Crop)要保证裁剪后仍保留至少一个完整标注框,否则会产生“无目标”的负样本噪声。
色彩增强方面,HSV空间的色调扰动幅度应小于亮度与饱和度扰动,因为色调直接对应病斑颜色类别。建议色相偏移控制在±10°以内,饱和度与明度可在0.7~1.3倍间随机;同时加入随机亮度对比度扰动模拟阴天/晴天。避免使用过强的色彩抖动,否则会把锈病的橙黄色“洗”成健康叶的绿色,造成标签与外观矛盾。
三、Mosaic与MixUp实战
Mosaic将4张图像拼接为一张,迫使模型在单张输入中同时学习多尺度、多背景的目标,对小病斑检测提升明显,同时变相扩大了batch内的样本多样性。MixUp则对两张图像及其标签做线性加权混合,生成“半透明叠加”样本,有助于提升模型对遮挡和模糊的鲁棒性。二者在YOLO训练中通常配合使用:Mosaic提供空间多样性,MixUp提供外观平滑性。
实现时需注意标签同步变换。以Mosaic为例,拼接后每张子图的标注框坐标要按其在画布中的偏移量平移,超出边界的框需裁剪或丢弃;MixUp则需按混合系数λ对两组框做加权,实践中常简化为“保留主图标签、按比例保留副图标签”,避免框重叠混乱。以下为Mosaic核心逻辑示意:
# Mosaic 拼接核心步骤(示意)
canvas = np.zeros((2*S, 2*S, 3))
# 随机中心点 (cx, cy),四张图分别放入四个象限
place(img1, 0, 0, cx, cy) # 左上
place(img2, cx, 0, 2*S, cy) # 右上
place(img3, 0, cy, cx, 2*S) # 左下
place(img4, cx, cy, 2*S, 2*S) # 右下
# 每张子图的框:x += 偏移x, y += 偏移y,再裁剪到画布内
boxes = clip_and_shift(boxes_list, offsets)
参数设置上,Mosaic概率建议0.5~0.8,训练后期(最后10%~20% epoch)可关闭Mosaic,让模型在真实单图分布上收敛;MixUp概率建议0.1~0.3,过高会使小目标框在混合后难以辨认。两者叠加时总增强强度要控制,避免“过度增强”导致训练损失震荡不降。
四、结果观察与判断依据
增强策略是否有效,不能只看训练损失下降。建议在验证集上对比“无增强基线”与“增强方案”的mAP@0.5及小目标(面积小于32×32像素)召回率;同时观察训练损失曲线是否平稳、验证损失是否出现过拟合拐点。若加入Mosaic后小目标召回明显提升但大目标精度下降,说明拼接导致大目标被裁切过多,应降低Mosaic概率或调整拼接中心点范围。若MixUp后损失长期震荡,应下调其概率或改用“仅对同类样本混合”的约束。最终以测试集一次性评估作为交付依据,并记录增强参数配置,保证实验可复现。