第一阶段:建立完整背景知识

1.1 传统目标检测的发展脉络

1.1.1 R-CNN (2014) – Region-based CNN

核心思想:将目标检测问题分解为"区域提议 + 区域分类"两个子问题。

流程

输入图像 → Selective Search (~2000个候选区域) → 每个区域裁剪+resize → CNN提取特征 → SVM分类 + 回归

关键数学

  • Selective Search 通过层次化分组生成候选区域
  • 每个候选区域独立通过 CNN(AlexNet/VGG)提取 4096 维特征
  • 使用 SVM 进行二分类(每个类别一个 SVM)

问题

  • 2000个候选区域每个都要过 CNN → 极慢(一张图 ~47s)
  • 训练是多阶段的(CNN → SVM → Bounding Box Regressor)
  • 存储特征占用大量磁盘空间

Tensor Shape

输入: (3, 227, 227)
AlexNet: → (4096,)
2000个区域: (2000, 4096)
SVM权重: (4096, N_classes)
输出: (2000, N_classes)

1.1.2 Fast R-CNN (2015) – 共享特征

核心改进:整张图只过一次 CNN,在特征图上裁剪 ROI。

关键创新:ROI Pooling

  • 将任意大小的 ROI 映射到固定大小的特征(如 7×7)
  • 公式:bin_size = roi_size / pool_size

流程

输入图像 → CNN提取整图特征图 → ROI Pooling(每个候选区域)→ FC → [cls_score, bbox_pred]

