1. Introduction to object recognition
主要介绍“什么是视觉识别”以及“为什么它很难”。
- 不同的识别任务 (Visual Recognition Tasks):
- 分类 (Classification): 图像中是否包含某物体?(Yes/No 问题,例如:这是一栋建筑吗?这是海滩吗?)
- 检测 (Detection): 图像包含什么物体?它在哪里?(通常用边界框 Bounding Box 表示,例如:车在哪里?)
- 分割/定位 (Localization/Segmentation): 更精确的像素级定位。
- 属性估计 (Attribute Estimation): 估计语义或几何属性(例如:建筑是45度角、人是背影、警车是侧面)。
- 活动/事件识别 (Activity recognition): 这些人在做什么?
- 分类 vs. 单个实例识别: 区分一般类别(“塔”)与特定实例(“比萨斜塔”)。
- 应用场景 (Applications):
- 计算摄影、辅助技术、监控、安防、辅助驾驶等。
- 面临的挑战 (Challenges):
- 类别数量巨大(10,000 - 30,000类)。
- 视觉变化 (Variations):
- 视角变化 (Viewpoint variation)
- 光照变化 (Illumination)
- 尺度/大小变化 (Scale)
- 形变 (Deformation)
- 遮挡 (Occlusion)
- 背景杂乱 (Background clutter)
- 类内差异 (Intra-class variation): 同一类物体(如椅子)长相各异。
1.1 Representation
How to represent an object category; which classification scheme?
**采样策略:**我们应该在哪些区域进行特征提取:
Interest Operators(兴趣点算子):只在图像中“独特“的地方提取特征(比如角点,斑点)。优点是计算量小,特征显著
Dense, uniformly(密度均匀采样):不管图像内容,每隔固定的距离就采取一次特征
Multiple interset operators(多种兴趣点算子):结合多种不同的检测器(例如有的检测角点,有的检测圆形斑点),以获得丰富的信息
Randomly(随机采样):随机选取位置进行提取特征
外观与位置:
- Appearance only(仅外观,词袋模型)
例如模型认为只有图像中包含“眼睛”、“鼻子”等特征,那么它就是人脸,不关心鼻子是否在嘴巴上面。
优点:简单,对物体变形或者遮挡有鲁棒性。缺点:容易把一对散乱的零件误判成完整物体
- Location and appearance(外观+位置)
模型不仅要求外观特征,还要求特征之间的几何关系正确
优点:识别更精准,能排除结构错误的误报;缺点:计算复杂,模型设计更难
1.2 Learning
这张图片紧接着上一张 PPT,深入讲解了 Object Recognition(物体识别) 三大核心步骤中的第二步:Learning(学习/训练阶段)。
这一页主要探讨在设计一个机器学习系统时,开发者必须做出的关键决策和面临的挑战。我们可以将其拆解为以下几个核心要点:
1. 学习参数 (Learning Parameters): 你的目标是什么?
一个核心问题:”What are you maximizing?”(你在最大化什么指标?)
这其实是在区分两种主流的建模流派:
- Generative (生成式模型 - Gen.):
- 目标: 最大化 Likelihood (似然度)。
- 含义: 试图完全理解物体长什么样。比如,学习“摩托车”的颜色分布、形状分布。如果它能画出一辆摩托车,就说明它学好了。
- Discriminative (判别式模型 - Disc.):
- 目标: 最大化 Performances on train/validation set (训练/验证集上的性能)。
- 含义: 试图找到“摩托车”和“非摩托车”之间的界限。它不在乎摩托车具体长啥样,只在乎怎么把摩托车和背景区分开(分类边界)。这是目前深度学习(如 CNN)最主流的方法。
2. 监督级别 (Level of Supervision): 老师教得有多细?
这是指训练数据的标签质量。图片的摩托车示例非常直观地展示了不同级别的标注:
- Manual segmentation (手动分割): 对应图中摩托车边缘的绿色轮廓。
- 这是最精细的(Pixel-level),告诉机器每一个像素是不是摩托车。成本最高。
- Bounding box (边界框): 对应图中的红色方框。
- 告诉机器摩托车大概在这个框里。成本中等,是目前目标检测(Object Detection)的主流标注方式。
- Image labels (图像标签):
- 只给一张图,打个标签说“这里面有摩托车”,但不告诉具体在哪。成本最低,但也最难学。
- Noisy labels (噪声标签):
- 数据里可能混有标错的图(比如把自行车标成摩托车)。模型需要有抗干扰能力。

