视觉定位和开放集检测的区别:一个是找到描述的物体,一个是找到所有已知类别

你有没有遇到过这种情况:你让AI“找到窗台上那只橘猫”,它真的在图片上给你画了个框。这个动作的专业名词叫视觉定位(Visual Grounding)。另一个场景:你训练了一个专门检测猫狗的模型,它突然遇到一只狐狸,会怎么办?它可能睁着眼睛说瞎话,告诉你这是狗——因为它的世界里没有“不确定”这个选项。如果它学会说“不知道”,那它就掌握了一门新技能:开放集检测(Open-set Detection)。

AI technology illustration

我最早把这两个概念混在一起,觉得都是“让AI在图像里找东西”。后来才发现:这俩不仅输入输出不一样,连“找”的哲学都是反着的。一个在找“你描述的那一个”,一个在找“我认识的所有,外加一个我拿不准的”。这篇文章我就想把自己踩过的坑告诉你。

先别急着对比:它们各自在解决什么问题

视觉定位(Visual Grounding)
给定一张图和一句自然语言描述(例如“左边第二个穿红衣服的人”),模型输出该物体在图中的边界框。它也叫“指代表达理解”(Referring Expression Comprehension),本质上是在做图文匹配。
开放集检测(Open-set Detection)
给定一张图,模型不仅要检测出训练时见过的类别(猫、狗、人),还要对训练时没见过的物体给出一个“未知”标签,而不是硬归为某个已知类别。这是相对于封闭集检测(Closed-set Detection)而言的。
对比项 视觉定位 开放集检测
输入 图像 + 自然语言描述 图像(+固定类别集合)
输出 描述所指目标的框或掩码 所有目标的框 + 已知类别或“未知”标签
核心问题 “它说的是哪一个?” “这个物体是已知的,还是未知的?”
训练标注 图文配对(句子+框) 标准检测标签 + 额外未知样本或概率校准
评估指标 定位准确率(IoU>=0.5) 已知类AP、未知类AUROC、正确拒绝率
典型模型 TransVG、MDETR OpenMax、Energy-based Open-Set Detector

上面这张表已经能看出端倪,但我想再往深挖一层。

视觉定位:在一张图里做阅读理解

想象一下,你站在一副巨大的照片前,指着某个角落说“那个戴帽子的人”。对方能找到它,是因为他能把“戴帽子”这个视觉特征和图片中的人物一一对应。视觉定位就是把这个过程教给AI。常见的做法是两阶段:先用区域提议网络(RPN)在图像里切出一堆候选框,再对每个框提取特征,然后和描述的特征做相似度打分,取最高分。你可以理解为:每个框都在举手抢答,说“我才是你描述的那个人”。

这种先切框再匹配的方法有个隐患:如果RPN压根没把目标切进去,后面怎么匹配都白搭。所以现在的主流转向了端到端。比如MDETR直接把语言和图像特征拼成一个序列,用Transformer统一建模。它让文本里的每个词都跟图像里的每个像素“互相看”,最后直接回归目标框。这个过程最考验的是语义消歧:“左边那只猫”和“蹲在窗台上的猫”是同一只吗?“左边”是相对于相机还是相对于画里的其他人?视觉定位必须从上下文里推出唯一的实体。

所以,视觉定位的训练数据不是“整张图的所有物体”,而是“每句话对应的那一个目标”。这一点跟目标检测完全不同——检测器学会了识别所有“猫”,但视觉定位要学会分辨“哪一只猫”才是你嘴里那只。这个区别,我下面还会再讲。

开放集检测:让AI学会说“我不知道”

传统的检测器在封闭环境下训练,softmax层会把输出概率强行归一化到已知类别上。于是,当它看到一个狐狸时,计算出的可能是“狗”概率0.7,“猫”概率0.2,“兔子”0.1,然后自信地给出一个框。为什么它会这么自信?因为softmax加起来必须等于1,它没有表达“这些都不像”的出口。