数学改进

  • Multi-task Loss: L = L_cls + λ * L_loc
  • L_cls: Cross Entropy Loss
  • L_loc: Smooth L1 Loss(对离群值更鲁棒)
    SmoothL1(x) = { 0.5 * x²,        if |x| < 1
                   { |x| - 0.5,       otherwise
    

问题:Selective Search 仍然是瓶颈(~2s/图)

1.1.3 Faster R-CNN (2015) – Region Proposal Network

核心创新:用神经网络替代 Selective Search,即 RPN (Region Proposal Network)。

RPN 原理

特征图 → 3×3 Conv → 两个分支:
  ├─ cls: 1×1 Conv → 2k scores (前景/背景)
  └─ reg: 1×1 Conv → 4k offsets (dx, dy, dw, dh)
  其中 k = anchor数量(通常9个,3 scales × 3 ratios)

Anchor 机制

  • 在每个位置预设 9 个 anchor(3种尺度 × 3种比例)
  • 尺度:{128², 256², 512²},比例:{1:1, 1:2, 2:1}
  • 总 anchor 数:H/16 × W/16 × 9(对于 600×1000 图像约 24000 个)

Bounding Box 编码

tx = (x - xa) / wa
ty = (y - ya) / ha
tw = log(w / wa)
th = log(h / ha)

其中 (xa, ya, wa, ha) 是 anchor 的中心和宽高。

意义:首次实现端到端训练,速度提升到 ~5 FPS。

1.1.4 SSD (2016) – Single Shot Detection

核心思想:在多个尺度的特征图上直接检测,无需区域提议。

关键设计

VGG16 Backbone → 多尺度特征图:
  ├─ 38×38 (conv4_3) → 检测小目标
  ├─ 19×19 (conv7)   → 检测中小目标
  ├─ 10×10 (conv8_2) → 检测中目标
  ├─ 5×5   (conv9_2) → 检测中大目标
  ├─ 3×3   (conv10_2)→ 检测大目标
  └─ 1×1   (conv11_2)→ 检测超大目标

Default Box(类似 Anchor)

  • 每个位置预设不同尺度和比例的默认框
  • 尺度随特征图大小线性增加:sk = smin + (smax - smin) * (k-1)/(m-1)

优点:单次检测,速度快(~59 FPS)
缺点:小目标检测效果差(浅层特征语义不足)

1.1.5 YOLO 系列演进

YOLOv1 (2016) – You Only Look Once

革命性思想:将检测视为回归问题。

输入图像 (448×448)
    ↓
CNN (24层卷积 + 2层FC)
    ↓
输出: S×S×(B×5+C) 的 tensor
    = 7×7×(2×5+20) = 7×7×30

网格机制

  • 图像被分为 S×S 个网格
  • 每个网格预测 B 个边界框(5个值:x,y,w,h,confidence)
  • 每个网格预测 C 个类别的条件概率

Confidence 定义

Confidence = Pr(Object) × IoU

最终检测分数

Pr(Class_i | Object) × Pr(Object) × IoU = Pr(Class_i) × IoU

问题

  • 每个网格只预测 2 个框,小目标和密集目标检测差
  • 定位精度不如两阶段方法
YOLOv2/YOLO9000 (2017)

关键改进

  • Batch Normalization
  • High Resolution Classifier(先用 448×448 分类预训练)
  • Convolutional With Anchor Boxes(使用 anchor)
  • Dimension Clusters(K-means 聚类得到 anchor 尺寸)
  • Multi-Scale Training(每 10 个 batch 随机切换输入尺寸)

Anchor 聚类距离度量

d(box, centroid) = 1 - IoU(box, centroid)
YOLOv3 (2018)

Darknet-53 Backbone

  • 53 层卷积
  • 残差连接
  • 多尺度检测(3个尺度:13×13, 26×26, 52×52)

FPN (Feature Pyramid Network)

P5 (13×13) → Upsample → Concat(P4) → 检测中目标
P4 (26×26) → Upsample → Concat(P3) → 检测小目标
P3 (52×52) → 直接检测小目标
YOLOv4/v5 (2020)

YOLOv4 关键技术

  • CSPDarknet53 (Cross Stage Partial)
  • SPP (Spatial Pyramid Pooling)
  • PANet (Path Aggregation Network)
  • Mish 激活函数
  • Mosaic 数据增强
  • CIoU Loss
YOLOv8 (2023) – Anchor-Free

核心变化

  • Anchor-Free:不再使用预定义 anchor,直接预测到边界的距离
  • DFL (Distribution Focal Loss):用分布回归替代直接回归
  • Task-Aligned Label Assignment:联合分类和定位质量的标签分配
  • Decoupled Head:分类和回归分支解耦

DFL 原理

预测: 4 × reg_max 个值(每个边界距离一个分布)
解码: softmax → 加权求和 → 得到实际距离值

d_left = Σ(i * softmax(p_i)), i = 0, 1, ..., reg_max-1

Anchor-Free 解码

box_left = anchor_x - d_left * stride
box_top  = anchor_y - d_top * stride
box_right = anchor_x + d_right * stride
box_bottom = anchor_y + d_bottom * stride

1.1.6 DETR (2020) – Detection Transformer

革命性思想:将目标检测视为集合预测问题,去掉 anchor、NMS 等手工设计。

架构

输入图像 → CNN Backbone → Transformer Encoder → Transformer Decoder → FFN → 检测结果
                                                        ↑
                                                   N个 Object Queries

关键组件

  1. Object Queries:N 个可学习的 embedding(通常 N=100)
  2. 匈牙利匹配:在训练时,将 N 个预测与 GT 做二部匹配
  3. Set Prediction Loss
    L = Σ_i [ L_cls(ŷ_i, y_σ(i)) + L_box(ŷ_i, y_σ(i)) ]
    其中 σ 是匈牙利算法找到的最优匹配
    

Bipartite Matching Loss

L_match = Σ_i [ -λ_cls · 1_{c_i ≠ 0} · p_σ(i)(c_i) + λ_L1 · ||b_i - b̂_σ(i)||₁ + λ_GIoU · (1 - GIoU(b_i, b̂_σ(i))) ]

优点:无需 NMS,端到端
缺点:训练收敛慢(500 epochs),小目标差


1.2 Closed-set Detection 的本质

什么是 Closed-set Detection?

定义:模型只能检测训练时见过的类别集合。

训练类别集合: C_train = {person, car, dog, cat, ...}  (固定80类)
测试时: 只能输出 C_train 中的类别
如果输入一张包含 "elephant" 的图,但训练集没有 elephant → 无法检测

数学表示

模型 f: Image → { (box_i, class_i, score_i) }
其中 class_i ∈ C_train, |C_train| = N (固定)

为什么传统检测器都是 Closed-set?

  1. 分类头是固定维度的

    YOLOv8 Detect Head: Conv2d(C, 80, 1)  → 输出 80 维
    如果要支持新类别,必须重新训练整个分类头
    
  2. 标签是离散的整数索引

    label = [0, 1, 2, ...]  → 对应 person, bicycle, car, ...
    新类别需要新的索引,但输出维度已固定
    
  3. Loss 函数假设固定类别数

    BCE Loss: target ∈ {0, 1}^N  (N 固定)
    CE Loss: target ∈ {0, 1, ..., N-1}  (N 固定)
    

1.3 开放词汇检测与视觉语言模型

1.3.1 Open Vocabulary Detection (OVD)

定义:模型可以检测任意文本描述的目标,包括训练时未见过的类别。

训练: C_train = {person, car, dog}  (基类)
测试: C_test = {elephant, helicopter, guitar}  (新类)
要求: 模型能检测 C_test 中的目标,尽管训练时从未见过

数学表示

模型 f: (Image, Text) → { (box_i, text_i, score_i) }
其中 text_i 可以是任意自然语言描述

关键挑战

  • 如何从有限的训练类别泛化到无限的测试类别?
  • 答案:利用语言的语义空间作为桥梁

1.3.2 Open Set Detection vs Open Vocabulary Detection

特性 Open Set Detection Open Vocabulary Detection
未知类别处理 标记为 “unknown” 用文本描述匹配
语义理解
零样本能力
典型方法 对离群值检测 CLIP 式对齐

1.3.3 Vision-Language Model (VLM)

定义:同时理解图像和文本的模型,能在两个模态之间建立语义桥梁。

核心组件

Image Encoder: Image → v ∈ R^d
Text Encoder:  Text  → t ∈ R^d
对齐方式: cos_sim(v, t) 高 ↔ 图文匹配

代表性模型

  • CLIP (2021): 对比学习对齐图文
  • ALIGN (2021): 大规模噪声图文对
  • Florence (2021): 统一视觉基础模型
  • BLIP/BLIP-2 (2022/2023): 视觉语言预训练
  • LLaVA (2023): 视觉语言大模型

1.3.4 Multi-modal Learning

定义:同时处理多种模态(图像、文本、音频等)的学习范式。

融合层次

1. Early Fusion:  在输入层面拼接
2. Mid Fusion:    在特征层面交互(Cross-Attention)
3. Late Fusion:   在决策层面融合
4. Hybrid Fusion: 多层次融合

YOLO-World 使用的是 Mid Fusion:在 Neck 阶段通过 Cross-Attention 融合视觉和文本特征。


1.4 检测范式的演进路线

Closed-set Detection          Open-vocabulary Detection        Vision-Language Model
    (YOLOv8)                    (YOLO-World)                   (Grounding DINO)
        │                            │                              │
   固定N个类别                   文本描述任意目标               自然语言理解+定位
   Conv分类头                    对比学习头                     大语言模型驱动
   需要重训练                    零样本泛化                     多轮对话
        │                            │                              │
        └────────────────────────────┼──────────────────────────────┘
                                     │
                              Agentic Vision
                            (视觉Agent系统)
                                     │
                              Embodied AI
                           (具身智能/机器人)

演进逻辑

  1. Closed-set: 世界是有限的类别集合 → 局限性太大
  2. Open-vocabulary: 世界可以用语言描述 → CLIP 提供桥梁
  3. Vision-Language: 不仅检测,还要理解 → 需要更大的模型
  4. Agentic Vision: 不仅理解,还要行动 → 视觉+语言+决策
  5. Embodied AI: 在物理世界中行动 → 机器人+感知+控制

1.5 YOLO-World 的定位

在视觉大模型时代中的位置

速度/效率轴:
  ← 快                                    慢 →
  YOLOv8   YOLO-World   Grounding DINO   LLaVA
  (纯检测)  (开放词汇检测)  (开放词汇检测)   (视觉语言大模型)

能力轴:
  ← 弱                                    强 →
  YOLOv8   YOLO-World   Grounding DINO   GPT-4V
  (固定类别)  (文本描述)    (文本+推理)      (通用理解)

YOLO-World 的独特价值

  • 保持 YOLO 的实时性(~50 FPS)
  • 获得开放词汇能力
  • 可部署到边缘设备
  • 工业级可靠性

解决的核心问题

传统 YOLO 无法通过文本检测目标的根本原因

  1. 特征空间不兼容

    YOLOv8 分类头: visual_feature ∈ R^256 → Conv → class_score ∈ R^80
    文本 "person": text_feature ∈ R^512 (CLIP space)
    
    两个空间完全不同,无法直接比较
    
  2. 没有文本编码器

    • YOLOv8 只有图像处理管线
    • 没有将文本转换为向量的组件
  3. 没有跨模态交互

    • YOLOv8 的特征提取是纯视觉的
    • 没有机制让文本信息指导视觉特征提取

YOLO-World 的解决方案

1. 引入 CLIP Text Encoder → 将文本映射到语义空间
2. 设计 C2fAttn → 文本指导视觉特征提取
3. 设计 ContrastiveHead → 视觉特征与文本特征对比
4. 结果: visual_feature · text_feature^T → detection score

核心总结

维度 传统检测 YOLO-World
类别 固定 任意文本描述
新类别 重训练 直接指定
特征空间 纯视觉 视觉+语言对齐
泛化能力 强(零样本)
速度 接近快(~50 FPS)

面试重点

  1. Closed-set vs Open-vocabulary 的本质区别是什么?

    • Closed-set: 分类头输出固定维度,类别通过索引映射
    • Open-vocabulary: 使用对比学习,类别通过文本 embedding 定义
  2. 为什么 YOLO-World 能实现零样本检测?

    • 因为 CLIP 在大规模图文对上预训练,学到了通用的视觉-语言对齐
    • 新类别的文本描述可以映射到已学习的语义空间
  3. YOLO-World 相比 Grounding DINO 的优势是什么?

    • 速度快 10 倍以上
    • 模型小,可部署到边缘设备
    • 工业级稳定性

工业重点

  1. 工业场景中,类别往往是动态变化的(新产品、新缺陷)
  2. Closed-set 检测器每次添加新类别都需要重新标注、训练、部署
  3. YOLO-World 只需要修改文本描述即可,极大降低维护成本
  4. 边缘部署能力是工业落地的关键

可能改进方向

  1. 更好的文本编码器(更大的 CLIP 模型)
  2. 更高效的跨模态融合(减少计算量)
  3. 支持更长的文本描述(CLIP 限制 77 tokens)
  4. 与大语言模型结合(LLM 生成检测 prompt)
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