3. 训练模式 (Batch / Incremental)
- Batch (批量学习): 收集好所有 1 万张图,一次性扔给模型训练。这是最常见的。
- Incremental (增量学习/在线学习): 数据是一点点来的。今天学 10 张,明天又来 10 张,模型需要不断更新自己,且不能忘了以前学的(这很难,容易发生 Catastrophic Forgetting)。
4. 先验知识 (Priors)
- 在开始学习之前,我们是否要给模型灌输一些人类的常识?
- 例如:告诉模型“摩托车通常在路面上,不会飞在天上”或者“人脸通常是椭圆的”。引入 Priors 可以让模型在数据较少时学得更好。
5. 训练图像的问题 (Training Images)
这里列出了两个实际训练中的经典坑:
- Issue of overfitting (过拟合问题):
- 模型太聪明了,把训练集的每一张图都“背”下来了,导致考试(测试集)时遇到没见过的图就不认识了。
- Negative images for discriminative methods (判别式方法的负样本):
- 这是一个非常关键的概念。如果你用判别式方法(如 SVM 或 CNN),你不能只给模型看“摩托车”的照片。
- 你必须给它看大量的**“非摩托车”**(Negative images),比如风景、猫、桌子。
- 为什么? 因为判别式模型学的是边界。如果只看正样本,它无法建立边界,它会认为全世界所有东西都是摩托车。
1.3 Recognition
Task:classification,detection
搜索策略: 滑动窗口
- 十分简单
- 计算复杂度$x,y,S \text{(尺度)},\theta \text{(角度)},N\text{(类别数量)}$
Localization(定位问题)
- Objects are not boxes:狗的轮廓是不规则的星座,用矩形虽然很方便,但是包含了很多背景噪声
- False Positive:由于背景错乱,滑动窗口很容易把一块像狗的石头认为是狗
NMS
只保留分数最高的框,把其他跟他重叠的其他框都删掉
2. Bag of Feature models
Origin 1: Texture recognition,统计学的方法来识别纹理之间的相似性
Origin 2: Bag of word model
2.1 Bag of Feature Steps
- 提取特征
- 学习 “visual vocabulary”——与文本不同,”word”是未知的
- 用“visual words” 的频率表示图像
2.2 Feature Extraction
用网格或者兴趣区域来确定特征提取的区域
在区域内检测 patches,再归一化patch,最后计算patch 向量
2.3 Learning the visual vocabulary
将所有的图像提取的特征向量放在一起,利用K-Means聚类算法,每个聚类中心就代表一个”Visual Word”,K个中心就形成了我们的码本(Codebook)
Issue:
- 如何选择词汇量的大小
- Too Small:不能代表所有的patch
- Too Big:容易过拟合
- 计算效率
- Vocabulary Tree
2.4 Bag of word representation
用统计直方图来描述一张新图像
过程:
对于一张新图像,提取其所有局部特征。
计算每个特征与码本中哪个“视觉单词”最相似(欧氏距离最近)。
将该特征归类到那个单词下(这一步叫向量量化)。
统计频率: 统计这张图中,每个视觉单词出现了多少次。
输出: 得到一个长度为 K 的直方图向量(例如:[单词1出现5次, 单词2出现0次, …, 单词K出现12次])。
2.5 Spatial pyramid representation
为了解决丢失空间信息的问题,课件中提到了 Lazebnik 等人 (CVPR 2006) 提出的空间金字塔方法:
- 做法: 不直接统计整张图,而是将图像切分成
1*12*23*3的网格。 - 统计: 在每个小网格内分别计算 BoF 直方图。
- 合并: 将所有层级、所有网格的直方图拼接起来。
- 结果: 这样既保留了局部特征的统计特性,又引入了粗略的空间位置信息,显著提升了场景分类的准确率。