基于yale人脸库的人脸图像检测

原创 2018年04月15日 17:06:43

一.嵌入式特征选择:

将特征选择方法和学习训练过程融为一体。两者同在一个优化过程中完成。在学习器训练时自动进行特征选择。

给定训练集,考虑线性回归模型,以平方误差为损失函数,则优化目标为:

 

当样本特征较多,样本数量较少时,很容易过拟合。

若采用L1正则化,则有:

 

 二. 人脸图片处理

读入训练图片,将每张人脸图片信息存储为一维矩阵(1*10304),方便计算。

 

 



三.稀疏表示

假设我们用一个M*N的矩阵表示数据集X,每一行代表一个样本,每一列代表样本的一个属性,一般而言,该矩阵是稠密的,即大多数元素不为0

稀疏表示的含义是,寻找一个系数矩阵AK*N)以及一个字典矩阵BM*K),使得B*A尽可能的还原X,且A尽可能的稀疏。A便是X的稀疏表示。

表达为优化问题的话,字典学习的最简单形式为:

 
 


求解上述最优化问题的总体策略是,对字典B以及样本稀疏表示alphai交替迭代优化。即先初始化字典B1.固定字典Balphai进行优化。2.固定A对字典B进行优化。重复上述两步,求得最终B以及X的稀疏表示A

 

四.具体迭代求解过程
 参见周志华西瓜书



.代码实现
import numpy as np
from PIL import Image
def LoadData(t):
    testp=np.array(Image.open("./feret/"+str(t)+"-6.bmp"))
    testp=np.reshape(testp,(10304,1))
    for i in np.arange(3,8):
     for j in np.arange(1,6):
        if i==3 and j==1:
            img = np.array(Image.open('./feret/' + str(i) + '-' + str(j) + ".bmp"))
            img = np.reshape(img, (112 * 92, 1))
            A = img
        else:
            img = np.array(Image.open('./feret/' + str(i) + '-' + str(j) + ".bmp"))
            img = np.reshape(img, (112 * 92, 1))
            A = np.concatenate((A, img), axis=1)
    A = dfc(A)
    data = testp / np.linalg.norm(testp, ord=2)
    return A, data
def dfc(A):
  m=A.shape[1]
  for i in range(m):
   if i==0:
      Cl=A[:,i]/np.linalg.norm(A[:,i],ord=2)
      Cl=np.reshape(Cl,(10304,1))
   else:
      Cf=A[:,i]/np.linalg.norm(A[:,i],ord=2)
      Cf=np.reshape(Cf,(10304,1))
      Cl=np.concatenate((Cl,Cf),axis=1)
  return Cl

def xishu(A,y):

 x0=np.ones((25,1))
 c=np.dot(A, A.T)
# L=np.linalg.norm(2*np.dot(A,A.T))
 L=100000
 k=0
 while True:
# gradient
  g=2*np.dot(np.dot(A.T,A),x0)-2*np.dot(A.T,y)
  z=x0-1.0/L*g
  lamda=1
  w0=np.linalg.norm(np.dot(A,x0)-y,ord=2)**2+lamda*np.linalg.norm(x0,ord=1)
  x=x0
  for i in range(25):
    if z[i,0]>lamda/L:
      x[i,0]=z[i,0]-lamda/L
    elif z[i,0]<-lamda/L:
      x[i,0]=z[i,0]+lamda/L
    else:
      x[i,0]=0
  k+=1
  w=np.linalg.norm(np.dot(A,x)-y,ord=2)**2+lamda*np.linalg.norm(x,ord=1)
  if w0-w<1e-5:
   return x
  x0=x
def NewX(x,i):

 newX=np.zeros((25,1))

 for t in np.arange(5*i,5*i+5):

   newX[t,0]=x[t,0]

 return newX



def judgeClass(A,x,y):
 minValue=float(np.inf)
 minIndex=-1
 for i in range(5):
   dis=np.linalg.norm(y-np.dot(A,NewX(x,i)))
   print("对类", i + 3, "差异度为: ", dis)
   if dis <= minValue:
    minValue = dis
    minIndex = i
 return minIndex + 3

if __name__=="__main__":
 m=5
 print("Start testing...")
 A,y=LoadData(m)
 cl=xishu(A,y)
 print(m,"最有可能在类",judgeClass(A,cl,y),"中")
 print("end.....")


测试结果:
Start testing...
对类 3 差异度为:  0.896147086781208
对类 4 差异度为:  0.9289496025653518
对类 5 差异度为:  0.8444729557298922
对类 6 差异度为:  0.9006976395753198
对类 7 差异度为:  0.8783348199837376
5 最有可能在类 5 中
end.....


OpenCV人脸标定技术实战 适合iOS/Android/Mac

本课程这种讲解最近几年非常火爆的OpenCV人脸标定技术的应用,技术可以应用于常见的 虚拟穿戴,换脸,表情追踪等应用。课程重点讲解人脸标定技术的核心部分,最终让学员能够开发出适应于iOS,Android平台对应的c++封装的SDK库。为进一步开发各种丰富的应用打基础。
  • 2017年10月12日 23:54

几个人脸图像数据库

数据库 Yale Face Database B[1] :该数据库共包含l0个人的9种不同姿态的人脸图像,每种姿态又包含64种不同的光照情况。由于采集人数较少,限制了该数据库的进一步应用。 ...
  • timidsmile
  • timidsmile
  • 2012-10-17 16:49:45
  • 5665

人脸数据库汇总—Part 1

from:http://web.mit.edu/emeyers/www/face_databases.html
  • u012564690
  • u012564690
  • 2014-05-13 19:32:37
  • 4691

耶鲁大学人脸库

  • 2013年04月28日 19:06
  • 19.9MB
  • 下载

Yale人脸数据库、PCA算法实现Matlab中特征脸生成和简单的人脸识别

算法实现步骤: 1. 读取训练库中的图片,并把每一张图片生成为一个列向量(需要注意的是如果数据库中的图片人脸位置不一,需要先手动或代码把人脸调整到差不多的位置。图片最好是大小一致的灰度图); 2. 生...
  • Busago
  • Busago
  • 2017-05-04 00:00:50
  • 1427

yale人脸库

  • 2014年08月22日 21:30
  • 1.06MB
  • 下载

yale人脸数据库

  • 2013年03月04日 20:31
  • 1.06MB
  • 下载

基于PCA使用Yale人脸数据库的人脸识别代码,实现了画特征脸

  • 2011年05月30日 14:49
  • 2.53MB
  • 下载

基于PCA的人脸识别_Matlab实现(个人研读之后的一些总结)

以下是我在查阅相关文献之后的一些个人的总结,望大神们指正。基于PCA的人脸识别PCA简介这是百度百科的解析: “对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,...
  • peterchan88
  • peterchan88
  • 2016-06-05 20:29:54
  • 5167

<em>Yale人脸库</em>,一个非常好的人脸库

详细说明:<em>yale人脸库</em>,做人脸识别所必须的样本图像。希望对大家有用。... 详细说明:<em>yale人脸库</em>,做人脸识别所必须的样本图像。希望对大家有用。综合评分:4 收藏评论(...
  • 2018年04月08日 00:00
收藏助手
不良信息举报
您举报文章:基于yale人脸库的人脸图像检测
举报原因:
原因补充:

(最多只允许输入30个字)