开放集检测要做的就是打开这个出口。经典的OpenMax方法,为每个已知类别拟合一个Weibull分布,用来衡量样本落在分类边界上的离群程度。如果某个样本偏离已知类太远,就把它从该类的概率中“挖”出一部分,汇成一个“未知”类。基于能量的方法更进一步,直接用能量函数取代softmax,已知样本能量低,未知样本能量高。这样,“未知”不是靠增加一个神经元学出来的,而是靠模型对“自己知道什么”的不确定性建模。

它的核心价值,不是在“识别狐狸”上,而是在“承认自己不认识”上。在一个真实的自动驾驶系统里,路边一块形状诡异的纸箱,模型不需要知道它是“路障”还是“垃圾”,但必须不能把它当成“行人”或“汽车”。开放集检测就是用来兜这层底的。

它们能互相替代吗?不能

理解了上面的机制,你应该能发现:视觉定位是“语言-空间”的映射,开放集检测是“已知-未知”的边界。一个靠语义理解,一个靠不确定性校准。它们解决的不是同一个问题。

当然,二者也有交集。开放词汇检测(Open-vocabulary Detection)用视觉语言模型(比如CLIP)把类别名称变成文本表示,从而检测出训练中没见过的类别。如果你输入“狐狸”这个类别名,它就能找出狐狸;如果你再问“窗台上那只橘猫”,它也可以做视觉定位。但这不代表两者合一——开放词汇检测要检测“所有在文本中提到的类别”,而视觉定位只找“你指那一个”。你不需要给视觉定位一个类别清单,它只需要一句描述。反过来,开放集检测可以告诉你“这里有个东西我不认识”,但不会告诉你怎么用语言描述它。

我早期犯过一个错误:以为开放集检测就是“检测新类别”。实际上,检测新类别是增量学习(Incremental Learning)的任务,需要更新模型参数。而开放集检测是推理阶段的能力,不对模型做任何更新。模型可能永远不知道狐狸叫狐狸,但它知道“狐狸不属于我认识的任何一类”。这种“知道自己不知道”的能力,和识别本身是完全不同的研究方向。

三个容易踩的坑

封闭集检测和开放集检测的区别是什么?

封闭集检测假设测试时只出现训练类别,所有输出在已知类别上归一化;开放集检测允许出现未知类别,并要求模型对未知给出拒绝或标记。一个致命的差别:封闭集模型在陌生数据上会过度自信,而开放集模型需要学会谨慎。

视觉定位能直接用来做开放集检测吗?

不能。视觉定位模型的训练目标是“找出符合这句话的框”,它不会评估“这个框里是不是我见过的东西”。你让它找“窗外那只橘猫”,它会很努力地找,即使那只猫其实是只狐狸——只要描述和视觉特征有点匹配,它就可能出错。所以两者需要不同的训练目标和评价指标。

开放集检测输出“未知”之后,能知道它是什么吗?

不能。如果想知道名称,得把未知框裁剪出来,送给CLIP这类开放词汇分类器做检索。产品系统里常见组合是:开放集检测负责发现未知目标,CLIP负责为未知目标命名。两个环节各司其职。

现在的AI在这两个任务上,离人还差多远

视觉定位目前能处理比较简单的指代表达,但在复杂指代上仍会翻车。比如“那个手里拿着长绳、穿蓝衣服的人”,一旦成分变多,模型就容易顾此失彼。开放集检测的瓶颈则在于“未知”的边界定义:一只被遮挡的狗可能被标成未知,一只长得像狗的狐狸也可能被归为已知。阈值怎么调,永远是工程上的难题。

我见过一些技术方案,把视觉定位和开放集检测都挂在同一个产品页上,说成同一个能力的两种体现。但通过文章的分析应该明白,它们分别对应了人类认知的两种重要能力:跟随语言指示找到唯一目标,以及对知识边界保持清醒。一个让AI更听话,一个让AI更谨慎。真正的智能,缺一不可。

最后说一句:我真正佩服的,不是那些把已知类别做到99%的检测器,而是那些敢于输出“未知”的模型。在这点上,AI有时候比一些满嘴结论的人诚实多了。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/659.html

(0)
上一篇 11小时前
下一篇 11小时前

相关推荐