人脸识别---基于深度学习和稀疏表达的人脸识别算法

gccbuaa gccbuaa     2022-09-14     127

关键词:

1 介绍

本文将介绍一种基于深度学习和稀疏表达的人脸识别算法。

首先。利用深度学习框架(VGGFace)提取人脸特征;其次,利用PCA对提取的特征进行降维;最后,利用稀疏表达分类实现特征匹配。我採用CMC曲线评价在AR数据库上的识别性能。最后我还提供了整个过程的code。


2 基于深度学习和稀疏表达的人脸识别算法

2.1 利用VGGFace提取人脸特征

以下介绍利用VGGFace对人脸特征进行提取。我们利用的数据库为AR数据库。数据库的图比例如以下:
技术分享
接下来我们利用VGGFace对人脸特征进行提取。

  • 我们利用Matconvent作为深度学习框架,Matconvent能够到http://www.vlfeat.org/matconvnet/上下载,我採用的1.0-beta19。也能够下载最新版本号。
  • VGGFace的deep model能够到http://www.robots.ox.ac.uk/~vgg/software/vgg_face/上进行下载,我採用的是Matconvnet的版本号。模型大概1.01G。
    如果VGGFace的模型为F,图片为x。那么提取的特征为y=F(x).

2.2 PCA对人脸特征进行降维

利用pca对数据降维,VGGFace提取出的特征为4096维。对提取的特征进行降维最后降到128维。

2.3 稀疏表达的人脸匹配

数据库一共同拥有C个人,每个人有k张图片,那么每个人的特征字典为Dc={fc1,fc2,,fck}, 那么C个人就组成一个Gallery特征字典D={D1,D2,?,DC}。给一定probe人脸x, 那么特征为y=F(x), 则稀疏表达能够有例如以下表达:

||x||1,Dx=y

当中x为稀疏编码。


最后我们能够利用稀疏表达分类器来识别这个probe人脸x:

mincrc(y)=||y?Dcδc(x)||22

3 Code

function cnn_vgg_faces()
%CNN_VGG_FACES  Demonstrates how to use VGG-Face
clear all
clc
addpath PCA
run(fullfile(fileparts(mfilename(‘fullpath‘)),...
    ‘..‘, ‘matlab‘, ‘vl_setupnn.m‘)) ;
net = load(‘data/models/vgg-face.mat‘) ;
list = dir(‘../data/AR‘);
C = 100;
img_list = list(3:end);
index = [1, 10];
%% 建立基于VGGFace的Gallery字典
dictionary = [];
for i = 1:C
    disp(i)
    numEachGalImg(i) = 0;
    for j = 1:2
        im = imread(strcat(‘../data/AR/‘,img_list((i-1)*26+index(j)).name));
        im_ = single(im) ; % note: 255 range
        im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ;
        for k = 1:3
            im1_(:,:,k) = im_;
        end
        im2_ = bsxfun(@minus,im1_,net.meta.normalization.averageImage) ;
        res = vl_simplenn(net, im2_) ;
        feature_p(:,j) = res(36).x(:);
    end
    numEachGalImg(i) = numEachGalImg(i) + size(feature_p,2);
    dictionary = [dictionary feature_p];
end
%% PCA对特征进行降维
FaceContainer = double(dictionary‘);
[pcaFaces W meanVec] = fastPCA(FaceContainer,128);
X = pcaFaces;
[X,A0,B0] = scaling(X);
LFWparameter.mean = meanVec;
LFWparameter.A = A0;
LFWparameter.B = B0;
LFWparameter.V = W;
imfo = LFWparameter;
train_fea = (double(FaceContainer)-repmat(imfo.mean, size(FaceContainer,1), 1))*imfo.V;
dictionary = scaling(train_fea,1,imfo.A,imfo.B);
for i = 1:size(dictionary, 1)
    dictionary(i,:) = dictionary(i,:)/norm(dictionary(i,:));
end
dictionary = double(dictionary);
totalGalKeys = sum(numEachGalImg);
cumNumEachGalImg = [0; cumsum(numEachGalImg‘)];

%% 利用稀疏编码进行特征匹配
% sparse coding parameters
if ~exist(‘opt_choice‘, ‘var‘)
    opt_choice = 1;
