一、传统ML基础

1.1 核心算法概览

算法 类型 CV应用 特点
kNN 监督-分类/回归 图像分类(简单) 无训练,需存储所有样本
SVM 监督-分类 行人检测/HOG分类 小样本强,核函数强大
决策树/RF 监督-分类/回归 特征选择/人脸检测 集成学习,抗过拟合
K-Means 无监督-聚类 图像分割/特征量化 简单但需指定K
GMM 无监督-聚类 背景建模/运动分割 软聚类
PCA 无监督-降维 人脸识别(Eigenface) 线性降维最佳
LDA 监督-降维 FisherFace 有监督降维
t-SNE 无监督-降维 特征可视化 非线性可视化
HMM 时序模型 动作识别/手势 时间序列建模
CRF 结构化预测 图像分割 上下文建模

1.2 SVM (支持向量机) ⭐⭐⭐

核心思想: 找到最大间隔超平面

        原始空间              核空间(高维)
     ───●───●─○──       φ(●) ● ●     φ(○) ○
     ──●──○─────    →    ─────────    ────────
        ○──○───              ● ●        ● ○
     (不可分)           (线性可分)

核函数:

公式 参数 特点
线性 K(x,y) = x·y - 无映射,快速
多项式 K(x,y) = (x·y + c)^d c, d 有限维度映射
RBF K(x,y) = exp(-γ) x-y
Sigmoid K(x,y) = tanh(a(x·y)+b) a, b 类似神经网络
from sklearn import svm

# HOG + SVM 行人检测
clf = svm.SVC(kernel='rbf', C=1.0, gamma='scale')
clf.fit(X_train, y_train)

# OpenCV 内置 SVM + HOG
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

1.3 K-Means 与 图像量化

# 颜色量化 (压缩)
Z = img.reshape((-1, 3))  # RGB像素作为特征
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
_, labels, centers = cv2.kmeans(Z, K=16, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
centers = np.uint8(centers)
res = centers[labels.flatten()]
quantized = res.reshape((img.shape))

特征量化: K-Means构建视觉词典 (Bag-of-Visual-Words)

SIFT特征 → K-Means → 视觉单词(Codebook) → 直方图 = 每张图表示
   N×128       K=1000        1000个中心           1×1000

1.4 PCA (主成分分析) ⭐

本质: 找到数据方差最大的方向(特征向量)

输入: X (N×D, N个D维样本)
中心化: X̃ = X - μ
协方差: C = X̃ᵀX̃ / (N-1)  (D×D)
SVD:   C = UΣUᵀ
投影: Y = X̃ · Uₖ           (降维到k维)
# Eigenface 人脸识别
from sklearn.decomposition import PCA
pca = PCA(n_components=100)  # 降到100维
X_pca = pca.fit_transform(X)
# explained_variance_ratio_ 查看信息保留比例

1.5 Bag of Visual Words (BoVW)

流程: 图像 → 特征提取(SIFT) → 词典构建(K-Means) → 量化 → 直方图 → SVM分类

图像1: {SIFT₁, SIFT₂, ..., SIFTᵢ}  →  [2, 0, 1, ..., 5]   SVM → 类别A
图像2: {SIFT₁, SIFT₂, ..., SIFTⱼ}  →  [0, 3, 0, ..., 1]   SVM → 类别B
                    │                        ↑
              K-Means (K=500)          空间金字塔
              视觉词典                     (SPM)

二、传统视觉应用

2.1 人脸检测 - Viola-Jones

论文: Rapid Object Detection using a Boosted Cascade of Simple Features (2001)
开创性: 第一个实现实时人脸检测

三大创新:

  1. Haar-like特征(矩形特征,积分图加速)
  2. AdaBoost(级联弱分类器)
  3. 级联结构(逐级过滤背景)
Haar特征:
     ████░     ██░░     ██░█░     █░░░
     ████░     ██░░     ░░██░     ██░░
     (边缘)  (水平)  (中心)  (对角线)

级联检测: 输入 → C1 → C2 → C3 → ... → 目标
                     ↓回绝检测    ↑ 每一级拒绝大部分背景
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30,30))

2.2 行人检测 - HOG + SVM(2.1节已详述)

