zoukankan      html  css  js  c++  java
  • 【人脸检测——基于机器学习4】HOG特征

    前言

    HOG特征的全称是Histograms of Oriented Gradients,基于HOG特征的人脸识别算法主要包括HOG特征提取和目标检测,该算法的流程图如下图所示。本文主要讲HOG特征提取。

    HOG特征的组成

    Cell:将一幅图片划分为若干个cell(如上图绿色框所示),每个cell为8*8像素

    Block:选取4个cell组成一个block(如上图红色框所示),每个block为16*16像素。Block的滑动步长为8像素,如黄色箭头所示

    Detection Window:令64*128像素大小的图片为检测Win,在其中共计有105个block。

    HOG 特征要完全描述一个obj的所有信息,它的维度=窗体中所有block个数(105)*每个block中cell的个数(4)*每个cell中Bin的个数(9)=3780(维),每一维就是一个bin

    HOG特征的提取

    1. Gamma/Colour Normalization

    在Navneet Dalal的实验 [1]中Gamma/Colour Normalization对于检测器的性能仅仅有些许的影响,他猜测是后续的描述子归一化能实现相同的功能。

    1. Gradient Computation

    Dalal的实验[1]中最简单的一维中心对称模板处的高斯模板下效果最好。根据具体的检测目标采取不同的梯度计算方法。

    人脸识别中可以采用如下特征模板计算像素的梯度:

    水平方向上的模板为::左中右三个像素分别与模板相乘=相邻像素之差

    竖直方向上:;b也就是上下像素之差

    整个梯度的幅值 :

    角度:

    1. Spatial/Orientation Binning

    这里我们定义了新的概念bin。Bin可以是(无符号的梯度),也可以是(有符号的梯度)。对于人体检测系统来说,由于不同人着装的颜色和背景变化太大,梯度方向的符号不是很重要,而对其他的刚性对象如花瓶、茶杯、摩托车等梯度符号信息非常重要。

    我们这里的人脸检测中,将bin定义在,并将其分为9份,因此,每个cell都有9个bin。上一小节我们计算出 了像素的梯度与角度。我们要在cell中统计每个梯度的幅值总和。

    bin的投影操作可如下所示(并不唯一)

    Bin的投影

    Bin 将0-360划分为9块,每块为40度,这40度中,每20度为连续的。

    例如 0-40度中

    Bin1 为0- 20 在这个范围 180-200 当在这两个范围内的 被认为在一个bin上

    例如(有很多方法)

    对于某个像素ij,计算出来的幅值为f,角度为a=10,在0-20,那么就投影在bin1上

    若 a=190,在180-200之间,那么也在bin1上。

    投影幅值为:

    若 a=10/190,刚好位于中间,这,投影幅值就为f

    若a=25,那么投影将被分解为在Bin1 和bin2上

    计算整体的hog特征

    3780维==win(block cell bin),每个维度就是一个bin

    对于3780维的某一维,就是某一个窗体win下的某个block中的某个cell的某个bin

    对于一个block中的4个cell

    Cell0: bin0 bin 1 … bin8

    Cell1: bin0 bin 1 … bin8

    Cell2: bin0 bin 1 … bin8

    Cell3: bin0 bin 1 … bin8

    对于第ij(第i行j列)个像素,投影在cell0中的Bin0上,那边bin0中的内容就是f0:bin0中描述的就是当前像素的梯度

    对于第i+1j像素,若也投影在cell0中的Bin0上,那么Bin0中的内容就是f1

    当投影完后, 求 sumbin0 --------就是最后的bin0 权重的累加

    1. Normalization and Descriptor Blocks

    原因:梯度算子容易受到噪声如光照和背景对比度的影响,为了减少这种影响需要对局部cell进行归一化处理

    基本思想:将相邻的cell组成可重叠的block,以有效的利用重叠的边缘信息,然后对每个块分别进行归一化处理。

    Dala文章中介绍了四种常见的block归一化算法,其中(1),(2),(4)的性能大致相同,而(3)则降低了性能

    (1)L2-norm:

    (2)L2-Hys:先做一次L2-norm归一化,然后把大于等于0.2的分量赋值为0.2再做一次L2-norm

    (3)L1-norm:

    (4)L1-sqrt:,采用了L1-norm的平方根式

    其中, 表示v的k阶范数,为一个小数值的常量,它的存在是必要的

    统计好每一个block内的梯度信息并形成描述子后,将检测窗口(win)内所有信息收集起来并结合成的向量即为HOG特征向量。

    参考与致谢

    Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. IEEE, 2005, 1: 886-893.

  • 相关阅读:
    wenbao与powershell
    wenbao与windows
    wenbao与msf
    CCF201612-Python题解
    语不惊人死不休
    为人性僻耽佳句(一)
    Pytorch出现 raise NotImplementedError
    CNN卷积
    python字符串切片
    python----numpy(持续更新)
  • 原文地址:https://www.cnblogs.com/gfgwxw/p/9743511.html
Copyright © 2011-2022 走看看