end
num_bases = 128;
beta = 0.4;
batch_size = size(dictionary, 1);
num_iters = 5;
if opt_choice==1
    sparsity_func= ‘L1‘;
    epsilon = [];
elseif opt_choice==2
    sparsity_func= ‘epsL1‘;
    epsilon = 0.01;
end

Binit = [];

fname_save = sprintf(‘../results/sc_%s_b%d_beta%g_%s‘, sparsity_func, num_bases, beta, datestr(now, 30));

AtA = dictionary*dictionary‘;
for i = 1:C
    fprintf(‘%s  
‘,num2str(i));
    tic
    im = imread(strcat(‘../data/AR/‘,img_list((i-1)*26+26).name));
    im_ = single(im) ; % note: 255 range
    im_ = imresize(im_, net.meta.normalization.imageSize(1:2)) ;
    for k = 1:3
        im1_(:,:,k) = im_;
    end
    im2_ = bsxfun(@minus,im1_,net.meta.normalization.averageImage) ;
    res = vl_simplenn(net, im2_) ;
    feature_p = res(36).x(:);
    feature_p  = (double(feature_p)‘-imfo.mean)*imfo.V;
    feature_p = scaling(feature_p,1,imfo.A,imfo.B);
    feature_p = feature_p/norm(feature_p, 2);
    [B S stat] = sparse_coding(AtA,0, dictionary‘, double(feature_p‘), num_bases, beta, sparsity_func, epsilon, num_iters, batch_size, fname_save, Binit);
    for m = 1:length(numEachGalImg)
        AA = S(cumNumEachGalImg(m)+1:cumNumEachGalImg(m+1),:);
        X1 = dictionary(cumNumEachGalImg(m)+1:cumNumEachGalImg(m+1),:);
        recovery = X1‘*AA;
        YY(m) = mean(sum((recovery‘-double(feature_p)).^2));
    end
    score(:,i) = YY;
    toc
end
accuracy = calrank(score1,1:1,‘ascend‘);
fprintf(‘rank-1:%d/%%
‘,accuracy*100);

文中以
calrank能够计算得到CMC曲线:參见http://blog.csdn.net/hlx371240/article/details/53482752
最后得到rank-1为82%。
整个代码见资源,因为vgg-face 太大,能够自己到vgg的官网下载,然后放到../matconvnet-1.0-beta19examplesdatamodels中。

人脸识别完整项目实战:完整项目案例运行演示

一、前言本文是《人脸识别完整项目实战》系列博文第1部分,第一节《完整项目运行演示》,本章内容系统介绍:人脸系统核心功能的运行演示。本内容已经录制成视频课程,详见网易云课堂。整个《人脸识别完整项目实战》... 查看详情

21个项目玩转深度学习:基于tensorflow的实践详解06—人脸检测和识别——数据集

...籍:《21个项目玩转深度学习:基于TensorFlow的实践详解》人脸检测FDDBFDDB是UMass的数据集,被用来做人脸检测(FaceDetection)。这个数据集比较大,比较有挑战性。而且作者提供了程序用来评估检测结果,所以在这个数据上面比较算... 查看详情

毕业设计-基于深度学习的人脸识别方法

目录前言课题背景和意义实现技术思路一、人脸识别介绍二、基于深度学习的人脸识别方法实现效果图样例最后前言  📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕... 查看详情

使用 LBP、深度学习和 OpenCV 进行实时人脸识别

】使用LBP、深度学习和OpenCV进行实时人脸识别【英文标题】:RealTimeFaceRecognitionwithLBP,DeepLearningandOpenCV【发布时间】:2021-08-0509:08:10【问题描述】:我是计算机视觉方面的新手。我正在尝试使用基于深度学习dnn模块的人脸检测部... 查看详情

基于cnn卷积神经网络的tensorflow+keras深度学习的人脸识别(代码片段)

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别前言项目实现效果补充模型数据嵌入模型CNN神经网络模型项目概述项目运行流程核心环境配置项目核心代码详解目录核心代码设置数据集目录收集人脸识别数据——UUID格... 查看详情

人脸识别实战:使用pythonopencv和深度学习进行人脸识别(代码片段)

...量学习”的概念。从那里,我将帮助您安装实际执行人脸识别所需的库。最后,我们将为静止图像和视频流实现人脸识别。理解深度学习人脸识别嵌入那么,深度学习+人脸识别是如何运作的呢?秘诀是一种称... 查看详情