2.3 图像检索

Pipeline:

查询图像 → 特征提取(SIFT/VLAD) → 特征向量 → 相似度搜索(余弦距离) → 排序结果

大规模检索: VLAD (Vector of Locally Aggregated Descriptors)

  • 比BoVW更紧凑
  • 存储每个视觉单词的残差和
  • 配合近似最近邻搜索 (FLANN/IVF)

2.4 背景建模

方法 原理 适用场景
帧差法 frame(t) - frame(t-1)
MOG/MOG2 高斯混合模型建模像素 动态背景(树/水)
KNN 核密度估计 更鲁棒的背景建模
GMG 贝叶斯推断 快速初始化
backSub = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=16, detectShadows=True)

2.5 光流 (经典方法)

方法 类型 特点
Lucas-Kanade 稀疏 跟踪特征点,假设小运动
Horn-Schunck 稠密 全局平滑约束
Farneback 稠密 多项式展开,OpenCV实现
# Lucas-Kanade 稀疏光流
lk_params = dict(winSize=(15,15), maxLevel=2,
                 criteria=(cv2.TERM_CRITERIA_EPS|cv2.TERM_CRITERIA_COUNT, 10, 0.03))
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, gray, p0, None, **lk_params)

# Farneback 稠密光流
flow = cv2.calcOpticalFlowFarneback(prev, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

三、特征选择与评估

方法 原理 特点
Filter 统计指标(卡方/互信息) 独立于分类器
Wrapper RFE(递归消除) 依赖分类器
Embedded Lasso/Ridge 训练时选择
# 卡方检验特征选择
from sklearn.feature_selection import SelectKBest, chi2
selector = SelectKBest(chi2, k=100)
X_selected = selector.fit_transform(X, y)

📺 推荐视频

内容 链接
李航《统计学习方法》讲解 B站搜索
SVM详解 (StatQuest) https://www.youtube.com/watch?v=efR1C6CvhmE
PCA主成分分析 (StatQuest) https://www.youtube.com/watch?v=FgakZw6K1QQ
Viola-Jones人脸检测 https://www.youtube.com/watch?v=uEJ71VlVmMQ
Bag of Visual Words https://www.youtube.com/watch?v=uxkhqPBIQ5Y

📚 推荐书籍

书名 作者 说明
统计学习方法 (第2版) 李航 经典ML必读
The Elements of Statistical Learning (ESL) Hastie et al. 统计ML标准教材
Pattern Recognition and Machine Learning (PRML) Bishop 概率视角ML
Machine Learning: A Probabilistic Perspective Murphy 全面系统
Computer Vision: Algorithms and Applications Szeliski (第14-15章) CV中的ML应用

附录:深层补充

1. SVM完整数学推导

1.1 硬间隔SVM(从原始问题到对偶问题的KKT推导)

原始问题:给定线性可分的数据 { ( x i , y i ) } i = 1 N \{(x_i, y_i)\}_{i=1}^N {(xi,yi)}i=1N y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi{1,+1},寻找最大间隔超平面 w T x + b = 0 w^T x + b = 0 wTx+b=0

几何间隔:点 x i x_i xi 到超平面的距离为 y i ( w T x i + b ) ∥ w ∥ \frac{y_i(w^T x_i + b)}{\|w\|} wyi(wTxi+b)

优化问题(最大化最小几何间隔):
max ⁡ w , b 1 ∥ w ∥ min ⁡ i y i ( w T x i + b ) \max_{w,b} \frac{1}{\|w\|} \min_i y_i(w^T x_i + b) w,bmaxw1iminyi(wTxi+b)

min ⁡ i y i ( w T x i + b ) = 1 \min_i y_i(w^T x_i + b) = 1 miniyi(wTxi+b)=1,转化为等价形式:
min ⁡ w , b 1 2 ∥ w ∥ 2 s.t.    y i ( w T x i + b ) ≥ 1 , ∀ i \min_{w,b} \frac{1}{2}\|w\|^2 \quad \text{s.t.} \; y_i(w^T x_i + b) \geq 1, \forall i w,bmin21w2s.t.yi(wTxi+b)1,i

Lagrange函数:引入 α i ≥ 0 \alpha_i \geq 0 αi0
L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 N α i [ y i ( w T x i + b ) − 1 ] L(w,b,\alpha) = \frac{1}{2}\|w\|^2 - \sum_{i=1}^N \alpha_i [y_i(w^T x_i + b) - 1] L(w,b,α)=21w2i=1Nαi[yi(wTxi+b)1]

KKT条件

  1. 平稳性 ∂ L ∂ w = 0 ⇒ w = ∑ α i y i x i \frac{\partial L}{\partial w} = 0 \Rightarrow w = \sum \alpha_i y_i x_i wL=0w=αiyixi ∂ L ∂ b = 0 ⇒ ∑ α i y i = 0 \frac{\partial L}{\partial b} = 0 \Rightarrow \sum \alpha_i y_i = 0 bL=0αiyi=0
  2. 原始可行 y i ( w T x i + b ) − 1 ≥ 0 y_i(w^T x_i + b) - 1 \geq 0 yi(wTxi+b)10
  3. 对偶可行 α i ≥ 0 \alpha_i \geq 0 αi0
  4. 互补松弛 α i [ y i ( w T x i + b ) − 1 ] = 0 \alpha_i [y_i(w^T x_i + b) - 1] = 0 αi[yi(wTxi+b)1]=0

对偶问题:代入KKT条件消除 w , b w,b w,b
max ⁡ α ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i T x j \max_\alpha \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j x_i^T x_j αmaxi=1Nαi21i=1Nj=1NαiαjyiyjxiTxj
s.t.    ∑ α i y i = 0 ,    α i ≥ 0 \text{s.t.} \; \sum \alpha_i y_i = 0, \; \alpha_i \geq 0 s.t.αiyi=0,αi0

支持向量:只有 α i > 0 \alpha_i > 0 αi>0 的样本才是支持向量(在间隔边界上)。

决策函数
f ( x ) = sign ( ∑ i ∈ S V α i y i x i T x + b ) f(x) = \text{sign}\left(\sum_{i \in SV} \alpha_i y_i x_i^T x + b\right) f(x)=sign(iSVαiyixiTx+b)

1.2 软间隔SVM(松弛变量 ξ \xi ξ

当数据不完全线性可分时,允许部分样本违反间隔约束:

min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i \min_{w,b,\xi} \frac{1}{2}\|w\|^2 + C \sum_{i=1}^N \xi_i w,b,ξmin21w2+Ci=1Nξi
s.t.    y i ( w T x i + b ) ≥ 1 − ξ i ,    ξ i ≥ 0 , ∀ i \text{s.t.} \; y_i(w^T x_i + b) \geq 1 - \xi_i, \; \xi_i \geq 0, \forall i s.t.yi(wTxi+b)1ξi,ξi0,i

其中 C C C 是惩罚参数( C → ∞ C \to \infty C 退化为硬间隔)。

对偶形式
max ⁡ α ∑ α i − 1 2 ∑ ∑ α i α j y i y j x i T x j \max_\alpha \sum \alpha_i - \frac{1}{2} \sum \sum \alpha_i \alpha_j y_i y_j x_i^T x_j αmaxαi21∑∑αiαjyiyjxiTxj
s.t.    ∑ α i y i = 0 ,    0 ≤ α i ≤ C \text{s.t.} \; \sum \alpha_i y_i = 0, \; 0 \leq \alpha_i \leq C s.t.αiyi=0,0αiC

1.3 核函数与SMO算法

核技巧:将 x i T x j x_i^T x_j xiTxj 替换为 K ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) K(x_i, x_j) = \phi(x_i)^T \phi(x_j) K(xi,xj)=ϕ(xi)Tϕ(xj)

公式
线性核 K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
多项式核 K = ( x i T x j + c ) d K=(x_i^Tx_j + c)^d K=(xiTxj+c)d
RBF核 K = exp ⁡ ( − γ ∣ x i − x j ∣ 2 ) K=\exp(-\gamma|x_i-x_j|^2) K=exp(γxixj2)
Sigmoid核 K = tanh ⁡ ( a x i T x j + b ) K=\tanh(a x_i^Tx_j + b) K=tanh(axiTxj+b)

SMO(Sequential Minimal Optimization):每次选择两个 α \alpha α 优化(因 ∑ α i y i = 0 \sum \alpha_i y_i = 0 αiyi=0 约束),有解析解。收敛 O ( N 2 ) − O ( N 2.3 ) O(N^2)-O(N^{2.3}) O(N2)O(N2.3)


2. K-Means与GMM深入对比

2.1 K-Means的EM视角

K-Means是GMM的极限情况( σ → 0 \sigma \to 0 σ0)。

E步(分配中心) c i = arg ⁡ min ⁡ k ∥ x i − μ k ∥ 2 c_i = \arg\min_k \|x_i - \mu_k\|^2 ci=argminkxiμk2(硬分配)
M步(更新中心) μ k = 1 N k ∑ i : c i = k x i \mu_k = \frac{1}{N_k} \sum_{i: c_i = k} x_i μk=Nk1i:ci=kxi

数学实质:最小化总类内平方和 J = ∑ k = 1 K ∑ i ∈ C k ∥ x i − μ k ∥ 2 J = \sum_{k=1}^K \sum_{i \in C_k} \|x_i - \mu_k\|^2 J=k=1KiCkxiμk2

2.2 GMM(高斯混合模型)

模型 p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x) = \sum_{k=1}^K \pi_k \mathcal{N}(x|\mu_k, \Sigma_k) p(x)=k=1KπkN(xμk,Σk) ∑ π k = 1 \sum \pi_k = 1 πk=1

