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$:
- 固定窗口尺寸 $w \times h$;
- 以步长(stride) $s$ 在图像上滑动窗口;
- 对每个窗口区域 $I_{\text{crop}}$,输入 CNN 得到预测 $\hat{y}$;
- 若 $\hat{y} = 1$,则在原图对应位置绘制检测框;
- 更换更大/更小的窗口尺寸,重复上述过程(处理多尺度问题)。
✅ 优点:概念简单,易于理解。
❌ 缺点:计算成本极高——每个窗口都要独立前向传播一次 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 进行授权