基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
FROM:http://blog.csdn.net/loadstar_kun/article/details/39453839
1. 问题背景
信号的稀疏表示并不是新的东西。我们很早就一直在利用这一特性。例如,最简单的JPEG图像压缩算法。原始的图像信号经过DCT变换之后,只有极少数元素是非零的,而大部分元素都等于零或者说接近于零。这就是信号的稀疏性。
任何模型都有建模的假设条件。压缩感知,正是利用的信号的稀疏性这个假设。对于我们处理的信号,时域上本身就具有稀疏性的信号是很少的。但是,我们总能找到某种变换,使得在某个变换域之后信号具有稀疏性。这种变换是很多的,最常见的就是DCT变换,小波变换,gabor变换等。
然而,这种正交变换是传统视频图像处理采用的方法。目前所采用的一般不是正交变换。它是基于样本采样的。或者说是通过大量图像数据学习得到的,其结果称作字典,字典中的每一个元素称作原子。相关的学习算法称作字典学习。常见的算法例如K-SVD算法。学习的目标函数是找到所有样本在这些原子的线性组合表示下是稀疏的,即同时估计字典和稀疏表示的系数这两个目标。
压缩感知和稀疏表示其实是有些不同的。压缩感知的字典是固定的,在压缩感知的术语里面其字典叫做测量矩阵。但压缩感知的恢复算法和稀疏表示是同一个问题。他们都可以归结为带约束条件的L1范数最小化问题。求解这类泛函的优化有很多种方法。早在80年代,统计学中Lasso问题,其实和稀疏分解的优化目标泛函是等价的。而求解统计学中lasso 问题的LARS算法很早就被提出了,故我们还可以通过统计学的LARS算法求解稀疏表示问题。目前很多统计学软件包都自带LARS算法的求解器。
2. 基于稀疏表示的分类 SRC
人脸的稀疏表示是基于光照模型。即一张人脸图像,可以用数据库中同一个人所有的人脸图像的线性组合表示。而对于数据库中其它人的脸,其线性组合的系数理论上为零。由于数据库中一般有很多个不同的人脸的多张图像,如果把数据库中所有的图像的线性组合来表示这张给定的测试人脸,其系数向量是稀疏的。因为除了这张和同一个人的人脸的图像组合系数不为零外,其它的系数都为零。
上述模型导出了基于稀疏表示的另外一个很强的假设条件:所有的人脸图像必须是事先严格对齐的。否则,稀疏性很难满足。换言之,对于表情变化,姿态角度变化的人脸都不满足稀疏性这个假设。所以,经典的稀疏脸方法很难用于真实的应用场景。
稀疏脸很强的地方在于对噪声相当鲁棒,相关文献表明,即使人脸图像被80%的随机噪声干扰,仍然能够得到很高的识别率。稀疏脸另外一个很强的地方在于对于部分遮挡的情况,例如戴围巾,戴眼镜等,仍然能够保持较高的识别性能。上述两点,是其它任何传统的人脸识别方法所不具有的。
3. 稀疏人脸识别的实现问题
一谈到识别问题,大家都会想到要用机器学习的方法。先进行训练,把训练的结果以模板的形式存储到数据库上;真实应用环境的时候,把测试样本经过特征提取之后,和数据库中的模板进行比对,查询得到一个最相似的类别作为识别结果。往往,机器训练的时间都超级长,几天,几个礼拜乃至几个月,那是常见的事情;识别的时间一般是很小的。典型的例如人脸检测问题。这是可以接受的,因为训练一般都是离线的。
然而,基于稀疏分解的人脸识别是不需要训练的,或者说训练及其简单。基于稀疏表示的人脸识别,其稀疏表示用的字典直接由训练所用的全部图像构成,而不需要经过字典学习【也有一些改进算法,针对字典进行学习的】。当然,一般是经过简单的特征提取。由于稀疏表示的方法对使用什么特征并不敏感。故而,其训练过程只需要把原始图像数据经过简单的处理之后排列成一个很大的三维矩阵存储到数据库里面就可以了。
关键的问题在于,当实际环境中来了一张人脸图像之后,去求解这张人脸图像在数据库所有图像上的稀疏表示,这个求解算法,一般比较耗时。尽管有很多的方法被提出,但是对于实时应用问题,依然没法满足。所以,问题的关键还是归结于L1范数最小化问题上来。
L1范数最小化问题已经有很多种快速求解方法,这里主要包括有梯度投影 l1magic,l1homotopy, gpsr, 增广拉格朗日方法,这几种方法都比正交匹配追踪算法OMP要高效的多。上述几种快速算法中,采用增广拉格朗日的对偶实现相比其它的快速算法要更好。最近流行的Spit Bregman算法也是不错的选择。
SRC算法
4. 稀疏表示人脸识别的改进算法
4.2 CRC-RLS算法
4.3 RSC算法
CVPR2011 Meng Yang,Robost Sparse Coding for Face Recognition. 鲁棒的稀疏编码算法。该文作者没有直接求解稀疏编码问题,而是求解Lasso问题,因为Lasso问题的解和稀疏编码的解是等价的。在传统的SRC框架下,编码误差使用L2范数来度量的,这也就意味着编码误差满足高斯分布,然而,当人脸图像出现遮挡和噪声污染的情况下,并非如此。在字典学习框架下,这样的字典是有噪声的。该文作者对原始Lasso问题进行改进,求解加权L1范数约束的线性回归问题。Lasso问题描述如下:
加权Lasso问题的目标函数描述如下:
此算法的关键还在于权重系数的确定,文中采用的是logistic函数,而具体的实现则是通过迭代估计学习得到。该方法基于这样一个事实:被遮挡或噪声干扰的像素点赋予较小的权重,而其它像素点的权重相对较大。具体迭代算法采用经典的迭代重加权算法框架,当然内部嵌入的稀疏编码的求解过程。此算法在50%遮挡面积的情况下取得的更好更满意的结果。但是文中没有比较计算时间上的优略而直说和SRC框架差不多。
4.4 RASL算法
4.5 RASR算法
4.6 MRR算法
path(path, './Optimization');
path(path, './Data');
path(path, './GPSR');
load pf83lfw_hog_gabor_lbp;
A = fbgTrainImgs;
for i = 1:size(A,2)
A(:,i) = A(:,i)/norm(A(:,i),2); % 归一化
end
pseudoInvA = pinv(A);
% pseudoInvA = A'*A\A';
% pseudoInvA = inv(A'*A)*A';
% load pseudoInvA;
numPerson = 83;
fraction =O.5; %用多少比例的测试样本进行测试
testNum = round(size(fbgTestImgs,2)*fraction);
resultIds=zeros(testNum,1);
K = 100; % 选取前K大的系数对应的Ai组成新的矩阵求解L1范数
tau =0.01;
startInd = zeros(numPerson,1);
endInd = zeros(numPerson,1);
for j=1:numPerson
if j==1
startInd(j) =1;
endInd(j) = train_img_person(1);
else
startInd(j) = sum(train_img_person(1:j-1))+1;
endInd(j) = sum(train_img_person(1:j));
end
end
rightNum = 0;
maxDef = 10;
for i =1:testNum
% close all;
y = fbgTestImgs(:,i);
label = fbgTestIds(i);
xNorm2 = pseudoInvA * y; %对应LASRC算法 step 3
[val,ind] = sort(xNorm2,'descend');
subA = A(:,ind(1:K)); %对应LASRC算法 step 4
class =[];
for j=1:K
index = ind(j);
for k=1:numPerson
if index>=startInd(k)&index<=endInd(k)
class = [class,k];
break;
end
end
end
uniqueClass = unique(class);
numClass = length(uniqueClass);
subSubA = cell(numClass,1);
for j=1:length(class)
for k=1:numClass
if class(j)==k
subSubA{k}=[subSubA{k},j];
break;
end
end
end
xp = GPSR_BB(y,subA,tau); %对应LASRC算法 step 5
r = zeros(numClass,1);
for j = 1:numClass
if isempty(subSubA{j})
r(j)=maxDef;
continue;
end;
delta = xp(subSubA{j});
deltaA = subA(:,subSubA{j});
r(j) = norm(y-deltaA*delta);
end
% figure;bar(r);
[~,pre] = min(r);
% if (pre == label) rightNum = rightNum+1; end
resultIds(i) = pre;
fprintf('processing:%d/%d\n',i,testNum);
end
% accuracy = rightNum/testNum;
accuracy = sum(resultIds == fbgTestIds(1:testNum))/testNum;
fprintf('accuracy = %f',accuracy);
基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)相关推荐
- 《繁凡的论文精读》(一)CVPR 2019 基于决策的高效人脸识别黑盒对抗攻击(清华朱军)
点我一文弄懂深度学习所有基础和各大主流研究方向! <繁凡的深度学习笔记>,包含深度学习基础和 TensorFlow2.0,PyTorch 详解,以及 CNN,RNN,GNN,AE,GAN, ...
- 基于改进的RPCA人脸识别算法
from:http://www.chinaaet.com/article/3000011311 基于改进的RPCA人脸识别算法 作者:首照宇,杨晓帆,莫建文 2015/11/15 18:04:00 摘 ...
- 基于 Web 端的人脸识别身份验证
效果展示 人脸识别效果图 前言 近些年来,随着生物识别技术的逐渐成熟,基于深度学习的人脸识别技术取得了突破性进展,准确率显著提高.现阶段,人脸识别身份验证作为非常重要的身份验证方式,已被广泛的应用于诸 ...
- 基于深度学习的人脸识别考勤系统设计
写在前面:本文是本科阶段参加的第三次科创比赛项目,当时只有一个人做,能力精力有限,很多预期的功能都没有实现.最后的可展示程度不高,没有走得很远.本文是申报书部分,可以为除此参加科创的同学提供思路,可以 ...
- 基于open cv 的人脸识别程序
基于open cv 的人脸识别小程序 完整的程序源码已经上传到 github,但是下载后自己的电脑可能要设置一些opencv的环境,这些网上已经有文章了,自己可以去找找. 源码下载路径:https:/ ...
- 基于深度学习的人脸识别
在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一.人脸检测可以考虑人脸识别操作的很大一部分.根据其强度将计算资源集中在持有人脸的图像部分.图片中的人脸检测方法很复杂,因 ...
- 基于递归神经网络的人脸识别探究
摘要 本文首先简介了人工神经网络的发展史,继而介绍了递归神经网络的理论以及百度在基于递归神经网络的应用研究,最后探讨了递归神经网络在人脸识别中的应用. 1. 人工神经网络发展史[1][2] 人工 ...
- 基于深度学习的人脸识别综述
本文转载自 https://xraft.github.io/2018/03/21/FaceRecognition/ (作者:Caleb Ge (葛政)),如有侵权请告知删除. (下文中的"我 ...
- 基于深度学习的人脸识别算法
基于深度学习的人脸识别算法 简介 Contrastive Loss Triplet Loss Center Loss A-Softmax Loss 参考文献: 简介 我们经常能从电影中看到各种神奇的人 ...
最新文章
- 【大数据学习】数学基础及应用
- php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得
- 比較++和+的运算符优先级
- Springboot学习问题记录
- TensorFlow Lite支持设备内置会话建模
- Source Map调试压缩后代码
- 加速Java应用开发速度3——单元/集成测试+CI
- python面试题之docstring是什么?
- 基于鸿蒙操作系统移植,基于鸿蒙OS的按键驱动
- 入选 Gartner 魔力象限,剖析华为云 GaussDB 数据库演进之路
- 基于ASP.NETAJAX的WebPart开发与部署-转
- 计算机二级C语言题库
- c语言程序设计学到了什么,C语言程序设计入门学习六步曲
- C语言开发七彩连珠游戏,七彩连珠游戏介绍 七彩连珠单机版运行及玩法介绍
- 数据库根据字段查询对应所在的表或者对应的数据库
- 教你看懂MOSFET数据手册
- python乒乓球比赛规则介绍_乒乓球比赛规则简单介绍
- Scratch(五十一):端午节抛粽子
- 动态规划——背包问题九解(01背包)
- EMQX数据持久化到mysql
热门文章
- php 字典 枚举,秒爆十万字典:奇葩技巧快速枚举“一句话后门”密码
- redis 永不过期 java_死磕 Java
- ds90ub934 i2c 配置_DS90UB948-Q1:1080p 双路 FPD-Link III 解串器
- 空间连接时计算总和_【数据技术】城市功能混合程度计算
- leetcode算法题--Flatten Nested List Iterator
- snort inline模式和passive模式区别
- k8s redis集群_基于K8S部署redis哨兵集群
- leetcode @38报数-js
- MicroProfile社区对Jakarta EE的影响
- python编程分析了一下高考那些事,发现了两个之最,原来是这样