4. 农业视觉数据集清洗与异常检测
采集回来的农业图像数据几乎不可能直接用于训练。田间环境的光照剧烈变化、相机抖动、植株遮挡、人工标注疏漏,都会让数据集中混入各类缺陷样本。如果这些样本不加以处理,模型会把模糊当作特征、把过曝当作类别线索,最终在真实场景中表现失常。本节围绕“识别缺陷—筛查异常—设计清洗流程—验证效果”这条主线展开,重点讲清楚每一步实际怎么做、看什么指标、如何判断。
一、常见数据缺陷的类型与成因
农业视觉数据集的缺陷大致可分为六类,每类的成因和危害不同,处理策略也不同:
- 模糊:多由相机抖动、对焦失败或运动目标(如风吹叶片、昆虫)造成。模糊图像丢失纹理细节,病斑边缘、虫体轮廓等关键特征被抹平。
- 过曝:晴天正午强光直射或反光膜反射,导致叶片高光区域像素值饱和(接近255),颜色和纹理信息完全丢失。
- 欠曝:清晨、傍晚或树冠阴影下拍摄,图像整体偏暗,暗部细节压缩在低灰度区间,信噪比低。
- 重复:连拍、视频抽帧或数据合并时未去重,同一场景多张近似图像进入训练集,造成类别分布虚高和过拟合。
- 错误标签:标注人员将相似病害混淆(如将早疫病标为晚疫病)、框选偏移或漏标,属于最隐蔽也最危险的缺陷。
- 背景干扰:地膜、支架、人影、其他作物大量进入画面,模型可能学到与目标无关的背景相关性。
这六类缺陷中,前五类可以通过图像质量指标和统计方法批量筛查,错误标签则需要结合嵌入向量和人工复核。下面这张图展示了从原始数据到清洁数据集的整体处理链路,以及各环节对应的检测手段。
二、基于统计与可视化的异常筛查
图像质量指标筛查是最经济的第一道关卡。常用指标包括:拉普拉斯方差(衡量清晰度,值越低越模糊)、平均亮度与亮度标准差(判断过曝/欠曝)、直方图分布形态(双峰、截断等异常)。以拉普拉斯方差为例,对灰度图做3×3拉普拉斯卷积后计算方差,农业田间图像的经验阈值通常在50~150之间,低于50大概率模糊,高于300可能是纹理过密或噪声过大。这个阈值必须按作物类型和拍摄设备标定,不能照搬。
亮度方面,可以统计像素值低于10和高于245的比例。若高亮饱和像素占比超过15%,基本可判定过曝;若暗部像素占比超过40%且平均亮度低于60,则考虑欠曝。把这些指标批量计算后画成散点图或箱线图,异常样本会自然“浮”出来,比逐张翻看高效得多。
嵌入向量离群检测针对的是语义层面的异常。做法是用预训练CNN(如ResNet-50)提取每张图的特征向量,再用PCA降到2~3维做t-SNE可视化。正常样本会聚成若干簇,而错误标签的样本往往“挂”在别的簇边缘,背景干扰严重的样本则远离主簇。定量上可计算每个样本到其k近邻的平均距离,距离显著偏大的即为离群点。需要注意,离群不等于错误——稀有病害、特殊视角也可能是离群点,因此离群检测的输出应作为人工复核的候选清单,而不是直接删除依据。
三、清洗流程设计与前后对比
一个可落地的清洗流程应当分阶段、可回溯。建议按以下顺序执行:
- 质量粗筛:批量计算清晰度、亮度、对比度指标,按标定阈值标记可疑样本,输出筛查报告。
- 去重:用感知哈希(pHash)计算图像指纹,汉明距离小于阈值的判为重复,每组只保留质量最高的一张。
- 嵌入离群筛查:提取特征、降维可视化、计算k近邻距离,生成离群候选清单。
- 人工复核:对离群候选和标签存疑样本逐张确认,修正标签或剔除。
- 清洗前后对比验证:统计各类缺陷数量变化、类别分布变化,并用同一模型在清洗前后数据上训练,对比验证集指标。
以一个假设的番茄病害数据集为例说明对比方法:原始数据5000张,经质量筛查标记模糊320张、过曝180张、欠曝95张;去重合并重复样本约210张;嵌入离群检测生成候选260张,人工复核确认其中错误标签140张、背景干扰70张。清洗后保留约4100张。用同一ResNet-50在清洗前后数据上各训练30轮,若清洗后验证集准确率从82.3%提升到87.6%、各类别F1的方差明显缩小,说明清洗有效。这些数字属于教学示例,实际项目中应以自己的数据统计为准。
清洗完成后,还应把筛查指标、阈值、剔除清单和对比结果整理成数据质量报告,作为数据集版本的一部分随数据一起交付。这样后续复现实验、增量采集和模型迭代时,才能清楚知道当前数据集经过了哪些处理、依据是什么。