E步(责任度) γ i k = π k N ( x i ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x i ∣ μ j , Σ j ) \gamma_{ik} = \frac{\pi_k \mathcal{N}(x_i|\mu_k, \Sigma_k)}{\sum_{j=1}^K \pi_j \mathcal{N}(x_i|\mu_j, \Sigma_j)} γik=j=1KπjN(xiμj,Σj)πkN(xiμk,Σk)(软分配)

M步(更新) μ k = ∑ i γ i k x i ∑ i γ i k \mu_k = \frac{\sum_i \gamma_{ik} x_i}{\sum_i \gamma_{ik}} μk=iγikiγikxi π k = ∑ i γ i k N \pi_k = \frac{\sum_i \gamma_{ik}}{N} πk=Niγik

2.3 BIC/AIC选择K值

AIC = 2 k − 2 ln ⁡ ( L ) = 2k - 2\ln(L) =2k2ln(L)BIC = k ln ⁡ ( N ) − 2 ln ⁡ ( L ) = k\ln(N) - 2\ln(L) =kln(N)2ln(L)。选择最小值对应的K。


3. PCA的完整数学推导

3.1 最大方差视角

PCA寻找第一个主轴的方向 w 1 w_1 w1 ∥ w 1 ∥ = 1 \|w_1\|=1 w1=1)以最大化投影方差:
max ⁡ w 1 Var ( X w 1 ) = max ⁡ w 1 w 1 T Σ w 1 \max_{w_1} \text{Var}(X w_1) = \max_{w_1} w_1^T \Sigma w_1 w1maxVar(Xw1)=w1maxw1TΣw1
使用Lagrange: L = w 1 T Σ w 1 − λ ( w 1 T w 1 − 1 ) \mathcal{L} = w_1^T \Sigma w_1 - \lambda(w_1^T w_1 - 1) L=w1TΣw1λ(w1Tw11)
求导得: Σ w 1 = λ w 1 \Sigma w_1 = \lambda w_1 Σw1=λw1 w 1 w_1 w1 是协方差矩阵的最大特征值对应的特征向量。

