基于梯度直方图(Histogram of Oriented Gradients, HOG)特征的行人检测算法
字数 2883 2025-12-19 15:54:38
基于梯度直方图(Histogram of Oriented Gradients, HOG)特征的行人检测算法
题目描述
行人检测是计算机视觉中的一个经典任务,目标是在图像或视频中定位出行人的位置(通常用矩形框标出)。在深度学习普及之前,基于手工设计特征的检测算法占据主导地位,其中最著名、最具代表性的算法之一就是梯度直方图特征 与支持向量机分类器 结合的行人检测器。本题将详细阐述HOG特征的提取原理、如何与线性SVM结合构建检测器,以及完整的检测流程。
解题过程(算法详解)
第一步:理解核心思想
为什么梯度信息能描述行人?
- 直觉:行人的轮廓(尤其是直立状态下)可以由边缘的梯度方向和强度来刻画。例如,头部、肩部、手臂、腿部的边缘会产生特定方向的强梯度。
- HOG的思想:将图像划分成小的局部区域(称为“细胞单元”,cells),计算每个cell内所有像素的梯度方向,并将其统计成一个方向直方图。然后,将多个cell组合成更大的、有重叠的块(blocks),对块内的所有cell的直方图进行对比度归一化,以抵抗光照变化。最后,将所有块的归一化直方图特征串联起来,就得到了整幅图像(或图像某个窗口)的HOG特征描述符。
第二步:特征提取——HOG计算流程
我们以一个固定大小的检测窗口(例如64x128像素)为例,讲解如何计算其HOG特征。
-
预处理与梯度计算
- 预处理:通常将输入图像转换为灰度图。也可以在每个颜色通道上计算梯度,然后取梯度最大的通道的值,但灰度图是标准做法。
- 计算梯度:对图像使用简单的1-D离散微分模板(如[-1, 0, 1])在水平和垂直方向上进行卷积,计算每个像素点的梯度值(大小和方向)。
- 梯度大小(强度):
G = sqrt(Gx² + Gy²) - 梯度方向:
θ = arctan(Gy / Gx)(取值范围通常在0-180度或无符号的0-360度。对于行人检测,常用0-180度,因为梯度方向与边缘方向相反是等效的)。
- 梯度大小(强度):
-
构建细胞单元(Cell)的梯度方向直方图
- 将整个检测窗口划分为若干个不重叠的细胞单元。例如,每个cell大小为8x8像素。
- 对于cell内的每一个像素,根据其梯度方向
θ和梯度大小G,对方向直方图进行“投票”。直方图将180度的方向范围分成若干个区间(bins),例如9个bins(每20度一个区间)。 - 投票的权重就是该像素的梯度大小
G。有时会使用双线性插值,将G按距离分配到相邻的两个方向bins中,以提高精度。
-
组合细胞单元成块(Block)并进行归一化
- 将相邻的若干个cell(例如2x2个cells)组合成一个块。块是重叠滑动的,这意味着同一个cell会被多个不同的块包含。重叠的块结构能有效捕获更稳定的特征。
- 块归一化:这是HOG特征抗光照变化的关键。对于一个块内的所有cell的直方图向量(假设2x2个cells,每个有9维,则块向量为36维),使用其L2范数进行归一化。
- 归一化公式:
v -> v / sqrt(||v||² + ε),其中ε是一个很小的常数防止除零。
- 归一化公式:
- 归一化后,这个块的特征向量(36维)就准备好了。
-
收集HOG特征向量
- 让块在检测窗口内以一定的步长(例如8像素,即一个cell的宽度)滑动,遍历整个窗口。
- 将所有块归一化后的特征向量按顺序连接(concatenate)起来,形成一个最终的高维HOG特征向量。
- 计算示例:对于一个64x128的窗口,cell为8x8,则cell网格为8(高)x 16(宽)。块大小为2x2个cells,块步长为1个cell。那么,在垂直方向有
(8-2+1)=7个块位置,水平方向有(16-2+1)=15个块位置。总块数为7*15=105个。每个块特征维度是(2*2*9)=36维。因此,整个检测窗口的最终HOG特征维度是105 * 36 = 3780维。
第三步:构建分类器与检测流程
提取到HOG特征后,需要用它来判断一个窗口内是否包含行人。
-
训练线性SVM分类器
- 准备一个大规模的数据集(如INRIA行人数据集),其中包含许多正样本(裁剪好的包含行人的64x128图片)和负样本(不包含行人的任意背景图片)。
- 为所有正样本和负样本计算其HOG特征(3780维向量)。
- 用这些带有标签(行人+1, 背景-1)的HOG特征向量,训练一个线性支持向量机。线性SVM会找到一个最优的超平面权重向量w和偏置b,使得正负样本的特征向量能被这个超平面最大间隔地分开。
-
多尺度滑动窗口检测
- 对于一张任意大小的输入测试图片,我们需要在所有可能的位置和尺度上寻找行人。
- 构建图像金字塔:将输入图片按一定比例(如1.05倍)逐层缩小,形成一个图像金字塔。这样可以在不同尺度上检测不同大小的行人。
- 滑动窗口:在金字塔的每一层图像上,用一个固定大小的检测窗口(如64x128)从上到下、从左到右滑动,步长通常为若干个像素(如8像素)。
- 分类决策:对于每一个窗口位置:
- 从该窗口图像中提取HOG特征(3780维向量)。
- 计算该特征向量与SVM学得的权重向量
w的点积,并加上偏置b,得到决策分数:f = w·x + b。 - 如果
f > 0(或一个设定的阈值),则认为该窗口检测到了一个行人。
-
非极大值抑制(NMS)
- 由于滑动窗口的重叠以及图像金字塔的相邻尺度,同一个行人可能会在多个位置和尺度上产生多个检测框(得分都大于阈值)。
- NMS目的:从这些重叠的检测框中,为每个真实行人只保留一个最优的(通常是得分最高的)检测框。
- NMS步骤:
- 将所有得分大于阈值的检测框按得分从高到低排序。
- 选取得分最高的框A,将其加入最终输出列表。
- 计算框A与剩余所有框的交并比。交并比是两个框交集面积与并集面积的比值。
- 移除所有与框A的IoU大于某个预设阈值(如0.5)的框,因为它们很可能和框A检测到的是同一个目标。
- 重复上述过程,直到处理完所有候选框。
第四步:总结与特点
- 优点:
- 描述能力强:梯度方向直方图对物体的轮廓和形状非常敏感,非常适合描述刚性的、轮廓明显的目标如行人。
- 几何和光学不变性:在小的局部cell内统计方向,对姿态和小幅度的形变有一定容忍度。块归一化使其对局部光照变化不敏感。
- 计算效率相对较高:在深度学习之前,是速度和精度平衡得较好的算法。
- 缺点:
- 速度慢:计算密集,尤其是多尺度滑动窗口搜索,计算量大。
- 对严重遮挡和剧烈形变敏感:特征依赖于完整的轮廓,遮挡会破坏梯度信息。
- 手工特征局限:特征表达能力无法与深度神经网络学习到的特征相比。
HOG+SVM是传统计算机视觉在目标检测领域的里程碑式工作,它为理解特征工程、分类器设计和检测流程奠定了范式。尽管在性能上已被基于深度学习的检测器(如YOLO, Faster R-CNN)超越,但其核心思想(局部梯度统计、块归一化、滑动窗口+分类器)仍有重要的教学和研究价值。