文章

03 目标检测(Object Detection)

03 目标检测(Object Detection)

03 目标检测(Object Detection)

一、课程目标

本节旨在讲解如何构建一个 基于滑动窗口(Sliding Window)的卷积神经网络目标检测系统,从基础的图像分类与定位任务出发,逐步过渡到多目标检测场景。


二、前置知识回顾

在进入目标检测前,课程已覆盖两个相关任务:

  • 图像分类(Image Classification) :判断图像中是否包含某类物体(如“是否有车”)。
  • 对象定位(Object Localization) :不仅判断类别,还输出边界框参数 $(b_x, b_y, b_h, b_w)$,实现“在哪里 + 是什么”。

目标检测 = 多实例的对象定位 + 分类。


三、滑动窗口目标检测算法(Sliding Window Detection)

1. 基本思想

将整张图像划分为多个局部区域(窗口),对每个窗口单独运行一个预训练好的分类器(通常是 CNN),判断该区域内是否包含目标(如汽车)。

2. 算法步骤

(1)构建训练集

  • 收集大量裁剪后的图像样本:

    • 正样本:图像几乎被目标(如汽车)完全占据;
    • 负样本:不含目标的背景图像。
  • 训练一个 CNN 分类器:

    \[\text{输入:} x \in \mathbb{R}^{H \times W \times 3}, \quad \text{输出:} \hat{y} \in \{0, 1\}\]

(2)滑动窗口检测(测试阶段)

对一张完整测试图像 $I$:

  1. 固定窗口尺寸 $w \times h$;
  2. 步长(stride) $s$ 在图像上滑动窗口;
  3. 对每个窗口区域 $I_{\text{crop}}$,输入 CNN 得到预测 $\hat{y}$;
  4. 若 $\hat{y} = 1$,则在原图对应位置绘制检测框;
  5. 更换更大/更小的窗口尺寸,重复上述过程(处理多尺度问题)。

✅ 优点:概念简单,易于理解。
❌ 缺点:计算成本极高——每个窗口都要独立前向传播一次 CNN。


四、核心问题:计算效率低下

为什么传统滑动窗口 + CNN 不实用?

  • 卷积网络单次推理成本远高于传统线性分类器(如 SVM + HOG);
  • 若使用小步长(如 $s=1$)和多尺度窗口,窗口数量可达数万甚至数十万;
  • 导致冗余计算严重:相邻窗口高度重叠,但 CNN 仍重复提取相似特征。

📌 举例:一张 $1000 \times 1000$ 图像,用 $64 \times 64$ 窗口、步长 8,仅单尺度就有约 $(1000/8)^2 \approx 15,625$ 个窗口!


五、解决方案预告(下节课内容)

虽然本节未展开,但课程明确指出:

计算成本问题已有很好解决方案” —— 指的是 将全连接层替换为卷积层,从而实现 卷积化的滑动窗口(Convolutional Sliding Window)

其核心思想是:

  • 利用卷积操作的平移不变性计算共享性
  • 一次性对整张图像做前向传播,等效于同时处理所有滑动窗口
  • 极大提升效率,为 YOLO、SSD 等现代检测器奠定基础。

六、数学表达(KaTeX 兼容)

1. 定位输出向量(回顾)

对于单目标定位,标签向量为:

\[y = \begin{bmatrix} p_c \\ b_x \\ b_y \\ b_h \\ b_w \\ c_1 \\ c_2 \\ c_3 \end{bmatrix}\]

其中:

  • $p_c = 1$ 表示存在目标,否则 $p_c = 0$;
  • $(b_x, b_y)$ 是边界框中心坐标(归一化到 $[0,1]$);
  • $b_h, b_w$ 是高和宽(也归一化);
  • $c_i$ 是类别 one-hot 编码。

2. 滑动窗口预测

对每个窗口位置 $(i,j)$,CNN 输出:

\[\hat{y}_{ij} = f_{\theta}(I[i:i+h, j:j+w])\]

若 $\hat{y}_{ij} > \tau$(阈值),则在 $(i,j)$ 处标记检测框。

3. 多尺度检测

设窗口尺寸集合为 ${S_1, S_2, \dots, S_K}$,则总检测结果为:

\[\mathcal{D} = \bigcup_{k=1}^{K} \left\{ (x, y, S_k) \mid f_{\theta}(I[x:x+S_k^h, y:y+S_k^w]) = 1 \right\}\]

七、总结要点

项目内容
任务目标在图像中同时完成“分类 + 定位”,支持多目标
核心方法滑动窗口 + 预训练 CNN 分类器
关键步骤裁剪训练 → 滑动窗口 → 多尺度遍历 → 合并结果
主要缺陷计算冗余大、速度慢、难以实时
后续方向卷积化滑动窗口(全卷积网络)、YOLO、RPN 等高效架构

💡 学习建议:滑动窗口虽已过时,但它是理解现代检测器(如 R-CNN、YOLO)演进逻辑的重要起点。务必掌握其思想局限与优化动机。

本文由作者按照 CC BY 4.0 进行授权