后续主成分依次为第2、第3大特征向量(正交约束下)。

3.2 最小重构误差视角

将数据投影到k维子空间后再重构,最小化重构误差:
min ⁡ W ∑ i ∥ x i − W W T x i ∥ 2 \min_{W} \sum_i \|x_i - W W^T x_i\|^2 WminixiWWTxi2

解同样为协方差矩阵的前k个特征向量。这两个视角等价

3.3 SVD实现PCA

对中心化数据矩阵 X ~ ∈ R N × D \tilde{X} \in \mathbb{R}^{N \times D} X~RN×D 做SVD: X ~ = U Σ V T \tilde{X} = U \Sigma V^T X~=UΣVT

  • 协方差矩阵: Σ X = 1 N − 1 X ~ T X ~ = 1 N − 1 V Σ T Σ V T \Sigma_X = \frac{1}{N-1} \tilde{X}^T \tilde{X} = \frac{1}{N-1} V \Sigma^T \Sigma V^T ΣX=N11X~TX~=N11VΣTΣVT
  • 主方向: V V V 的列(右奇异向量)
  • 投影: Y = X ~ V k = U k Σ k Y = \tilde{X} V_k = U_k \Sigma_k Y=X~Vk=UkΣk(降至k维)
  • 方差占比: ∑ i = 1 k σ i 2 ∑ i = 1 D σ i 2 \frac{\sum_{i=1}^k \sigma_i^2}{\sum_{i=1}^D \sigma_i^2} i=1Dσi2i=1kσi2

