类别缺失条件下怎样做生成式数据补全:从数据划分到跨域评估

类别缺失条件下怎样做生成式数据补全:从数据划分到跨域评估

本文讨论公开的问题定义与实验方法。与审稿中工作的具体模型结构、数据配置和实验结果有关的内容不在本文披露。

在植物病害识别中,数据“不够”有很多不同形式:所有类别都很少、长尾类别较少、某个目标作物完全缺少一种病害,或者部署时出现训练阶段从未见过的新类别。它们看起来相似,实验假设却完全不同。

如果问题定义没有先拆开,生成式数据增强很容易得到漂亮的图片,却无法回答识别是否真正改善。

缺失类别生成与三层评估流程

一、先区分五个相邻问题

场景 训练标签空间 目标域数据 核心问题
类别不平衡 类别都存在,数量差异大 可有可无 少数类被多数类压制
小样本学习 每个新类只有少量标注 少量有标签 如何快速适配新类
类别缺失 某个目标类别没有真实训练图像 该类真实图像不可用于训练 如何补全训练支持
开集识别 测试时含未知类别 未知类标签通常不可用 如何拒绝未知样本
域偏移 训练与测试分布不同 标签空间可相同 如何跨环境泛化

本文关注的“类别缺失”还可能与域偏移叠加:源作物存在某种病害,目标作物的对应病害类别却没有可用训练图像;同时两种作物在叶片形态、病灶外观和拍摄环境上都不同。

二、为什么普通数据增强不够

翻转、裁剪和颜色扰动是在已有样本附近扩展分布。若目标类别完全没有真实图像,这些操作无法凭空提供该类的语义支持。

生成模型提供了另一种可能:把源作物中的病害视觉线索、目标作物的健康外观以及类别条件组合起来,生成候选训练样本。扩散模型的基本思想是学习逐步去噪过程,但“能生成”不等于“能补全”。真正困难的是让结果同时满足:

  • 病害语义没有被作物外观覆盖;
  • 目标作物的结构没有被源域复制;
  • 病灶出现在合理区域,而不是背景或水印上;
  • 样本具有多样性,而不是重复记忆训练图像;
  • 加入训练后,真实目标域上的识别得到改善。

三、第一道防线是数据划分

生成模型、筛选器和分类器都可能泄漏测试信息。最稳妥的顺序是:

  1. 先按采集地点、植株或原始图像组划分训练、验证和测试;
  2. 生成模型只接触训练部分;
  3. 所有阈值只在验证集选择;
  4. 真实目标类别测试图像只用于最终评估;
  5. 对真实图与生成图做近重复检查。

一个最小的文件哈希检查可以排除完全重复:

from hashlib import sha256
from pathlib import Path

def digest(path: Path) -> str:
    h = sha256()
    with path.open("rb") as f:
        for block in iter(lambda: f.read(1024 * 1024), b""):
            h.update(block)
    return h.hexdigest()

train_hashes = {digest(p) for p in Path("train").rglob("*.jpg")}
test_hashes = {digest(p) for p in Path("test").rglob("*.jpg")}

overlap = train_hashes & test_hashes
assert not overlap, f"发现 {len(overlap)} 个完全重复文件"

哈希无法发现裁剪、压缩或轻微调色后的近重复,还需要感知哈希或特征近邻检查。关键原则是:先固定测试边界,再训练生成器。

四、三层评估不能合并成一个分数

1. 生成保真度

这一层回答“像不像”。可以结合专家盲评、类别一致性、生成分布的 precision/recall 以及近重复检测。FID 等单一指标不能同时充分描述真实性和覆盖度,也不应直接替代领域专家对病灶合理性的判断。

2. 下游识别效用

这一层回答“有没有用”。至少比较:

  • 只用真实可见类别的基线;
  • 加入通用生成样本;
  • 加入知识或区域引导的生成样本;
  • 不同生成数量与真实数据比例;
  • 对生成筛选模块逐项消融。

指标应包含 macro-F1、每类召回率和混淆矩阵。只看总体准确率会掩盖缺失类别仍然识别失败的问题。

3. 跨域泛化

这一层回答“换个环境还行不行”。可以采用 leave-one-domain-out:每次留出一个采集环境、作物或数据集,只在其余域训练。模型选择不能偷看留出域测试标签。

植物病害图像尤其容易出现背景捷径。受控数据常包含干净背景,田间图像却有重叠叶片、光照变化、模糊和遮挡。跨域测试应把这些变化视为主要问题,而不是附加实验。

五、可解释性应该用来找错

Grad-CAM 可以显示分类分数对卷积特征区域的敏感位置。在病害识别里,我更愿意把它当成诊断工具:

  • 模型是否关注病灶,而不是叶片边缘?
  • 生成样本是否让模型转向背景纹理?
  • 同一类别跨作物时,关注区域是否发生异常漂移?

热力图“看起来合理”不能证明因果解释,也不能代替定量性能。更好的做法是配合病灶区域标注,计算关注区域覆盖度或删除/保留实验。

六、最容易踩的五个坑

  1. 把类别不平衡当成类别缺失。 两者可用信息不同,基线也不同。
  2. 用测试图训练生成器。 即使没有把标签交给分类器,分布信息仍然泄漏。
  3. 只挑最好看的生成样本。 人工筛选规则必须公开并在验证集确定。
  4. 只报告总体准确率。 缺失类别可能被多数类别完全吞没。
  5. 生成与识别使用同一个预训练编码器评分。 指标可能偏向共享表征,应加入独立评估与专家检查。

七、推荐的实验记录表

每次实验至少记录以下字段:真实数据划分、缺失类别定义、生成器可见信息、生成数量、筛选规则、分类器初始化、随机种子、模型选择规则、每类指标以及跨域测试结果。没有这些信息,生成式补全很难复现,也很难判断提升来源。

我目前对这个问题的核心判断是:生成式数据补全首先是一个评估设计问题,其次才是生成器结构问题。图片质量、识别效用和跨域可靠性必须分开证明。

参考资料

  1. Ho et al. Denoising Diffusion Probabilistic Models.
  2. Gulrajani and Lopez-Paz. In Search of Lost Domain Generalization.
  3. Selvaraju et al. Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization.
  4. Xu et al. Embracing Limited and Imperfect Training Datasets in Plant Disease Recognition.
  5. Wang et al. Plant Disease Recognition: A Large-Scale Benchmark Dataset and a Visual Region and Loss Reweighting Approach.
posted @ 2026-09-05 20:51  carter6713  阅读(3)  评论(0)    收藏  举报