本笔记覆盖当前课程笔记中的三部分内容:
Recognition-1(视觉识别基础、局部特征、BoW/SPM)PixelComputing(像素级分割、GraphCut/Matting、Inpainting)Detection(传统检测到深度检测:R-CNN/YOLO/SSD/FPN)
0. 复习策略(先看这个)¶
- 第一轮:看“任务定义 + 核心公式 + 方法优缺点”。
- 第二轮:按“方法演进链”串起来(为什么前者不够、后者解决了什么)。
- 第三轮:重点记高频概念:
Harris/SIFT、BoW-SPM、GraphCut/GrabCut、RPN/Anchor/FPN、one-stage vs two-stage。
1. Recognition(识别)¶
1.1 任务与挑战¶
- 图像分类目标:学习 \(f: \mathbb{R}^{H\times W\times C} \to \{0,1\}^K\)。
- 难点来源:
- 几何变化:尺度、旋转、视角。
- 外观变化:光照、形变、遮挡。
- 语义变化:类别粒度与上下文依赖。
核心词:semantic gap(像素到语义鸿沟)。
1.2 BoW(Bag-of-Words)视觉模型¶
流程:
- 兴趣点检测
- 局部描述子提取
- 词典学习(K-means)
- 量化与直方图聚合
- 分类(如线性 SVM)
核心公式:
优缺点:
- 优点:结构清晰、可解释性强、在小数据和传统任务中有效。
- 缺点:硬量化有误差,空间结构信息丢失。
1.3 兴趣点与描述子(Harris + SIFT)¶
Harris 角点¶
结构张量:
响应函数:
判别直觉:
- 平坦区:\(\lambda_1,\lambda_2\) 都小
- 边缘:一大一小
- 角点:都大且接近
局限:对尺度变化敏感。
SIFT(重点)¶
四步:
- DoG 尺度空间极值检测
- 关键点精定位(去低对比度点、去边缘响应)
- 主方向分配(旋转不变)
- 128 维描述子构建(4x4x8)
关键公式:
匹配常用比值检验(Lowe ratio):
1.4 空间信息:SPM / PMK¶
SPM 解决 BoW 不含位置信息的问题:
- Level 0: \(1\times1\)
- Level 1: \(2\times2\)
- Level 2: \(4\times4\)
总维度:
考试常问:为什么 SPM 比纯 BoW 好。答:保留了粗到细的空间布局信息。
1.5 SIFT / PMK / SPM 三者关系(必会)¶
一句话概括:
SIFT:提“稳定局部特征”。PMK:比“两个特征集合”的多分辨率相似度。SPM:把 PMK 思想放到图像空间网格中,形成可训练向量。
从直觉到流程:
SIFT:DoG 找关键点 -> 去不稳定点 -> 主方向对齐 -> 128 维描述子。PMK:粗层到细层做直方图交集,细层更精确、权重更高。SPM:SIFT -> BoW 量化 -> 1x1/2x2/4x4... 分层统计 -> 拼接/加权。
经典识别管线(高频):
- 用
SIFT提描述子 - K-means 量化成视觉词(BoW)
- 用
SPM加入粗到细空间信息 - 用 SVM 分类
维度速记:
例:K=200, L=2,维度 4200。
1.6 玩具数据流(手算思维)¶
设 K=4, L=1,图像 A 的 BoW 统计是:
再统计四个象限(2x2)并拼接,得到固定长度 SPM 向量:
若比较图像 A 与 B,在两层上的直方图交集分别为 \(I_0\)(粗层)与 \(I_1\)(细层),常见二层 PMK 可记为:
直觉:粗层给“兜底相似”,细层给“位置一致性”。
2. Pixel Computing(像素级理解)¶
2.1 Pixel labeling 的三类输出¶
- 离散标签:前景/背景、语义类
- 连续值:\(\alpha\) matting、深度
- 结构关系:图模型里的 pairwise 约束
2.2 无监督分割¶
K-means 分割¶
思路:像素特征聚类(常见 \((r,g,b,\lambda x,\lambda y)\))。
目标:
注意:\(\lambda\) 控制空间连贯性,过小会碎,过大会过平滑。
Mean Shift¶
思路:向密度峰值迭代移动;不需预设 K,但需带宽 \(h\)。
要点:h 决定粒度,比 K 更关键。
详细版(建议按“窗口均值漂移”去理解):
- 把每个像素/点看作特征空间中的点(可含颜色+位置)
- 在当前点周围放一个核窗口(带宽 \(h\))
- 计算窗口内样本的加权均值,作为新位置
- 重复直到位移很小(收敛到某个 mode)
- 收敛到同一 mode 的点归为一类
常见更新公式:
参数直觉(高频):
- \(h\) 小:mode 多,分割细,易碎片化
- \(h\) 大:mode 少,分割粗,易过合并
优缺点:
- 优点:不预设簇数;能处理非球形簇;思想直观
- 缺点:对 \(h\) 敏感;高维/大样本下计算开销高
一句话:Mean Shift 不是“无参数”,只是“无 K”,核心参数是带宽 \(h\)。
2.3 图分割:Normalized Cut(Ncut)¶
图建模:节点=像素/超像素,边权=相似度。
松弛后求解广义特征值问题:
常取第二小特征向量划分。
2.4 交互式抠图:GraphCut / GrabCut / Lazy Snapping¶
GraphCut(二值分割)¶
MRF 能量:
D_i:数据项(前景/背景颜色模型)V_ij:平滑项(相邻像素标签一致性)
GrabCut(重点)¶
- 输入:bounding box(再配合少量笔刷)
- 核心:
GMM + iterated graph cut(类似 EM 交替优化) - 优势:交互负担低、实用性强
Lazy Snapping¶
- 用少量 strokes + superpixel 加速
- 速度更好,但边界精度受 superpixel 粒度影响
2.5 Matting 与 Poisson Matting¶
合成模型:
难点:单像素 7 个未知(\(F\)3 + \(B\)3 + \(\alpha\)1)但仅 3 个观测(RGB)。
Poisson Matting 走梯度域:
配合 trimap 的边界条件求解。
2.6 Inpainting(图像修补)¶
Exemplar-based(Criminisi)关键不是“往里填”,而是“按结构优先填”:
- \(C(p)\):置信度
- \(D(p)\):结构延拓项(等照线方向)
3. Detection(检测)¶
3.1 基本概念¶
- 检测 = 分类 + 定位
- 输出:\((b_i,c_i,s_i)\)
- 几何评估:IoU
3.2 传统检测¶
Viola-Jones¶
三件套:
- 积分图(矩形特征 O(1) 求和)
- AdaBoost(特征选择 + 强分类器)
- Cascade(前级快筛负样本)
为什么经典:在当年实现了实时与极低误检。
为什么快(考试建议按这条背):
Haar-like特征:矩形亮暗差,候选很多但计算简单。Integral Image:任意矩形和四次访问即可得到,单特征近似O(1)。AdaBoost:从十万级候选特征中迭代挑出有效少数。Cascade:大部分背景窗口前几级就淘汰,省掉后续开销。
积分图矩形和速记:
级联整体指标(乘法效应):
其中 \(d_i\) 是单级检测率,\(f_i\) 是单级误检率。
3.2.1 AdaBoost 如何筛“有效特征”¶
每轮在所有候选弱分类器中,找当前加权错误率最小者:
选中后赋权:
更新样本权重(错分样本权重上升):
最终强分类器:
一句话:Boost 是“迭代式特征筛选”,每轮都更关注难样本。
HOG + SVM¶
HOG 三步:
- 梯度
- cell 方向直方图
- block 归一化
线性分类:
加 hard negative mining 与 NMS 构成完整检测系统。
HOG 从图到框的完整流程(会问):
- 建图像金字塔(多尺度)
- 每尺度滑窗
- 每窗口提 HOG(梯度 -> cell 直方图 -> block 归一化)
- SVM 打分:\(w^\top x+b\)
- 阈值筛候选
- NMS 去重得最终框
经典参数速记(行人):
window=64x128cell=8x8block=2x2 cellsbins=9
维度来源:
- cells 数:
8x16 - blocks 数:
7x15=105 - 每 block:
2x2x9=36 - 总维度:
105x36=3780
L2-Hys 归一化:
DPM(可形变部件模型)¶
- root + parts + deformation penalty
- latent SVM 训练(部件位置是潜变量)
意义:在深度学习前把“形变建模”做到了很强。
3.3 深度检测演进(高频主线)¶
R-CNN -> Fast R-CNN -> Faster R-CNN
R-CNN¶
- Selective Search 出 proposals
- 每个 proposal 单独过 CNN
- SVM 分类 + bbox 回归
- 问题:慢、训练分裂、存储重
Fast R-CNN¶
- 整图一次卷积
- RoI Pooling 抽固定大小特征
- 分类与回归联合训练
- 瓶颈仍在外部 proposal
Faster R-CNN(核心考点)¶
- 引入 RPN 生成 proposals
- 与检测头共享 backbone
- Anchor 机制覆盖多尺度多比例
RPN 对每个 anchor 预测:
- objectness(前景/背景)
- bbox 偏移 \((t_x,t_y,t_w,t_h)\)
bbox 参数化:
3.3.1 R-CNN / Fast R-CNN / Faster R-CNN 详细讲解¶
先记主线:三代方法本质都在做两件事
- 找候选区域(proposal)
- 对区域做分类 + 框回归
差异在于:proposal 怎么来、卷积特征是否共享、能否端到端训练。
A. R-CNN(2014):把 CNN 首次成功引入检测¶
为什么出现:
传统 HOG/DPM 表达能力不够,R-CNN 用预训练 CNN 特征替代手工特征,大幅提升精度。
流程(四步):
- 用 Selective Search 生成约 2k proposals
- 每个 proposal 裁剪/warp 到固定大小(如 224x224)
- 每个 proposal 单独跑一遍 CNN,取 fc 特征
- 类别 SVM 分类 + 类别相关 bbox 回归
训练是分阶段的:
- 先在分类数据上预训练 CNN
- 再在检测数据上 fine-tune CNN
- 冻结特征后训练每类 SVM
- 最后训练 bbox regressor
优点:
- 精度相对传统方法显著提升(里程碑)
缺点(致命):
- 极慢:每张图每个 proposal 都要独立 CNN forward
- 存储开销大:常把每个 proposal 特征离线落盘
- 训练管线碎片化:多阶段,不是端到端
一句话:精度上去了,但计算和工程代价太高。
B. Fast R-CNN(2015):共享卷积,解决“重复计算”¶
核心改进:
- 整张图只做一次 CNN,得到 feature map
- proposal 映射到 feature map 上,用 RoI Pooling 取固定尺寸特征
- 在一个网络里同时做 softmax 分类和 bbox 回归(multi-task)
RoI Pooling 做什么:
- 输入任意大小 RoI
- 划分为固定网格(如 7x7)
- 每格 max pooling
- 输出固定形状特征给全连接层
多任务损失(常见形式):
直觉:背景只算分类损失,前景再算定位损失。
Fast R-CNN 相比 R-CNN 的提升:
- 速度快很多(卷积共享)
- 不需要离线存储 proposal 特征
- 能端到端训练检测头
仍有瓶颈:
- proposal 还依赖 Selective Search(CPU 慢),整体被外部 proposal 拖住
一句话:检测网络快了,但 proposal 仍慢。
C. Faster R-CNN(2015):把 proposal 也学出来¶
核心创新:RPN(Region Proposal Network)
- 在共享 feature map 上滑动小网络(常见 3x3 conv)
- 每个位置放 k 个 anchors(尺度 + 长宽比组合)
- 对每个 anchor 预测:
- objectness(前景/背景)
- bbox offset(4 个回归量)
- 经 NMS 筛出高质量 proposals,送入 RoI Pooling + 检测头
anchor 机制作用:
- 显式覆盖多尺度与多长宽比
- 网络只需学习“相对偏移”,比直接生框更稳定
RPN 标注规则(经典):
- 正样本:IoU > 0.7 或与某 GT 最高 IoU
- 负样本:IoU < 0.3
RPN 损失(常见写法):
其中 \(p_i^\star=1\) 才计算回归项。
训练方式(论文经典):四步交替训练(RPN 与 Fast R-CNN 交替微调);工程上也常见近似联合训练。
优势:
- proposal 几乎“免费”(共享 backbone)
- 真正形成统一高效的两阶段检测框架
- 精度和速度都很均衡,长期作为强基线
D. 三者对比(考试直接背)¶
-
R-CNN:proposal 外部 + 每个 proposal 独立 CNN
优点:首次把深度特征引入检测并大幅提精度
缺点:慢、重、非端到端 -
Fast R-CNN:proposal 外部 + 全图共享卷积 + RoI Pooling
优点:大幅加速,训练更统一
缺点:仍受 Selective Search 速度限制 -
Faster R-CNN:proposal 内生(RPN)+ 共享特征
优点:速度/精度/工程性最平衡,经典两阶段范式
缺点:相较单阶段(如 YOLO)通常仍更慢
可记成一句话:
R-CNN 解决“特征不强”,Fast R-CNN 解决“重复卷积”,Faster R-CNN 解决“proposal 太慢”。
E. 易错点补充¶
- RPN 只做“前景/背景 + 框”,不做最终多类别识别。
- Anchor 不是最终框,只是参考框。
- RoI Pooling 有量化误差,RoI Align 是后续改进。
- 两阶段并不是“先分类后回归”,而是每个 RoI 上分类与回归联合学习。
- Faster R-CNN 是 two-stage:
RPN stage + RoI head stage。
3.4 One-stage:YOLO / SSD¶
YOLO v1¶
- 把检测视作单次回归(grid 负责中心落入目标)
- 快(实时),但小目标与定位精度较弱
详细版(考试常问):
核心思想:
- 将图像划分为
S x S网格 - 若目标中心落在某 grid,该 grid 负责预测该目标
- 每个 grid 预测
B个框和C类概率
经典 v1 设定(VOC):
S=7, B=2, C=20- 输出张量维度:\(7\times7\times(B\cdot5+C)=7\times7\times30\)
每个框输出:
其中 confidence 常可理解为目标存在概率与定位质量(IoU)相关量。
YOLO v1 损失直觉:
- 位置损失:中心点坐标误差
- 尺寸损失:对 \(w,h\) 用开方(减弱大框主导)
- 置信度损失:区分有目标/无目标
- 类别损失:只在负责目标的网格上计算
为何快:
- 单阶段,端到端,一次前向同时出分类与定位
- 不需要 RPN/Selective Search 这类外部 proposal
v1 局限(高频):
- 每个网格可表达目标数量有限,密集小目标吃亏
- 对小目标和精细定位较弱
- 用统一回归损失,分类/定位权衡不够细
一句话:YOLO 把检测从“proposal+分类”改成“全图直接回归”,速度极强。
3.4.1 YOLO 与 Faster R-CNN 对比速记¶
- 范式:YOLO 单阶段;Faster R-CNN 两阶段
- 速度:YOLO 通常更快
- 精度:经典设定下 Faster R-CNN 通常更高(尤其小目标/定位)
- 工程取舍:实时场景偏 YOLO,高精度场景偏两阶段
- 共性:都依赖特征图上的位置语义,并都使用 NMS 做后处理
SSD¶
- default boxes(anchor)
- 多层 feature map 多尺度预测
- hard negative mining 缓解正负不平衡
结论:比 YOLO v1 更稳,精度速度折中更好。
3.5 FPN 与类别不平衡¶
FPN¶
- top-down + lateral connection
- 融合“深层语义强”和“浅层分辨率高”
- 多尺度检测几乎标配组件
Focal Loss(RetinaNet)¶
目的:降低易分类负样本权重,强调难例,提升 one-stage 精度。
4. 高频考点清单(冲刺版)¶
Harris与SIFT的关系与区别(尺度不变性来自哪里)BoW的局限,SPM如何补空间信息SIFT -> BoW -> SPM -> SVM经典识别流水线PMK与SPM关系(一般集合核 vs 图像空间特化)K-means / Mean Shift / Ncut的建模差异GraphCut的 unary/pairwise 含义与 maxflow 求解思想GrabCut为什么实用(bbox + GMM + 迭代)- Matting 方程
I=\alpha F+(1-\alpha)B的欠定性来源 HOG+SVM管线与 hard negative mining- HOG 经典参数与
3780维来源 Viola-Jones为什么快(积分图 + Boost + Cascade)- AdaBoost 特征筛选机制(错率最小 + 权重更新)
R-CNN -> Fast -> Faster每一步解决的瓶颈RPN + Anchor + Proposal + NMS全流程YOLO/SSD/Faster的精度速度取舍FPN的结构与作用Focal Loss解决的一阶段类别不平衡问题
5. 易混点速记¶
Anchor不是最终框,是参考框;回归后才是 proposal/pred box。RoI Pooling有量化误差,RoI Align用插值缓解。NMS是后处理去重,不是训练损失。IoU用于匹配与评估,和分类分数不是同一件事。BoW是统计词频,不建模词序;SPM通过网格层次加入粗空间结构。GraphCut是二值标签优化;Matting是连续 \(\alpha\) 估计。
6. 最后 1 天背诵顺序(建议)¶
- 检测主线:Viola-Jones → HOG/DPM → R-CNN 家族 → YOLO/SSD/FPN/RetinaNet
- 识别主线:Harris → SIFT → BoW → SPM
- 像素主线:K-means/MeanShift/Ncut → GraphCut/GrabCut → Matting/Inpainting
- 把所有“高频公式”默写一遍(IoU、Harris、Ncut、GraphCut、bbox reg、Focal Loss)