深度学习分类模型如何处理unknown class(未知类别)识别问题
开放世界猫狗二分类未知类识别可落地方案
你之前新增unknown类做三分类精度下降的核心原因有两个:一是随机采样的unknown类数据分布过杂,包含大量和猫狗特征差异极大的样本,训练时会干扰模型对猫狗核心特征的学习;二是直接做三分类会让原有分类头的权重被重新初始化,破坏了之前二分类训练好的特征边界。
以下是三类工业界成熟的落地方案,按落地优先级排序:
方案1:置信度阈值后处理(无需改动原有模型,最快上线)
这个方案完全保留原有二分类模型的能力,不会对猫狗分类精度产生任何影响:
- 实现步骤:
- 用原有猫狗二分类模型在标注好的猫狗验证集上推理,记录所有样本预测结果的softmax最大置信度,取置信度分布的5%分位值作为判定阈值
T(常见阈值区间为0.7~0.9) - 线上推理时,输入图片先过原有模型得到最大置信度,若小于
T则判定为未知类,若大于等于T则输出对应的猫狗类别
- 用原有猫狗二分类模型在标注好的猫狗验证集上推理,记录所有样本预测结果的softmax最大置信度,取置信度分布的5%分位值作为判定阈值
- 优化技巧:可以对模型做温度缩放校准,用少量验证集调整温度参数
T,修正模型过高的假置信度问题,进一步降低未知类误判率 - 优缺点:落地成本极低,完全不影响原有分类精度;对和猫狗特征差异极大的未知类(比如大象、汽车)识别率接近100%,仅对和猫狗特征高度相似的未知类(比如狐狸、狼)有少量误判
方案2:特征距离匹配(精度更高,改动量极小)
比置信度阈值方案识别准确率更高,仅需要对原有模型做少量改造:
- 实现步骤:
- 取训练好的二分类模型,去掉最后一层softmax分类头,用倒数第二层输出作为特征提取器
- 将所有猫狗训练样本过特征提取器,分别计算猫、狗两个类别的特征中心(即该类所有样本特征的均值向量)
- 线上推理时,先提取输入图片的特征,分别计算与两个类别中心的余弦距离,若最小距离大于预设阈值则判定为未知类,否则输出距离更近的类别
- 优缺点:对特征相似的未知类识别率比阈值方案高30%以上,仅增加少量特征存储和距离计算的开销,整体推理延迟提升不超过10%
方案3:优化版未知类微调方案(精度最优,适合高要求场景)
如果对未知类识别率要求极高,可以用这个方案,不会出现你之前三分类的精度下降问题:
- 实现步骤:
- 重构unknown类数据集:不要用完全随机的图像,优先选和猫狗同域的难例样本(比如其他哺乳类动物、毛绒宠物玩具、外形接近猫狗的其他物体),样本量控制在猫狗单类样本量的30%~50%即可,不需要太多
- 微调时冻结模型底层的特征提取层,仅微调最后1~2层全连接层,避免破坏原有模型学习到的猫狗核心特征
- 训练时用带边距的交叉熵损失,约束unknown类的特征和猫狗两类特征的距离大于预设边距,强化类别边界
- 优缺点:未知类识别准确率最高,原有猫狗分类精度下降不超过2%;仅需要额外构造小体量的unknown数据集,微调成本可控
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

