状态:草稿(2026-10-13),部分为实测数据。 分类头示例仅模仿了结构而没有使用真正的 CLIP 权重(
code/12_open_vocab_head.py,笔记本 CPU 1秒内)。本文中的模型未在我们的环境中运行(未实测)。论文数据来自原文献及对应条件,硬件则以等级标出。CLIP 自身的训练原理将在姊妹系列(自监督、视频、姿态、体育)中介绍。 写作规则:以实测数据为基础,未能测量的数据标记为「未实测」。
目录
- 1. 闭集词汇的壁垒
- 2. 钥匙:CLIP 的文本 embedding
- 3. OWL-ViT(2022):ViT 每个 token 一个边界框
- 4. OWLv2(2023):自主打标签以扩充
- 5. GLIP 与 Grounding DINO:深度融合文本与图像
- 6. YOLO-World 与 YOLOE:实现实时检测
- 7. 总结:如何选择
- 8. 局限性与我们的项目
- 参考文献
1. 闭集词汇的壁垒
第 5、6、8 篇介绍的检测器是 闭集词汇模型。使用 COCO 训练时,它们只能识别 80 种物体(人、汽车、网球拍……)。若要让其识别「乒乓球拍」或「乒乓球桌」,必须收集带有该标签的数据并重新训练。
从结构上看,原因很简单。检测器的最终分类头是 (영역 특징) · Wᵀ 形式,其中 W 是每个类别占一行的 固定矩阵(80×d)。若要增加一个类别,W 就需要多一行,而该行的数值只有通过数据训练才能获得。
2. 钥匙:CLIP 的文本 embedding
CLIP(2021)通过互联网上的 4 亿对图文对进行训练,使图像编码器和文本编码器在同一空间中输出向量。这是一种通过拉近匹配的图文、拉远不匹配的图文来进行的 对比学习。其结果是,「a photo of a racket」的文本向量与球拍照片的图像向量距离更近。将该文本向量用作分类器权重时,在未使用任何 ImageNet 训练图片(零样本)的情况下,ImageNet top-1 达到了 76.2%(ViT-L/14,336px)。这与直接使用 ImageNet 训练 ResNet-50 的水平相当。
CLIP 的训练原理将在姊妹系列中介绍,本文仅探讨 如何将该文本向量附加到检测器上。核心思路只有一行:u 不要训练 W 的行,而是通过将类别名称输入文本编码器来生成它们。
닫힌 어휘: 점수 = r · W[클래스]ᵀ (W 는 학습한 80×d 행렬)
열린 어휘: 점수 = r · 글자인코더("racket")ᵀ / τ (어휘는 쓸 때 적는다)
动手尝试:添加类别 = 添加一行
我们用一个随机的双层 MLP 来模拟文本编码器,而不是真正的 CLIP 权重,并将其附加到 80×80 特征图(输入 640px,对应 8 的步幅)的分类头上(实测。数字本身没有意义,重点在结构)。
어휘 3개 → 분류 머리 행렬 (3, 256)
「racket」을 더하면 (4, 256) — 다른 가중치는 그대로, 출력 칸마다 로짓이 4개
두 방식 출력 최대 차 0.0e+00, 프레임당 9.09 ms → 2.71 ms
最后一行对比了每帧将词汇输入文本编码器的方案,以及只将词汇编码一次并将其 预烘焙 为矩阵的方案。结果完全相同,且减少了耗时。由于模拟编码器非常小,差异仅约 3 倍,但实际的 CLIP 文本编码器是 Transformer,这种差异会更大(未实测)。这正是第 6 节中 YOLO-World 与 YOLOE 的目标所在。
3. OWL-ViT(2022):ViT 每个 token 一个边界框
Minderer 等人提出的 OWL-ViT 展示了最简单的方法。
- 引入像 CLIP 那样通过对比学习训练的 ViT(第 7 篇)。
- 在最后 取消 将所有 token 聚合到一起的池化操作。这样每个图像块 token 都会保留输出。
- 为每个 token 附加轻量级的 边界框头(该 token 负责的物体边界框)和 分类头(token embedding)。分类头的权重是 类别名称的文本 embedding。
- 使用检测数据(混合 OpenImages、Objects365、Visual Genome 中的两个)进行微调。
与第 8 篇的 DETR 类似,一个 token(槽)负责一个物体,匹配也采用 DETR 式的集合损失。不同之处在于没有单独的槽,而是 图像块 token 直接就是槽。
结果(论文):在 LVIS v1.0 验证集上,AP 为 34.6, 罕见类别 AP 为 31.2(ViT-L/14,使用 Objects365+VG 训练,840px)。由于罕见类别的名称在训练中被略去,31.2 是针对首次见到的类别的零样本数值。
也可以不用文本,而是用 示例图像来查询。将图像块的 embedding 用作查询,就变成了「寻找与此相似的东西」。在未参与训练的 COCO 类别上,单样本检测 AP50 从以往最高的 26.0 提升到了 41.8。
4. OWLv2(2023):自主打标签以扩充
检测标签成本高昂。Minderer 等人在 OWLv2 中通过 自训练(self-training)突破了这一壁垒。
- 使用原有的 OWL-ViT(CLIP L/14)为整个网络图像数据集 WebLI(约 100 亿对图文对)打上 伪边界框标签。词汇则提取自图像的替代文本。
- 使用这些伪标签训练新模型(OWL-ST)。训练样本超过 10 亿个。
- 使用检测数据进行微调。
结果(论文):LVIS 罕见类别 AP 达到 31.2% → 44.6%(L/14,相对提升 43%),更大的 G/14 则达到 47.2%。随着规模扩大,训练效率也得到了优化。结合了仅对前 k 个 token 计算边界框的「物体度」头、在训练时丢弃 50% 像素方差较低的图像块、以及将多张图像拼接成马赛克的策略,使训练计算量减半,吞吐量翻倍。
这与第 9 篇 SAM 的数据引擎思路相同: 模型生成标签,并利用这些标签训练更好的模型。 第 11 篇的 SAM 3 将 PCS 准确率与此 OWLv2 进行了对比。
5. GLIP 与 Grounding DINO:深度融合文本与图像
OWL-ViT 仅在最后通过 一次点积将图像特征与文本 embedding 结合。如果像「左侧选手拿的球拍」这样涉及句子内部的关系,这种方法就不够用了。另一条路线则是从一开始就将二者深度融合。
- GLIP(2022):重新定义了检测任务,将其视为 短语定位(phrase grounding,寻找与句子中短语相符的区域)。它使用 300 万人工标注的 grounding 数据 + 2400 万网络图文对进行预训练,GLIP-L 在未见过 COCO 图像的情况下,COCO 验证集 AP 为 49.8,LVIS AP 为 26.9。
- Grounding DINO(2024):将文本深度融入第 8 篇的 DINO 检测器中。包括特征增强器(图像自注意力 + 文本→图像、图像→文本交叉注意力)、 文本选定的查询(从与文本高度匹配的图像位置开始查询),以及双模态联合解码器。Swin-L 版本(在 Objects365、OpenImages、GoldG 上训练)的 COCO 零样本 52.5 AP,微调后 test-dev 达 63.0 AP。该模型还报告了多领域数据集集合 ODinW 的零样本平均 26.1 AP,不过取得该数值的模型在训练数据中包含了 COCO。代码采用 Apache-2.0 许可证。
深度融合的代价是速度。一旦文本改变,图像侧的计算也必须重新进行,因此无法预先烘焙词汇。
6. YOLO-World 与 YOLOE:实现实时检测
这是尝试将开放词汇引入第 6 篇 YOLO 系列速度优势中的尝试。
YOLO-World(2024):使用了将文本 embedding 融入 YOLO 特征金字塔的 RepVL-PAN,以及区域-文本对比损失。核心在于**「先提示,后检测」**。用户确定词汇后,只需编码一次并将其 重新参数化为网络权重(re-parameterize),在推理时即可完全剥离文本编码器。这正是第 2 节示例中的「预烘焙」。
结果(论文表 2):LVIS minival 零样本 35.4 AP,52.0 FPS。这是一个带有许多附加条件的数值。最大的 YOLO-World-L(烘焙后 4800 万参数,烘焙前 1.1 亿·17.6 FPS),在 Objects365 + GoldG + 带伪标签的 24.6 万张 CC3M 上训练,是在单张数据中心 GPU 上不使用 FP16 和 TensorRT 测得的数值。官方仓库为 GPL-3.0 ,商业使用需另行咨询。
YOLOE(2025):将三种提示整合到一个模型中。
- RepRTA(文本):将优化文本 embedding 的小型辅助网络作为参数融入分类头,推理成本为 0
- SAVPE(示例图像):分别解析语义与位置的视觉提示编码器
- LRPC(无提示):从庞大的内置词汇表中自主选择
结果(论文):相比 YOLO-Worldv2-S,LVIS minival +3.5 AP,训练成本约为 1/3,推理快 1.4 倍(推理用数据中心 GPU,TensorRT)。官方仓库为 AGPL-3.0 。
这两个模型也都包含在 Ultralytics 软件包(AGPL-3.0)中。第 6 篇第 5 节的 AGPL 条款同样适用。
7. 总结:如何选择
| 模型 | 文图交汇点 | 词汇烘焙 | 优势 | 许可证 |
|---|---|---|---|---|
| OWL-ViT / OWLv2 | 最后点积 | 支持 | 简单、示例图像查询、规模化 | 代码在 google-research/scenic 仓库。本文未确认许可证 |
| Grounding DINO | 自始至终深度融合 | 困难 | 句内关系、准确率 | Apache-2.0 |
| YOLO-World | 特征金字塔 | 烘焙嵌入 | 实时 | GPL-3.0 |
| YOLOE | 分类头 | 烘焙嵌入 | 实时、三种提示 | AGPL-3.0 |
| SAM 3(第 11 篇) | 检测器查询 + 存在 token | — | 延伸至掩码与视频 | SAM License |
8. 局限性与我们的项目
- 语言的歧义性。 「table」是餐桌,必须写成 「table tennis table」才是乒乓球桌。「paddle」也可能是独木舟的桨。开放词汇中,挑选词汇本身就是一种 Prompt 设计。
- 小物体。 这些模型通常将整幅图像视为补丁与特征金字塔,因此直径仅有几个像素的乒乓球对它们来说仍然很困难。寻找球的工作交给专用的热力图模型(第 3 篇)。
- 零样本数据的条件。 「从未见过的类别」的标准因论文而异(是仅从训练中删除了名称,还是根本没有看过该数据集的图片)。有时训练数据中会包含与评估重叠的数据,例如 ODinW 中的 26.1。
- 在 TT Score 中, 目前还没有使用开放词汇检测器。乒乓球桌是通过人工 Tap 和 SAM 2.1 找到的,而文字查找则将 SAM 3 作为候选(第 11 篇)。如果只需要像人、球拍这样「几种固定的东西」,闭集模型往往更快、更准确。开放词汇闪光的地方在于「使用者自己决定寻找什么」的时候,例如教练想要临时找出「羽毛球筒」或「球筐」的时候(未实际测量,处于构思阶段)。
本文结束了系列第 1 部分。无需标签的自监督学习、CLIP,以及视频、姿态、体育模型将在姊妹系列(自监督·视频·姿态·体育篇文件夹)中继续。
TT 一言。 以前要教旧检测器认识「球拍」,得收集一大堆球拍的照片。现在只需要 「racket」 这个词就行了。不过,如果只说 「table」 可能会把餐桌找出来,所以必须选好词。
参考文献
- Radford, A. et al. (2021). Learning Transferable Visual Models From Natural Language Supervision. ICML 2021. https://arxiv.org/abs/2103.00020
- Minderer, M. et al. (2022). Simple Open-Vocabulary Object Detection with Vision Transformers. ECCV 2022. https://arxiv.org/abs/2205.06230
- Minderer, M., Gritsenko, A., Houlsby, N. (2023). Scaling Open-Vocabulary Object Detection. NeurIPS 2023. https://arxiv.org/abs/2306.09683
- Li, L. H. et al. (2022). Grounded Language-Image Pre-training. CVPR 2022. https://arxiv.org/abs/2112.03857
- Liu, S. et al. (2024). Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection. ECCV 2024. https://arxiv.org/abs/2303.05499
- Cheng, T. et al. (2024). YOLO-World: Real-Time Open-Vocabulary Object Detection. CVPR 2024. https://arxiv.org/abs/2401.17270, 仓库 https://github.com/AILab-CVC/YOLO-World (GPL-3.0)
- Wang, A. et al. (2025). YOLOE: Real-Time Seeing Anything. ICCV 2025. https://arxiv.org/abs/2503.07465, 仓库 https://github.com/THU-MIG/yoloe (AGPL-3.0)
- 示例代码与输出:此文件夹的
code/12_open_vocab_head.py,code/12_open_vocab_head.out.txt