SVD方法的数值优势:比直接计算协方差矩阵的EVD更稳定,尤其当 D ≫ N D \gg N DN 时。

3.4 核PCA(Kernel PCA)

将数据映射到高维空间再做PCA: ϕ ( x i ) ∈ F \phi(x_i) \in \mathcal{F} ϕ(xi)F

对映射后数据 Φ = [ ϕ ( x 1 ) , . . . , ϕ ( x N ) ] \Phi = [\phi(x_1), ..., \phi(x_N)] Φ=[ϕ(x1),...,ϕ(xN)],协方差矩阵特征向量满足: Φ Φ T v = λ v \Phi \Phi^T v = \lambda v ΦΦTv=λv

由表示定理: v = ∑ i α i ϕ ( x i ) v = \sum_i \alpha_i \phi(x_i) v=iαiϕ(xi)。代入得: K α = λ α K \alpha = \lambda \alpha Kα=λα,其中 K i j = ϕ ( x i ) T ϕ ( x j ) K_{ij} = \phi(x_i)^T \phi(x_j) Kij=ϕ(xi)Tϕ(xj)


4. Bag of Visual Words(BoVW)

4.1 完整流程
def bovw_pipeline(images, K=500):
    # Step 1: 特征提取(从每张图像提取SIFT描述子)
    sift = cv2.SIFT_create()
    all_descriptors = []
    for img in images:
        kp, des = sift.detectAndCompute(img, None)
        if des is not None:
            all_descriptors.append(des)
    all_des = np.vstack(all_descriptors)  # (N_total, 128)
    
    # Step 2: 码本构建(K-Means聚类生成视觉词汇)
    from sklearn.cluster import MiniBatchKMeans
    kmeans = MiniBatchKMeans(n_clusters=K, batch_size=10000)
    kmeans.fit(all_des)  # 学习K个码本中心
    codebook = kmeans.cluster_centers_  # (K, 128)
    
    # Step 3: 直方图编码(将每张图的特征量化为直方图)
    histograms = []
    for img_idx, des in enumerate(all_descriptors):
        if des is None:
            hist = np.zeros(K)
        else:
            assigned = kmeans.predict(des)
            hist = np.bincount(assigned, minlength=K)
        # 归一化(L1或L2)
        hist = hist.astype(float) / (np.linalg.norm(hist, 1) + 1e-10)
        histograms.append(hist)
    
    # Step 4: SVM分类
    from sklearn.svm import SVC
    clf = SVC(kernel='rbf', C=100, gamma='scale')
    clf.fit(np.array(histograms), labels)
    return clf, codebook
4.2 空间金字塔匹配(SPM)

Lazebnik et al., 2006。解决BoVW丢失空间信息的缺陷。

原理:将图像递归划分为更细的网格,在每个层次独立量化编码,最后拼接所有层次的直方图。

Level 0 (1×1):  [直方图(256D)]
Level 1 (2×2):  [直方图] [直方图]
                  [直方图] [直方图]
Level 2 (4×4):  [16个直方图]

最终向量 = [L0:256] + [L1:4×256] + [L2:16×256] = 21×256 = 5376D

