基于梯度直方图(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. 预处理与梯度计算

    • 预处理:通常将输入图像转换为灰度图。也可以在每个颜色通道上计算梯度,然后取梯度最大的通道的值,但灰度图是标准做法。
    • 计算梯度:对图像使用简单的1-D离散微分模板(如[-1, 0, 1])在水平和垂直方向上进行卷积,计算每个像素点的梯度值(大小和方向)。
      • 梯度大小(强度): G = sqrt(Gx² + Gy²)
      • 梯度方向: θ = arctan(Gy / Gx) (取值范围通常在0-180度或无符号的0-360度。对于行人检测,常用0-180度,因为梯度方向与边缘方向相反是等效的)。
  2. 构建细胞单元(Cell)的梯度方向直方图

    • 将整个检测窗口划分为若干个不重叠的细胞单元。例如,每个cell大小为8x8像素。
    • 对于cell内的每一个像素,根据其梯度方向θ和梯度大小G,对方向直方图进行“投票”。直方图将180度的方向范围分成若干个区间(bins),例如9个bins(每20度一个区间)。
    • 投票的权重就是该像素的梯度大小G。有时会使用双线性插值,将G按距离分配到相邻的两个方向bins中,以提高精度。
  3. 组合细胞单元成块(Block)并进行归一化

    • 将相邻的若干个cell(例如2x2个cells)组合成一个。块是重叠滑动的,这意味着同一个cell会被多个不同的块包含。重叠的块结构能有效捕获更稳定的特征。
    • 块归一化:这是HOG特征抗光照变化的关键。对于一个块内的所有cell的直方图向量(假设2x2个cells,每个有9维,则块向量为36维),使用其L2范数进行归一化。
      • 归一化公式: v -> v / sqrt(||v||² + ε),其中ε是一个很小的常数防止除零。
    • 归一化后,这个块的特征向量(36维)就准备好了。
  4. 收集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特征后,需要用它来判断一个窗口内是否包含行人。

  1. 训练线性SVM分类器

    • 准备一个大规模的数据集(如INRIA行人数据集),其中包含许多正样本(裁剪好的包含行人的64x128图片)和负样本(不包含行人的任意背景图片)。
    • 为所有正样本和负样本计算其HOG特征(3780维向量)。
    • 用这些带有标签(行人+1, 背景-1)的HOG特征向量,训练一个线性支持向量机。线性SVM会找到一个最优的超平面权重向量w偏置b,使得正负样本的特征向量能被这个超平面最大间隔地分开。
  2. 多尺度滑动窗口检测

    • 对于一张任意大小的输入测试图片,我们需要在所有可能的位置和尺度上寻找行人。
    • 构建图像金字塔:将输入图片按一定比例(如1.05倍)逐层缩小,形成一个图像金字塔。这样可以在不同尺度上检测不同大小的行人。
    • 滑动窗口:在金字塔的每一层图像上,用一个固定大小的检测窗口(如64x128)从上到下、从左到右滑动,步长通常为若干个像素(如8像素)。
    • 分类决策:对于每一个窗口位置:
      • 从该窗口图像中提取HOG特征(3780维向量)。
      • 计算该特征向量与SVM学得的权重向量w的点积,并加上偏置b,得到决策分数:f = w·x + b
      • 如果f > 0(或一个设定的阈值),则认为该窗口检测到了一个行人。
  3. 非极大值抑制(NMS)

    • 由于滑动窗口的重叠以及图像金字塔的相邻尺度,同一个行人可能会在多个位置和尺度上产生多个检测框(得分都大于阈值)。
    • NMS目的:从这些重叠的检测框中,为每个真实行人只保留一个最优的(通常是得分最高的)检测框。
    • NMS步骤
      • 将所有得分大于阈值的检测框按得分从高到低排序。
      • 选取得分最高的框A,将其加入最终输出列表。
      • 计算框A与剩余所有框的交并比。交并比是两个框交集面积与并集面积的比值。
      • 移除所有与框A的IoU大于某个预设阈值(如0.5)的框,因为它们很可能和框A检测到的是同一个目标。
      • 重复上述过程,直到处理完所有候选框。

第四步:总结与特点

  • 优点
    1. 描述能力强:梯度方向直方图对物体的轮廓和形状非常敏感,非常适合描述刚性的、轮廓明显的目标如行人。
    2. 几何和光学不变性:在小的局部cell内统计方向,对姿态和小幅度的形变有一定容忍度。块归一化使其对局部光照变化不敏感。
    3. 计算效率相对较高:在深度学习之前,是速度和精度平衡得较好的算法。
  • 缺点
    1. 速度慢:计算密集,尤其是多尺度滑动窗口搜索,计算量大。
    2. 对严重遮挡和剧烈形变敏感:特征依赖于完整的轮廓,遮挡会破坏梯度信息。
    3. 手工特征局限:特征表达能力无法与深度神经网络学习到的特征相比。

HOG+SVM是传统计算机视觉在目标检测领域的里程碑式工作,它为理解特征工程、分类器设计和检测流程奠定了范式。尽管在性能上已被基于深度学习的检测器(如YOLO, Faster R-CNN)超越,但其核心思想(局部梯度统计、块归一化、滑动窗口+分类器)仍有重要的教学和研究价值。

基于梯度直方图(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)超越,但其核心思想(局部梯度统计、块归一化、滑动窗口+分类器)仍有重要的教学和研究价值。