You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让训练好的CNN模型识别不属于训练集的未知类别样本?

开放集场景下CNN识别未知类别的实现方案

你遇到的是典型的*开放集识别(Open Set Recognition, OSR)*问题,常规CNN训练默认是闭集场景,只会把输入归到训练见过的类别中,要实现未知类别判定可以用以下几种可行方案:

  • Softmax输出阈值化
    这是改造成本最低的方案,无需调整原有模型结构和训练逻辑。常规CNN最后一层Softmax会输出每个已知类别的置信度,未知类别输入时,模型输出的最高置信度通常会低于已知类样本的最高置信度。你可以准备一批验证用的已知类样本,以及一批不属于5个训练类别的开放样本,分别跑通模型得到两类样本的最大Softmax得分分布,选定一个合适的阈值T。推理时如果模型输出的最高置信度低于T,直接返回「未检测到对应类别」即可。如果存在模型对未知类过度自信的问题,可以先通过*温度缩放(Temperature Scaling)*等置信度校准方法校准模型输出,再做阈值判断效果会更好。

  • 新增未知类重新训练
    收集大量不属于原有5个类别的通用图像,统一标注为第6类「未知类」,加入训练集重新训练CNN模型。训练时模型会自主学习已知类和未知类的特征差异,推理时如果模型判定为第6类,就返回未知类别提示。要注意未知类的训练样本需要尽可能覆盖多样的图像分布,避免样本太单一导致漏判未见过的未知类型,样本不足时也可以用生成模型合成的样本做补充。

  • 替换为开放集识别专用结构
    如果你不方便大规模收集未知类样本,可以微调原有模型适配开放集场景,常用的方案包括:

    1. 使用OpenMax层替换原有Softmax层,它会计算输入特征和已知类特征中心的距离,额外输出未知类的概率,推理时如果未知类概率最高或超过阈值就判定为未知
    2. 基于能量的OOD(Out-of-Distribution)检测方法,计算输入对应的模型能量值,能量超过预设阈值就判定为分布外的未知样本
      这类方案的识别精度通常比单纯阈值化Softmax更高,且对未知训练样本的依赖度更低。
  • 特征距离匹配判断
    适合已经完成模型训练、不方便重训的场景。首先把训练集所有样本输入CNN,提取全连接层前的特征向量,为每个已知类别计算平均特征中心。推理时先提取输入图像的对应特征,计算它和5个已知类特征中心的最小余弦距离/欧氏距离,如果最小距离超过预设阈值,就判定为未知类别。

内容的提问来源于stack exchange,提问作者Mohammad Mahdi Deramgozin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:24:05