金字塔匹配核:两个图像的特征向量在每层的匹配数为:
K L ( X , Y ) = ∑ l = 0 L 1 2 L − l ⋅ ( I l − I l − 1 ) \mathcal{K}^L(X,Y) = \sum_{l=0}^L \frac{1}{2^{L-l}} \cdot (\mathcal{I}^l - \mathcal{I}^{l-1}) KL(X,Y)=l=0L2Ll1(IlIl1)

其中 I l \mathcal{I}^l Il 是第l层的匹配数。越精细的层权重越大。


5. HOG的完整实现细节

5.1 梯度计算

使用中心差分(1D离散导数的简单核 [ − 1 , 0 , 1 ] [-1, 0, 1] [1,0,1]):
G x ( x , y ) = I ( x + 1 , y ) − I ( x − 1 , y ) G_x(x,y) = I(x+1,y) - I(x-1,y) Gx(x,y)=I(x+1,y)I(x1,y)
G y ( x , y ) = I ( x , y + 1 ) − I ( x , y − 1 ) G_y(x,y) = I(x,y+1) - I(x,y-1) Gy(x,y)=I(x,y+1)I(x,y1)

幅值: M ( x , y ) = G x 2 + G y 2 M(x,y) = \sqrt{G_x^2 + G_y^2} M(x,y)=Gx2+Gy2
方向: θ ( x , y ) = arctan ⁡ ( G y / G x ) \theta(x,y) = \arctan(G_y/G_x) θ(x,y)=arctan(Gy/Gx) θ ∈ [ 0 ∘ , 180 ∘ ) \theta \in [0^\circ, 180^\circ) θ[0,180)(无符号梯度)

为什么用无符号梯度:Dalal & Triggs实验表明, [ 0 ∘ , 180 ∘ ) [0^\circ, 180^\circ) [0,180)(9个bin)比 [ 0 ∘ , 360 ∘ ) [0^\circ, 360^\circ) [0,360)(18个bin)效果更好,因为行人轮廓的左右子对称性使得有符号方向意义不大。

5.2 Cell/Block划分

Cell(细胞单元):8×8像素区域,每个cell生成9维直方图。

Block(块):2×2 cells = 16×16像素区域,每个block生成36维特征。

Block步长:1个cell(8像素),与HOG检测窗口64×128对应:

  • 水平方向: ( 64 / 8 − 1 ) = 7 (64/8 - 1) = 7 (64/81)=7 个位置
  • 垂直方向: ( 128 / 8 − 1 ) = 15 (128/8 - 1) = 15 (128/81)=15 个位置
  • 总block数: 7 × 15 = 105 7 \times 15 = 105 7×15=105
  • 特征向量: 105 × 36 = 3780 105 \times 36 = 3780 105×36=3780
5.3 归一化(L2-Hys)

Step 1:对block的36D向量做L2归一化: v ← v / ∥ v ∥ 2 2 + ϵ 2 v \leftarrow v / \sqrt{\|v\|_2^2 + \epsilon^2} vv/v22+ϵ2
Step 2:截断(clipping): v i = min ⁡ ( v i , 0.2 ) v_i = \min(v_i, 0.2) vi=min(vi,0.2)(限制梯度幅值不能过大)
Step 3:再次L2归一化

为什么L2-Hys最好:截断操作使HOG对局部光照变化更鲁棒——强梯度不会过度主导整个block的归一化。

5.4 为什么HOG适合行人检测
  1. 边缘形状描述:行人轮廓以垂直边缘为主(腿、手臂、躯干),HOG的cell直方图能捕捉方向分布
  2. 局部对比度归一化:Block归一化使HOG对局部光照变化不敏感
  3. 空间信息保留:不像BoVW丢失空间信息,HOG在各cell中保留位置
  4. 多尺度检测:检测窗口滑动 + 图像金字塔
  5. Dalal & Triggs实验:在INRIA行人数据集上达到接近100%的检测率(当时最优)

Dalal & Triggs的关键发现:筛选出的最佳参数组合

  • 梯度方案: [ − 1 , 0 , 1 ] [-1,0,1] [1,0,1] 无符号梯度(> 有符号、高斯平滑方向)
  • Cell大小:8×8(> 4×4或16×16)
  • Block大小:2×2 cells(> 1×1或3×3)
  • 归一化:L2-Hys(> L1-norm或L2-norm)
  • 重叠:50% block重叠表现最好
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