"Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification"学习笔记
这\(^{[1]}\)是一篇关于如何使用高维度特征在人脸验证中的文章,作者以主要LBP为例子,论述了高维特征和验证性能存在着正相关的关系,即人脸维度越高,验证的准确度就越高。由于那时候没有用DeepLearning在LAWF上测试精度就能达到很高的精度95+%,受到了很多人的关注。而有些开源库已经实现了这篇文章的特征提取方法,例如dlib,github的开源项目。注意他们只是实现了高维特征的提取,并没有实现降维的算法。接下来总结一下学习的笔记。
算法的主要内容和步骤如下:首先.提取高维特征;接着.学习降维矩阵;最后提取低维特征。
1.提取高维特征
如图下所示,提取高维特征的基本思路为:
a.检测人脸的对齐点(Landmarks,如图所示的黄色十字点);Landmark是刻画人脸的重要表征,因此准确的检测它们,并在这些点上提取相应的特征是非常有利于人脸识别的。
b.对人脸图像构造若干层(4-5层不等)金字塔图像(即多尺度缩放人脸),在每层图像上采用不同数量的对齐点(如下图所示,一般不考虑人脸外围的Landmarks(背景的影响较大),而是使用人脸内部的Landmarks(更具代表人脸特征))
c.将各层提取得到的特征,按照顺序拼接起来便得到高维度的金字塔LBP特征向量。

具体的实现请参考例如dlib,github的开源项目。选取的Landmarks和文章略有不同。如此下来,高维度的特征向量\(X\)的维度可以达到非常高的维度,10k-100k不等。而降低维度更有利于分类器的学习和距离的比较。接下来就是如何学习一个有效的降维矩阵\(B\),使得降维后的特征向量\(Y=BX\)。
2.学习降维矩阵
降维矩阵\(B\)的学习思路非常的简单,如下图所示,学习的步骤如下:
a. 假设参照1.提取高维特征提取特征方法,采集了若干个人的\(N\)张图片提取得到的高维度集合\( X=\left [ x_{1},x_{2},...,x_{N} \right ] \)。
b. 对\( X \)利用PCA降维度,再用监督的子空间学习\(^{[2-3]}\)得到相应的特征集合\( Y=\left [ y_{1},y_{2},...,y_{N} \right ] \)。
c. 利用数据\( X ,Y\),最优化以下的目标函数,得到最优的变换矩阵\(B\):
\(\lim_{R,B} {\left | R^{T}Y-B^{T}X \right |_{2}^{2}} + \lambda \left | B \right |_{1} \quad s.t. R^{T}R=I\)
\(R\)表示旋转矩阵,使用\(R\)的主要原因是因为在子空间中的距离测度是具有旋转不变性的;\(B\)表示降维矩阵。求解的过程也很常用的手段,即固定\(R\)求解\(B\),固定\(B\)求解\(R\),如此迭代多次就能达到收敛。

3. 提取低维特征
如上图所示,提取低纬度特征的步骤如下:
a. 对于测试图片,参照1.提取高维特征提取特征\(x_{t}\)。
b. 利用变换矩阵\(B\),对\(x_{t}\)降维,得到\(y_{t} = B x_{t}\)。
参考论文
[1]. D. Chen, X. Cao, F. Wen, J. Sun. Blessing of Dimensionality: High-dimensional Feature and Its Efficient Compression for Face Verification. Computer Vision and Pattern Recognition (CVPR), 2013.
[2]. P. N. Belhumeur, J. P. Hespanha, and D. J. Kriegman. Eigenfaces vs. Fisherfaces: Recognition Using Class Specific Linear Projection. IEEE Trans on PAMI, 1997.
[3]. D. Chen, X. Cao, L. Wang, F. Wen, and J. Sun. Bayesian face revisited: A joint formulation. In European Conference on Computer Vision, pages 566–579, 2012.
"Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification"学习笔记的更多相关文章
- ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)
ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰 ...
- Git学习笔记(6)——Bug和Feature分支
本文主要记录了通过Git来调试Bug和添加新的功能,也就是Bug分支和Feature分支,以及分支的推送. Bug分支 通过Git,我们可以为每个Bug建立一个分支,Bug修复后,合并分支,然后将临时 ...
- 学习笔记之 初试Caffe,Matlab接口提取feature
Caffe 提供了matlab接口,可以用于提取图像的feature.
- OpenLayers学习笔记(五)— 拖拽Feature图层
参考文档的例子可以知道如何拖动矢量图层feature GitHub: 八至 作者:狐狸家的鱼 本文链接:拖拽Feature图层 全部代码 <!DOCTYPE html> <html& ...
- OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)
1 错误原因 1.1 报错全部信息: cv2.error: OpenCV(4.0.1) D:\Build\OpenCV\opencv_contrib-4.0.1\modules\xfeatures2d ...
- Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
2017-09-22 refer : https://msdn.microsoft.com/en-us/magazine/mt763233.aspx?f=255&MSPPError=-2147 ...
- 学习笔记(五): Feature Crosses
目录 Feature Crosses Encoding Nonlinearity Kinds of feature crosses Glossay Crossing One-Hot Vectors P ...
- 学习笔记(四): Representation:Feature Engineering/Qualities of Good Features/Cleaning Data/Feature Sets
目录 Representation Feature Engineering Mapping Raw Data to Features Mapping numeric values Mapping ca ...
- git 学习笔记--Feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来. 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合 ...
随机推荐
- python网络编程--线程锁(互斥锁Mutex)
一:为什么需要线程锁 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? 很简单,假设你有A,B两 ...
- jenkins打包安卓项目
jenkins打包安卓项目和其它项目差不了太多. 1.构建选择 gradle(如果不用gradle自己写脚本编译也可) 2.jenkins用户需要安装JDK.SDK,jenkins会自动下载gradl ...
- No.5 selenium学习之路之多窗口句柄
多窗口相关操作 获取当前句柄 c_handle = driver.current_window_handle 获取所有句柄 all_handle = driver.window_handles 切换到 ...
- UFLDL 教程学习笔记(四)
课程地址:http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/ 在之前的练习中,图片比较小, ...
- Java 中判断字符串是否为空
public class TestString { public static void main(String[] args) { String abc = null; //先判断是否为null再判 ...
- SQL中的left outer join,inner join,right outer join用法详解
这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数 ...
- Python学习笔记:import sys模块(argv、path、platform、exit)
sys模块是Python标准库中自带的一个模块. sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互,如:Pyth ...
- mac上Python安装和修改Python默认路径遇到的问题
此处例子是我使用homebrew安装了python3.6.1,建立一个符号链接,创建一个python3的命令,达到使用自己安装的python3的目的.此处不修改PATH,而是把需要添加的可执行文件或者 ...
- Spring+Dubbo集成Redis的两种解决方案
当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...
- HTTPS、SPDY和HTTP/2的性能比较
http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison/ https://segmentfault.com/a/1190000 ...