1. 项目背景与核心价值
在目标检测领域,YOLO系列模型因其高效的实时检测能力被广泛应用于工业质检、自动驾驶、安防监控等场景。但现有模型存在一个致命缺陷:当遇到训练集中未出现的类别时,模型会强制将其归类为已知类别,导致严重误判。比如自动驾驶中把未知障碍物误判为行人,或工业质检中将新型缺陷误判为合格品。
我在实际部署YOLOv5/v7模型时,多次遇到这类问题。有一次在PCB板缺陷检测项目中,模型将一种未见过的新型划痕错误归类为"污渍",导致整批次不良品流出。事后分析发现,传统分类头本质上是一个封闭集分类器,其softmax输出强制所有输入必须归属于某个训练类别。
这个项目要解决的,就是在YOLOv11(假设为YOLO系列最新版本)中增加一个"未知类别"预测头,让模型具备开放集识别能力。当检测到训练集之外的物体时,能够输出"unknown"标识而非强行归类。这种改进对安全敏感场景尤为重要——宁可漏检也不该误检。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案设计
2.1 基础架构分析
标准YOLOv11的分类头通常由以下组件构成:
- 输入:来自特征金字塔的多尺度特征图
- 结构:1x1卷积降维 → 3x3卷积特征提取 → 1x1卷积输出
- 输出:维度为C的向量(C=类别数),通过softmax归一化
关键问题在于softmax的封闭性。即使输入与所有已知类别差异很大,其输出仍会强制归一化为某个已知类的概率分布。我们需要打破这种强制性。
2.2 改进方案对比
经过实验验证,最终采用"双分支+能量分数"的混合方案:
- 原有分类头保留:继续输出C维的类别概率分布P(y|x)
- 新增未知头分支:
- 结构:与分类头共享底层特征,独立顶层卷积
- 输出:1维的energy score E(x),通过sigmoid激活
- 决策逻辑:
python复制if sigmoid(E(x)) > threshold: return "unknown" else: return argmax(P(y|x))
相比其他方案(如OpenMax或MC Dropout),这种设计具有三大优势:
- 计算开销仅增加1个输出通道
- 无需修改原有训练流程
- 能量分数对分
