人脸识别(稀疏表示、人工神经网络)

1. 稀疏表示

对于一个信号 x,如果 x 中大部分的元素都为 0,只有少部分元素不为0,则称信号 x 为稀疏的。或者 x 中大部分元素都为较小值,接近于 0,只有少部分元素为较大值,也可以称信号 x 为稀疏的(例如,图像傅立叶变换之后,或者小波变换之后)。

信号稀疏表示问题可以通过求解稀疏正则优化问题实现:

minαAg(α)=Δf(α)+λΩ(α)

其中,f(α) 为忠诚项,Ω 为稀疏正则项,λ 为正则项参数,用于调节忠诚项和正则项的比重。

为了约束系数 α 具备稀疏性,Ω 可取 l0 范数,l0 范数表示非0元素个数,即:

Ω(α)=α0

f(α) 为忠诚项,通常取平方误差:

f(α)=12xDα22

稀疏正则优化问题常用的两种求解方式为:贪婪算法求解,凸松弛求解,其中凸松弛求解就是将上述问题转换为凸优化问题。例如通过 l1 正则近似,得到:

minαA=12xDα22+λα1

这是统计学中典型的 Lasso 问题,相比与 l1 正则,更简单常用的是 l2 正则,也称为 Tikhonov 正则,如下所示:

minαA=12xDα22+λα2

l2 正则项具有收缩作用,但不具有选择功能,即所有变量都会被选择,而与 Tikhonov 正则相比,Lasso 具有收缩和选择的双重功能,Lasso 中的 l1 范数能够产生稀疏的解,可参考:范数

这里写图片描述

上述问题可通过多种方式求解:

贪婪求解算法:匹配追踪(MP),正交匹配追踪(OMP),分级正交匹配追踪(stOMP)。

凸优化求解方法:加速近邻梯度法(APG)。

2. 组合 Lasso

有些时候信号存在分组结构信息,可能不强调整体的稀疏型,而且更高层次的稀疏,如 Yuan 等提出的 Group Lasso,
在 Group Lasso 中,字典的原子按照[1:p]的划分,分成 G 组:

x=Dα=[D1D2...Dp]α1α2...αp

所以,第一部分的优化问题可以转换为:

minαA=12xDiαi22+λi=1pαi1

3. 稀疏表示人脸识别

参考论文 《Robust face recognition via sparse representation》,采用 Yale 人脸数据库,是不同光照,不同表情下的人脸图像,共 2414 张图片,分为38类。原始图像的大小为 168 x 192,在本例中将其转换为 32 x 32 的图像,并拉成一个 1 024 维向量,其中的 20% 作为训练数据,80%用于测试。

步骤如下:

  1. 由所有样本构成字典 D=[D1,D2,...,DK],其中Di为第 i 类样本组成的子矩阵。
  2. 归一化矩阵D,使每列的 l2 范数为 1
  3. 求解稀疏表示问题,计算测试样本 x 在第 i 类上的重构误差:
    ri(x)=xDiαi2
  4. 依据重构误差确定样本类别:
    c(x)=argminiri(x)

4. 基于人工神经网络的人脸识别

采用与人工神经网络-文本识别中类似的方式,网络层输入层结点数为 1024,隐藏层结点数为 100,输出层结点数为 38。考虑到训练样本较少,所以 batch 数较小,为 10,而迭代次数较多,为 500。采用后向传播算法进行求解(BP),

定义误差:

en=12(yW21H)2

  1. 网络初始化:

    1. 根据输入输出序列(X,Y)确定:
      • 网络输入层节点数 n(不考虑额外的偏置项为样本长度,如果考虑单元个数需要+1)
      • 隐含层结点数 l
      • 输出层节点数 m
    2. 初始化:
      • 初始化输入层与隐藏层的之间的权值 wj,i,0<jl;0<in,可以组成矩阵 W10
      • 初始化隐藏层与输出层之间的权值 wk,j,0<kn;0<jl,可以组成矩阵 W21
      • 给定学习速率 η
      • 给定神经元激励函数:σ(y)=11+ey (本文采用)或 σ(y)=eyeyey+ey=tanh(y)
  2. 隐藏层输出计算:
    随机选择一个样本 (x,y),计算隐含层输出 H:

    Hl×1=σ(W10xn×1)

  3. 输出层输出计算:
    根据隐藏层的输出 H,计算 BP 神经网络的预测输出 O:
    Om×1=W21Hl×1
  4. 误差计算:
    根据网络的预测输出 O 和期望输出 y,计算网络的预测误差 eO:
    eO=ym×1Om×1
  5. 对于网络的输出单元,计算它们的误差项:
    δ(L)jδ(L)=enH(L)j=(yiOi)=(ym×1Om×1)=eO
  6. 对于网络的隐藏层单元,计算它们的误差项:
    δ(l)jδ(l)=k=1d(l+1)((δ(l+1)k)(w(l+1)kj)(σ(H(l)j)))=σ(H(l)).(WT21δ(L))l×1
  7. 更新每个网络权重:
    wjiW21W10=wji+Δwji=wji+ηδjxji=W21+ηδ(L)HT=W10+ηδ(l)xT

5. 结果

K 近邻分类:        精度 = 70.72%;重构时间为: 0.76s
稀疏表示-OMP求解:   精度 = 89.55%;重构时间为: 9.59s
稀疏表示-APG求解:   精度 = 93.66%;重构时间为: 493.33s
人工神经网络-BP求解: 精度 = 95.63%;重构时间为: 7.71s

人工神经网络法取得了最高的识别精度,比稀疏表示方法高 2%,而稀疏表示方法中基于 APG 的优化求解方法比基于 OMP 的求解方法高 4%,但是重构时间远远大于后者,而基于 K近邻的方法精度较差,综上,基于人工神经网络的方法不仅识别精度高,而且重构时间少,因此可以认为是一种较理想的方式。

需要指出的是,使用 Matlab 的人工神经网络工具箱时,只要隐藏层的结点个数稍多,总是出现 Memory out,也就是内存不足,所以此处使用了我自己写的算法,完全无压力。

6. 完整代码

我的GitHub

7. 参考文献

  1. 《视觉机器学习20讲》
  2. 人工神经网络-文本识别
  3. 《Robust face recognition via sparse representation》
展开阅读全文

没有更多推荐了,返回首页