5种最著名的人脸识别算法和关键特征介绍

人脸识别算法是任何人脸检测和识别系统或软件的基础组件。专家将这些算法分为两种核心方法:几何方法侧重于区分特征,光度统计方法用于从图像中提取值。然后将这些值与模板进行比较以消除差异。这些算法还可... 查看详情

浅析ai人脸识别/车辆识别智能分析网关的深度学习算法及应用场景

为什么要应用AI人工智能技术?AI人工智能在中国的安防视频监控项目中已经大量落地。在安防监控行业,利用AI的视频结构化技术依据视频内容信息处理和网络化共享应用,实现监控视频信息的情报化、视频监控网络... 查看详情

21个项目玩转深度学习:基于tensorflow的实践详解06—人脸检测和识别——mtcnn人脸检测(代码片段)

本篇主要讲述利用MTCNN的预训练模型得到原图中人脸的分割,代码如下:https://github.com/davidsandberg/facenet结合博客https://blog.csdn.net/FortiLZ/article/details/81396566?tdsourcetag=s_pctim_aiomsg看起来省力些要是对MTCNN的训练过程感兴趣的,可以看h... 查看详情

深度学习-人脸识别-数据集和制作

 一、 公共数据集 1.LabeledFacesinthewildHome(LFW)  很多公司号称识别率高达99%,是基于这个数据库。数据集合偏小,此时用一个在大量数据上预训练过的模型,在这个数据集合上测试。并且验证数据包含训练数据。2.CASIA... 查看详情

基于深度学习的人脸表情识别实现(代码片段)

1.前言关于人脸识别,其实我一直以来做过蛮多的项目,有些是整理出帖子了,有些是没有整理出,因为学业比较繁重,所以也是断断续续的来整理。最近刚好是五一假期,也出不去,就想着来整理一... 查看详情

王文峰《人脸识别原理与实战以matlab为工具》pdf及代码+《人脸识别原理及算法(沈理)》pdf+学习参考

人脸识别是当今世界科技领域攻关的高精尖技术。《人脸识别原理及算法:动态人脸识别系统研究》系统介绍了人脸识别研究领域的研究状况以及作者在人脸识别领域的研究工作和研究成果,全书共分为3个部分。《人脸识别原... 查看详情

一键学习的人脸识别

】一键学习的人脸识别【英文标题】:FaceRecognitionwithoneshotlearning【发布时间】:2019-07-2423:22:31【问题描述】:我是深度学习的新手。我从人脸识别示例开始,我发现基于数据的预训练模型有2种类型。1.孪生网络一次性学习:我... 查看详情

dlib+opencv深度学习人脸识别

目录(?)[+]DlibOpenCV深度学习人脸识别前言人脸数据库导入人脸检测人脸识别异常处理  Dlib+OpenCV深度学习人脸识别   前言人脸识别在LWF(LabeledFacesintheWild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非... 查看详情

毕业设计深度学习机器视觉人脸识别系统-opencvpython(代码片段)

文章目录0前言1机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别2深度学习-人脸识别过程人脸检测人脸识别MetricLarning3最后0前言🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题... 查看详情

深度学习基于卷积神经网络(tensorflow)的人脸识别项目(代码片段)

目录前言基本思路测试人脸识别效果设计思路详细代码加载模型人脸预测主要逻辑测试效果总结所有代码face_predict_use_keras.pykeras_train.pyload_data.pyface_predict_use_keras.py以上就是全部代码啦。有啥疑问就评论区讨论奥。前言经过前段... 查看详情

基于orl人脸数据库和pca特征降维算法的人脸识别matlab仿真

...法涉及理论知识概要        人脸识别系统的研究始于20世纪60年代,80年代后随着计算机技术和光学成像技术的发展得到提高,而真正进入初级的应用阶段则在90年后期,并且以美国、德国和日本的技... 查看详情

一个小白怎么学习人脸识别技术啊

一个小白怎么学习人脸识别技术啊首先,我们得明白人脸识别技术大概可以分为三部分:人脸检测,人脸跟踪,人脸对比请点击输入图片描述首先,你可以打开百度,搜索百度开放平台请点击输入图片描述点击进入上面搜索到的... 查看详情