YOLO-MM:当目标检测学会"听人话",封闭的 80 类是怎么被打破的
上周一个做安防的朋友问我:"我想让摄像头自动框出画面里'穿红色外套的人',YOLO 能干吗?"
我说:"YOLO 能框出'人',但框不出'穿红色外套的人'。"
他愣了一下:"差别有那么大?不就是加个颜色条件吗?"
差别大到是两个时代。传统的 YOLO,脑子里只装着一张固定的清单——COCO 数据集那 80 个类别:人、车、猫、狗、瓶子……它看世界的方式,是拿画面去和这张清单一个个对号入座。清单上有的,它认得;清单上没有的,比如"红色外套""施工安全帽""货架上倒了的可乐瓶",它一律视而不见。你想加一个新类别?对不起,请准备几千张标注图,重新训练一遍。
所以我那位朋友的需求,本质上不是"加个条件",而是要求一个检测器去理解一句它从没在训练里见过的人话。这件事,过去十年的 YOLO 做不到。
但从 2024 年开始,事情变了。一类被统称为 YOLO-MM(多模态 YOLO) 的模型,把"图像"和"文本"两条信息流接进了同一个检测器。你给它一张图,再给它一句话——"穿红色外套的人"——它真的能框出来。今天我们就来拆一拆:这道几乎封死了十年的门,到底是被哪把钥匙撬开的。
一、传统 YOLO 到底卡在哪?
要理解新东西好在哪,得先看清旧东西卡在哪。
传统 YOLO 的检测头,最后一层是什么?是一个固定长度的分类器。训练 COCO,它就有 80 个输出;训练你自己的数据集,有多少类就是多少个输出。这个数字,在训练那一刻就被焊死了。
这意味着什么?意味着模型的"词汇量"是封闭的。它不是在"理解"画面,而是在做一道 80 选 1 的选择题。题目选项印死在卷子上,遇到选项之外的东西,它连"这是什么"都问不出口——因为它的世界里压根没有"未知"这个选项。
这就是学术上说的 封闭集检测(closed-set detection)。它的代价藏在三个地方:
- 新类别 = 重新标注 + 重新训练。想识别"安全帽"?先搞几千张标注图。这是钱和时间。
- 长尾类别几乎没救。那些罕见但要命的东西——"路上掉落的轮胎""管道裂缝"——你根本凑不齐训练数据。
- 语义被压成了一个编号。在模型眼里,"人"不是人,是第 0 类;"猫"不是猫,是第 15 类。编号之间没有关系,"狗"和"狼"在它看来,和"狗"与"冰箱"一样遥远。
你发现没有,问题的根子不在 YOLO 跑得快不快、准不准,而在它认世界的方式从一开始就是封闭的。它是个优等生,但只会做见过的题。
那怎么办?如果检测头不再是"80 选 1 的选择题",而是变成"开放问答",会怎样?这正是 YOLO-MM 动刀的地方。
二、给检测器装上"语言",意味着什么?
把"80 选 1"变成"开放问答",缺的那块拼图叫语言。
核心思路其实只有一句话:别再用"编号"代表类别,改用"文本的含义"代表类别。
怎么做到?答案藏在一个你可能听过的名字里——CLIP。CLIP 是 OpenAI 在 2021 年搞出来的东西,它干了一件很妙的事:把"图像"和"文字"映射到同一个语义空间里。在这个空间里,一张猫的照片,和"a photo of a cat"这句话,落点几乎重合;而和"一辆卡车"这句话,则隔得老远。
打个比方。CLIP 像一个精通"看图"和"读字"两种语言的同声传译。它把图片翻译成一串向量,把文字也翻译成一串向量,而且保证——只要说的是同一个东西,两串向量就挨得很近。于是"图像"和"文本"第一次有了可以直接比对的公共货币。
YOLO-World 干的事,就是把这套"公共货币"机制接进了 YOLO。它的结构,可以拆成三大块:
看懂这张图,你就抓住了 YOLO-MM 的七寸:
- 图像分支:还是熟悉的 YOLO 视觉主干,负责把图片切成一块块的视觉特征。这部分几乎没动,所以 YOLO 招牌的"快"得以保留。
- 文本分支:把你给的词("person""red coat""helmet")丢进 CLIP 文本编码器,变成一组文本向量。
- 融合 + 检测:让视觉特征和文本向量在一个叫 RepVL-PAN 的模块里反复"对话",最后检测头吐出的不再是"第几类",而是"这个框,和你给的哪句话最像"。
最关键的变化在最后一步。检测头的输出,从"分类概率"变成了"视觉框和文本向量的相似度"。这一变,分类器的固定长度就被拆掉了——你给几个词,它就比几个相似度。词是你临时说的,所以类别不再封闭。
这背后还有个训练上的功臣,叫区域-文本对比损失(region-text contrastive loss)。训练时,模型不断被逼着做一件事:让"猫所在的那个框"的视觉特征,去贴近"cat"这个词的文本特征,同时远离"dog""car"。练得多了,视觉和语言就在同一个空间里对齐了。这跟 CLIP 的训练哲学一脉相承,只不过 CLIP 对齐的是"整张图 vs 整句话",而 YOLO-World 对齐的是"图里的某个区域 vs 某个词"。粒度更细,正好适配检测这种"哪里有什么"的活儿。
到这儿,"听懂人话"这步算是通了。但一个真正的工程师听到这里,应该立刻警觉:CLIP 那么重,每检测一次都要现场编码一遍文本,YOLO 还能叫 YOLO 吗?这正是下一个、也是最精彩的设计。
三、"先提示,再检测"为什么是神来之笔?
YOLO 这三个字母的命,就是一个字:快(You Only Look Once,你只看一眼)。
可现在,每检测一张图,是不是都得先把那一堆类别词喂进 CLIP 文本编码器跑一遍?CLIP 可不轻。如果每帧都要"现场翻译"一次文本,实时性就毁了——这等于给一辆跑车焊上了一个拖斗。
YOLO-World 的解法,叫 "先提示,再检测"(prompt-then-detect)。这个名字朴素,但思路极聪明。我把它翻译成大白话:
你的类别词,绝大多数时候是固定的(比如安防场景永远就盯那么十几样东西)。那为什么要每帧都重新翻译?提前翻译好,存起来,反复用不就行了。
具体怎么操作?分两步看:
第一步(离线):你把要检测的词——"person""red coat""helmet"——提前用 CLIP 编码好,得到一组向量,存成一张"离线词表"。这步只做一次。
第二步(在线):跑视频时,CLIP 已经退场了。那张离线词表被重参数化(re-parameterize)进了模型权重里——你可以理解为,文本的语义被"焊"进了网络,变成了普通的卷积参数。于是每一帧的推理,就是一次纯粹的视觉前向传播,和原版 YOLO 一样轻、一样快。
"重参数化"这个词听着唬人,其实道理特别朴素。它就像把一道每次都要现算的应用题,提前算出答案、印在了课本里。考试时你直接抄答案,不用再列方程。文本语义这道"应用题",被提前算进了权重这本"课本"。
这一招的精妙之处在于:它把"灵活性"和"速度"这对老冤家给解耦了。需要改词的时候(灵活),你重新生成一次离线词表即可,成本极低、不用重训;跑起来的时候(速度),模型里压根没有文本编码器的影子,该多快还多快。
说到这,你可能觉得故事完美收官了。但技术从不停步——既然类别可以用"文字"指定,那能不能用别的方式指定?比如,直接用鼠标圈一个例子给它看?2025 年的 YOLOE,就把这扇门又推开了一道缝。
四、YOLOE 又往前走了一步:三种提示怎么玩?
2025 年 3 月,清华的团队放出了 YOLOE,副标题起得很狂——"Real-Time Seeing Anything"(实时看见万物)。后来这篇工作中选了 ICCV 2025。
如果说 YOLO-World 解决的是"能不能听懂文字",那 YOLOE 想解决的是一个更现实的问题:万一这东西,你压根说不清楚呢?
想象几个场景。你要检测一种特殊的工业零件,它没有通用名字,你打字都不知道该敲什么词。或者,你想检测"画面里所有不该出现的东西",但你事先根本不知道会出现什么。文字提示在这些场景里就抓瞎了。
YOLOE 给出的答案是三种提示模式,覆盖了"你说得清""你说不清但能举例""你完全不知道"这三种处境:
| 提示模式 | 你给它什么 | 背后的模块 | 适合的场景 |
|---|---|---|---|
| 文本提示 | 一句话 / 几个词 | RepRTA(可重参数化区域-文本对齐) | 类别说得清,比如"人、车、狗" |
| 视觉提示 | 框一个例子图给它看 | SAVPE(语义激活视觉提示编码器) | 没法用词描述,但能举个例子 |
| 无提示 | 什么都不给 | LRPC(惰性区域-提示对比) | 开放场景,让它自己说"这是什么" |
视觉提示这一招特别戳实战痛点。你在一张图上框出那个叫不出名字的零件,模型就提取出它的视觉语义,然后去全图、乃至别的图里找"长得像的东西"。这等于把"以文搜图"换成了"以图搜图"——对于那些工业、医疗里大量"只可意会不可言传"的目标,这是救命的能力。
无提示模式则更激进:你啥也不给,它靠一个内置词表自己去判断每个区域"最像什么",直接报出名字。这背后的机制,是把"识别"这件事彻底重新定义了——不再是"从固定类别里选一个",而是把目标的视觉特征,去和文本、视觉样例、内置词表这些来源的语义做相似度匹配,谁最像就是谁。分类,被它改写成了"找最近邻"。
而 YOLOE 最让我欣赏的,是它没有为了这身花哨本事牺牲 YOLO 的命根子。它沿用了和 YOLO-World 同源的思路:这些开放词汇模块,在推理时被重参数化进主干网络。结果就是——当它作为一个普通的封闭集 YOLO 来跑时,FLOPs 和速度和原版几乎一模一样,多模态的能力没有带来额外的推理开销。鱼和熊掌,它真的想都要。
能力越来越强,听上去无懈可击。但任何技术,捧得越高,越要冷静看它脚下的坑。接下来我们泼点冷水。
五、它能用在哪?又有哪些坑要躲?
先说能用在哪。一旦检测器能"听懂人话",很多过去要专门训模型的活儿,现在一句提示就能起步:
- 安防 / 工业巡检:临时想盯一个新目标——"没戴安全帽的人""漏油的管道"——改一句提示就行,不用攒数据重训。
- 机器人 / 具身智能:让机器人去"拿桌上那个蓝色的杯子",开放词汇检测是它把语言指令落到像素的关键一环。
- 数据标注的"自动预标":用文字提示先把图里的目标粗框一遍,人再去修,标注效率成倍提升。
- 长尾 / 罕见目标:那些凑不齐训练集的稀有物体,靠语义泛化先顶上,总比完全瞎了强。
但你要是以为它无所不能,那就要栽跟头了。下面这几个坑,是用之前必须知道的:
第二,提示词是门手艺。同一个目标,你写 "person"、"a person"、"pedestrian",效果可能差一截。文本提示的效果对措辞敏感,这就是检测领域的"提示工程",得调。
第三,它对语言的理解有上限。"穿红色外套的人"这种带属性、带关系的复杂描述,能不能稳稳框对,取决于模型语义对齐的细腻程度,别默认它一定能处理好复杂逻辑。
还有一个最容易被忽略、却最该说清的误区——
所以怎么选?我的建议很简单:类别频繁变、要实时、能容忍精度不是最顶,YOLO-MM 是利器;类别固定、要榨干精度,老老实实用封闭集 YOLO 微调。要的是复杂场景的深度理解、又不在乎实时,那才轮到视觉语言大模型上场。工具没有高下,只有适配。
看清了它的边界,我们才好回答最后一个问题:这条路,接下来会通向哪里?
六、这条路会走向哪里?
回头看这条线,逻辑其实清清楚楚。它讲的是同一件事的层层推进:
- 从"编号"到"语义":检测头不再吐出第几类,而是比"视觉框和文本谁更像",封闭的类别清单就此被拆掉。
- 从"现场翻译"到"提前固化":"先提示,再检测"把文本编码挪到离线、重参数化进权重,让多模态在推理时不拖速度的后腿。
- 从"我说你找"到"你自己看着办":YOLOE 用文本、视觉、无提示三种模式,把检测器的自主性又往上抬了一级。
我的判断是:"开放词汇"会从一个研究热词,变成检测器的默认出厂配置。就像今天没人会专门强调一个模型"支持彩色图像"一样,三五年后,"能不能用一句话指定要检测什么"会成为基础能力,而不是卖点。封闭集那张写死了 80 类的清单,正在变成历史。
我斗胆下两个预测,给自己设个 deadline:
预测一:到 2027 年,主流的开源检测框架(Ultralytics 这类)会把"文本/视觉提示"做成和"画框标注"同等地位的一等公民,开发者默认就能用自然语言起步一个检测任务,而不是先去标数据。其实苗头已经有了——把 YOLO26 和 YOLOE 缝合的 YOLOE-26 已经出现,开放词汇正在和最新的实时检测主干快速合流。
预测二:YOLO-MM 会成为具身智能的"标配视觉模块"。机器人要听懂"把那个杯子递给我",第一步就是把"那个杯子"从像素里框出来——又快、又能听懂人话的开放词汇检测器,正好卡在这个位置上。
半年、一年后回来看看,我说得对不对。
但比预测更重要的是此刻你能做的事。还记得开头那位做安防的朋友吗?我让他别再纠结"YOLO 能不能加颜色条件",而是去跑一遍 YOLO-World,把提示词直接写成 "person in red coat",亲眼看看结果。技术的代差,有时候就藏在你愿不愿意把那句话真的说出口。
毕竟,让机器"睁开眼",我们花了几十年;而让它"听懂我们指着说话",才刚刚开始。
参考资料
- YOLO-World: Real-Time Open-Vocabulary Object Detection (CVPR 2024, arXiv:2401.17270)
- GitHub: AILab-CVC/YOLO-World — 官方代码库
- Ultralytics Docs — YOLO-World Model(架构与零样本 COCO 基准)
- YOLOE: Real-Time Seeing Anything (ICCV 2025, arXiv:2503.07465)
- GitHub: THU-MIG/yoloe — 官方代码库
- LearnOpenCV: YOLOE Tutorial — Real-Time Open-Vocabulary Detection
- Mamba-YOLO-World: Marrying YOLO-World with Mamba (arXiv:2409.08513)
- YOLOE-26: Integrating YOLO26 with YOLOE for Real-Time Open-Vocabulary Instance Segmentation (arXiv:2602.00168)