文章目录
YOLO-World: Real-Time Open-Vocabulary Object Detection
一、主要贡献
1. Open-valcabulary object detector
方法 | 特点 | 优缺点 |
---|---|---|
传统目标检测器 | 固定类别(Fixed Vocabulary) 例如 YOLOv3、Faster R-CNN 只能检测 80 类 COCO | ✅ 推理快,轻量 ❌ 无法扩展新类 |
早期开放词汇检测器 | 同时编码图像和用户文本提示(Online Vocabulary) 通常依赖 CLIP + 大模型 | ✅ 可识别任意类名 ❌ 需要文本编码器在线运行,推理慢,模型大 |
YOLO-World(轻量开放词汇) | 离线生成“prompt → 向量”词汇(Offline Vocabulary) 推理时不再需要文本编码器 | ✅ 支持开放类检测 ✅ 推理快(文本不参与) ✅ 可重参数化部署 ❌ 类别词需要提前给定 |
- 以往开放词汇检测器:
- 每次推理都需要同时编码图像和文本(词汇):输入图像时,还要实时处理大量词汇(比如类别名短语),模型每次都要重新编码词汇、图片一起推理。
- YOLO-World 推理时:
改成Prompt-then-Detect
模式(推理时),“把“词汇”预处理好,不再每次推理都编码词汇!- 用户根据需要,先提前生成一批“Prompt” (即一组类别描述,比如“dog, cat, car”)。
- 这批 Prompt 提前离线编码成“offline vocabulary”(即编码成向量,存在模型里)。
- 推理时,直接用这些已经编码好的向量,不用再实时编码文本了,可以直接当成模型权重用,大幅加速。
- YOLO-World 训练时:
- 在训练过程中,为每个 4 图马赛克样本构建动态词汇表:包含图像中存在的类(正样本)+ 随机采样的类(负样本)
- 每一张训练用的马赛克图像(包含4张拼图),都会根据它“自己图中包含的类别”,动态构建一个只属于它自己的词汇表,而不是所有样本都用一个固定的通用词汇集合。
- 早期 OVD 模型,构建一个“全量词汇表”,比如 LVIS 有 1200 多类,每张图都要与这 1200+ 个类别的 embedding 比对一次
- YOLO-World 的动态词汇表,它显著减少了训练过程的无效负类干扰
2. 开放词汇预训练机制( Pre-training Formulation: Region-Text Pairs) && 可重参数化视觉语言特征聚合网络(Re-parameterizable Vision-Language PAN)
-
训练机制创新
- 【标签】
Region-Text Pairs
——将传统的检测标注 {Bi, ci}(边界框 + 类别标签)改成了 {Bi, ti}(区域-文本对)
Bi
边界框;ti
与区域Bi相关的描述 - 输出
- 预测框(Predicted Boxes)
- 对象嵌入(Object Embeddings):指的是对象的高维特征向量表示,它们表示每个检测到的物体在高维空间中的位置和特征信息。
- 【标签】
-
网络结构创新
推理阶段,将离线编码好的词汇嵌入向量,重参数化为卷积层或线性层的权重,进一步减少推理负担,实现轻量高效部署。
3. 提出高效推理与部署策略
- Prompt-then-Detect:先离线编码词汇,再检测,提高推理速度
- 将离线词嵌入(text embeddings)重参数化成卷积或线性层的权重,部署更高效
二、Model Architecture
1. 文本编码器(Text Encoder)
- 使用 CLIP 的 Text Encoder 。
- 将输入的一组词汇或短语(如 “dog”、“bicycle”、“rusty spot”)编码成一组高维嵌入向量。
- 这些词汇的嵌入(embeddings)作为检测时的匹配目标。
2. 主干网络(Backbone)
- 使用 YOLOv8 的标准 Backbone
- 提取多尺度特征:
- 80×80(小目标)
- 40×40(中目标)
- 20×20(大目标)
3. 特征金字塔增强(RepVL-PAN)
- RepVL-PAN = “可重参数化视觉语言特征聚合网络”。
- 作用是将视觉特征和文本特征融合,
让视觉特征受文本语义引导。
- 具体做法:
- 对不同尺度特征图(80×80,40×40,20×20)分别做 多尺度Max Pooling,得到局部 patch 特征(3×3 区域 → 27 个 Patch tokens)。
- 把这 27 个局部 patch tokens 和离线词汇嵌入(text embeddings)做一次 Multi-Head Attention 更新。
- 把这些融合后的特征重新融入到检测头(Head)中。
Text-guided CSPLayer(文本指导的跨阶段部分层)模块结构与流程
🔹 输入
- 图像特征图: X ∈ R H × W × C X \in \mathbb{R}^{H \times W \times C} X∈RH×W×C
- 文本 embedding: W ∈ R T × D W \in \mathbb{R}^{T \times D} W∈RT×D( T T T 个 token)
🔹 Split 分支
将输入图像特征分为两半:
- X 1 , X 2 ∈ R H × W × C / 2 X_1, X_2 \in \mathbb{R}^{H \times W \times C/2} X1,X2∈RH×W×C/2
🔹 Dark bottleneck 编码
- 将
X
1
X_1
X1 送入若干个 bottleneck 模块,得到:
- X bottleneck ∈ R H × W × C / 2 X_{\text{bottleneck}} \in \mathbb{R}^{H \times W \times C/2} Xbottleneck∈RH×W×C/2
🔹 Max-Sigmoid 注意力融合
将图像特征与文本嵌入进行融合,通过 Max-Sigmoid 注意力机制,引导图像关注与语言语义相关的区域。
符号 | 含义 | 维度(假设) |
---|---|---|
X l X_l Xl | 第 l l l 层的图像特征图(来自 FPN 层) | H × W × D H \times W \times D H×W×D |
W W W | 文本 embedding 序列,包含多个 token | T × D T \times D T×D(T 是 token 数) |
W j W_j Wj | 第 j j j 个文本 token 的 embedding 向量 | 1 × D 1 \times D 1×D 或 D D D 向量 |
X l W j ⊤ X_l W_j^\top XlWj⊤ | 图像每个位置和文本 token j j j 的点积 | H × W H \times W H×W |
max j ( ⋅ ) \max_j(\cdot) maxj(⋅) | 对所有文本 token 取最大点积值 | H × W H \times W H×W |
δ ( ⋅ ) \delta(\cdot) δ(⋅) | sigmoid 激活 | H × W H \times W H×W |
X l ⋅ (上面) X_l \cdot \text{(上面)} Xl⋅(上面) | 每个空间位置乘以注意力权重 | H × W × D H \times W \times D H×W×D |
-
对 X bottleneck X_{\text{bottleneck}} Xbottleneck 中每个位置 x h , w x_{h,w} xh,w 与所有文本 token w j w_j wj 做点积:
S h , w , j = x h , w ⋅ w j ⊤ ⇒ S ∈ R H × W × T S_{h,w,j} = x_{h,w} \cdot w_j^\top \quad \Rightarrow \quad S \in \mathbb{R}^{H \times W \times T} Sh,w,j=xh,w⋅wj⊤⇒S∈RH×W×T
-
沿 token 维度取最大值,得到注意力图:
A h , w = max j S h , w , j ⇒ A ∈ R H × W A_{h,w} = \max_j S_{h,w,j} \quad \Rightarrow \quad A \in \mathbb{R}^{H \times W} Ah,w=jmaxSh,w,j⇒A∈RH×W
-
Sigmoid 激活:
A ^ h , w = σ ( A h , w ) \hat{A}_{h,w} = \sigma(A_{h,w}) A^h,w=σ(Ah,w)
-
与原图像特征逐像素广播相乘,得到融合结果:
X h , w , : text-guided = X h , w , : bottleneck ⋅ A ^ h , w X^{\text{text-guided}}_{h,w,:} = X^{\text{bottleneck}}_{h,w,:} \cdot \hat{A}_{h,w} Xh,w,:text-guided=Xh,w,:bottleneck⋅A^h,w
🔹 Concat 输出
将文本引导特征与跳连分支拼接:
- X out = Concat ( X 2 , X text-guided ) ∈ R H × W × C X_{\text{out}} = \text{Concat}(X_2, X^{\text{text-guided}}) \in \mathbb{R}^{H \times W \times C} Xout=Concat(X2,Xtext-guided)∈RH×W×C
最终恢复原始通道数,作为该模块的输出。
I-Pooling Attention(双向语义增强)
I-Pooling Attention 模块包含两个互补子模块:
- Text-to-Image Attention:文本引导图像(如图所示)
- Image-to-Text Attention(Image-Pooling Attention):图像增强文本
🔹 1. Text-to-Image:文本引导图像特征(MHCA)
输入
- 多个尺度或分支的图像特征图:
X i ∈ R H × W × C , i = 1 , 2 , 3 X_i \in \mathbb{R}^{H \times W \times C},\quad i = 1, 2, 3 Xi∈RH×W×C,i=1,2,3
拼接特征:
- 拼接后形成融合图像特征图:
X concat = Concat ( X 1 , X 2 , X 3 ) ∈ R H × W × ( 3 C ) X_{\text{concat}} = \text{Concat}(X_1, X_2, X_3) \in \mathbb{R}^{H \times W \times (3C)} Xconcat=Concat(X1,X2,X3)∈RH×W×(3C)
文本输入
- 文本嵌入:
T ∈ R L × D T \in \mathbb{R}^{L \times D} T∈RL×D
多头交叉注意力 MHCA
- 图像特征作为 Query,文本作为 Key 和 Value:
X out = MHCA ( X concat , T ) X_{\text{out}} = \text{MHCA}(X_{\text{concat}}, T) Xout=MHCA(Xconcat,T)
🔹 2. Image-to-Text:图像增强文本表示(Image-Pooling Attention)
为使文本理解具备图像上下文感知能力,引入反向路径:Image → Text
图像聚合步骤:
- 从多尺度图像特征中,使用 max pooling 提取多个
3
×
3
3 \times 3
3×3 patch:
X ~ ∈ R 27 × D \tilde{X} \in \mathbb{R}^{27 \times D} X~∈R27×D
共 27 个 patch token,构成紧凑图像语义表示
更新文本表示:
- 文本嵌入为 Query,图像 patch 为 Key 和 Value:
W ′ = W + MultiHeadAttention ( W , X ~ , X ~ ) W' = W + \text{MultiHeadAttention}(W, \tilde{X}, \tilde{X}) W′=W+MultiHeadAttention(W,X~,X~)
其中:
- W ∈ R L × D W \in \mathbb{R}^{L \times D} W∈RL×D 为原始文本 embedding
- W ′ ∈ R L × D W' \in \mathbb{R}^{L \times D} W′∈RL×D 为融合图像信息后的文本 embedding
✅ 总结:双向增强
方向 | Query | Key/Value | 输出 | 作用 |
---|---|---|---|---|
Text → Image | 图像特征 | 文本 | 加权图像表示 | 引导视觉关注文本语义区域 |
Image → Text | 文本 | 图像 Patch | 加权文本表示 | 增强文本的视觉感知能力 |
📌 I-Pooling Attention 实现了图像与文本的双向交互式建模,提升视觉-语言对齐与感知能力。
why?
- 原始文本向量 W 是 CLIP 离线编码而成的;
- 可能缺少目标图像中实际存在的上下文信息;
4. 检测头(Text Contrastive Head-文本对比头)
类似于 YOLOv8 的头部,但检测类别不是直接分类,而是通过视觉特征和文本特征的相似度计算。
推理时,可以直接输入任意词汇(不是固定类别数!)。
输出:
输出 | 输出维度 | 解释 |
---|---|---|
边界框分支(Box Branch) | (4) 维 | (x_center, y_center, width, height) |
置信度分支(Objectness Branch) | (1) 维 | 该位置是否存在物体 |
区域嵌入分支(Region Embedding Branch) | (D) 维 | 区域特征向量,后续与文本特征计算相似度 |
-
预测的 bounding box(位置回归)
-
每个位置的 objectness(目标置信度)
-
区域特征向量(Region Feature Embedding):不直接分类,而是输出一个高维向量,用来跟文本向量比相似度,做开放词汇匹配
计算 区域特征向量与文本特征计算 相似度:
- 核心功能是计算目标嵌入 ek 和文本嵌入 wj之间的相似度 s k,j
- 根据以前的工作,作者依然选择解耦头的设计,用俩个3×3卷积作为box head用于回归边框值。因为要计算目标-文本的相似度,所以提出文本对比头。为了稳定区域-文本训练,目标编码e和文本编码w使用L2-Norm。
- 这部分的计算方式和CLIP的计算相似度的方式相同,都是通过矩阵相乘。
为什么“分数高”被认为是“相似”? - 余弦相似度越高,表示两个向量夹角越小,方向越接近,代表语义越相似。
5.YOLO-World 损失函数(Loss)
- 边界框回归损失(Box Loss)
- 目标性(Objectness)损失(Obj Loss)
- Region-Text Contrastive Loss
Region-Text Contrastive Loss: 就是让图像局部区域特征(Region)和对应的文本描述(Text)在高维语义空间中拉近,不相关的文本特征推远。以往检测任务是用 {边界框, 类别标签}(比如 “这块区域是猫”)。YOLO-World要做开放词汇检测,所以不能再用固定类别标签了
损失形式
-
真实匹配区域的视觉特征要与正确的文本描述更接近
-
非匹配区域的特征要与错误文本描述远离
-
采用类似于 CLIP 的 InfoNCE 对比学习思想。