如何将caffe 人脸模型训练从68点降低到21点

1985人阅读
人脸识别(8)
opencv(36)
-----语言相关-----(63)
惯例开头放结论:
1.光照对于人脸检测的影响非常大,光照充足且均匀更方便人脸检测
2.特征点匹配花费时间较少(每个大约3-5ms),人脸检测用640*480的摄像头大概每帧需要100ms,之后有空写一篇博客针对这个缺点进行算法改进。
-----------------------------------------------------------------------
今天上午在食堂测试Dlib人脸特征点检测程序,效果好到爆炸,所以忍不住来写一篇博客了……
首先放一张效果图吧,可以看出来即便扭头角度达到近乎九十度也能较好地识别出来(比之前在图书馆以及寝室以及实验室的效果要好很多)
初步分析为光照问题,本次测试是在光线充足且均匀的食堂,环境如下:
在寝室环境下80%的情况会检测不到人脸(效果很差),故而在结果层面,至少人脸检测部分对于光照的依赖性非常强。
在食堂环境下的动态效果如下:
在实验室光照一般情况下的效果:
在寝室基本检测不出人脸就不放图了
可以看得出来在实验室的时候脸稍微测一下基本就检测不出人脸了,但是在食堂环境下偏侧较大的角度仍能较为准确地检测出人脸……
故而均匀的光照是这种人脸检测方法的鲁棒性的必要条件
-----------------------------------
下面来看下Dlib人脸检测部分的代码,总共有两块核心内容:
1.人脸检测(也就是检测出有人脸)
核心代码如下:
& & & &&frontal_face_detector&detector = get_frontal_face_detector(); &
2.特定点定位(在人脸检测的矩形框基础之上进行特征点标定)
核心关键代码如下:
①载入训练好的模型:
& & & &&shape_predictor&pose_ &
&&&&&&&&deserialize(&shape_predictor_68_face_landmarks.dat&)&&&&pose_ &
②进行特征点定位:
& & & & & &&for&(unsigned&long&i = 0; i & faces.size(); ++i) &
&&&&&&&&&&&&&&&&shapes.push_back(pose_model(cimg, faces[i])); &
再返回来看之前的效果图(代码粘在下面):
这台笔记本的配置如下:
可以看出在I5四代标压双核处理器的笔记本上,载入模型花费时间大约在秒左右
每帧检测人脸Detector函数耗时大约稳定在100ms(软件运行过多的情况下会到180ms)
每张脸特征点的提取大约在3-5ms,没有脸的时候近乎是,测试两个人的时候大约在-10ms。
两个人的检测效果如下(2333,女票实力马赛克):
可以料想的是绝大部分耗时都用在了人脸检测提取之上,这也是后续可能要花费大力气去解决的问题。
如果想移植到其他处理性能一般的平台上,检测人脸的部分肯定是需要大改的……
配置Dlib见博客:
详细测试代码如下:
//http://blog.csdn.net/zmdsjtu/article/details/
#include &dlib/opencv.h&
#include &opencv2/opencv.hpp&
#include &dlib/image_processing/frontal_face_detector.h&
#include &dlib/image_processing/render_face_detections.h&
#include &dlib/image_processing.h&
#include &dlib/gui_widgets.h&
#include &Windows.h&
class 高精度计时
高精度计时(void);
~高精度计时(void);//析构函数
LARGE_INTEGER 开始时间;
LARGE_INTEGER 结束时间;
LARGE_INTEGER CPU频率;
double 间隔;
void 开始();
void 结束();
高精度计时::高精度计时(void)
QueryPerformanceFrequency(&CPU频率);
高精度计时::~高精度计时(void)
void 高精度计时::开始()
QueryPerformanceCounter(&开始时间);
void 高精度计时::结束()
QueryPerformanceCounter(&结束时间);
间隔 = ((double)结束时间.QuadPart - (double)开始时间.QuadPart) / (double)CPU频率.QuadP
int main()
高精度计时 时间;
时间.开始();
cv::VideoCapture cap(0);
if (!cap.isOpened())
cerr && &Unable to connect to camera& &&
// Load face detection and pose estimation models.
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor pose_
deserialize(&shape_predictor_68_face_landmarks.dat&) && pose_
时间.结束();
float 初始化时间 = 时间.间隔;
DWORD k = ::GetTickCount(); //获取毫秒级数目
// Grab and process frames until the main window is closed by the user.
while (cv::waitKey(30) != 27)
// Grab a frame
cv::putText(temp, &Initial Time/ms : & + to_string(初始化时间 * 1000), cv::Point(20, 380),5, 2, cvScalar(0, 0, 255));
cv_image&bgr_pixel& cimg(temp);
// Detect faces
// DWORD k = ::GetTickCount(); //获取毫秒级数目
std::vector&rectangle& faces = detector(cimg);
时间.结束();
cout && &检测人脸部分耗时:& && 时间.间隔*1000 &&
cv::putText(temp, &Face Detector/ms : & + to_string(时间.间隔 * 1000), cv::Point(20, 420),5,2, cvScalar(0, 0, 255));
// cout && (::GetTickCount() - k) &&
// Find the pose of each face.
std::vector&full_object_detection&
// k = ::GetTickCount();
时间.开始();
for (unsigned long i = 0; i & faces.size(); ++i)
shapes.push_back(pose_model(cimg, faces[i]));
if (!shapes.empty()) {
for (int j = 0; j & shapes.size();j++){
for (int i = 0; i & 68; i++) {
circle(temp, cvPoint(shapes[j].part(i).x(), shapes[j].part(i).y()), 2, cvScalar(255, 0, 0), -1);
shapes[0].part(i).x();//68个
时间.结束();
cout && &剩余部分的总时间:&&& 时间.间隔 * 1000 && endl&&endl&&
cv::putText(temp, &The rest/ms: &+to_string(时间.间隔 * 1000), cv::Point(20, 460),5, 2, cv::Scalar(0,0, 255));
//Display it all on the screen
imshow(&Dlib特征点&, temp);
catch (serialization_error& e)
cout && &You need dlib's default face landmarking model file to run this example.& &&
cout && &You can get it from the following URL: & &&
http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2& &&
cout && endl && e.what() &&
system(&pause&);
catch (exception& e)
cout && e.what() &&
最后祝被打马赛克的人天天开心~
当然也祝大家开发愉快咯~
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:209957次
积分:3948
积分:3948
排名:第8222名
原创:168篇
评论:245条
阅读:3307
(3)(6)(10)(9)(16)(14)(7)(12)(7)(26)(14)(12)(31)(12)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix' 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Lasso整脸形状回归的人脸配准算法
下载积分:1000
内容提示:Lasso整脸形状回归的人脸配准算法
文档格式:PDF|
浏览次数:22|
上传日期: 15:05:25|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
Lasso整脸形状回归的人脸配准算法
官方公共微信4950人阅读
人脸检测(43)
1 Face++:
其提供的技术服务有1:人脸检测(人脸检测追踪,人脸关键点检测) 2:人脸分析(微笑分析,性别年龄种族表情)3:人脸识别(1:1,1:N,大规模人脸搜索)。我需要关注的是这里的人脸关键点检测的实现。Face++为美图秀秀,美颜相机提供人脸关键点检测的技术服务。
2 Face++一个采访问题,能够了解人脸识别技术的整个流程。
CSDN移动:可否介绍一下,典型的人脸识别系统是什么样子的?
印奇:当今的人脸识别系统虽然包含无数细节和各种工程技巧,但大的系统框架不外乎如下图所示的流程:一张人脸图片输入后,需要先找到人脸的位置(人脸检测),然后在这个基础上定位人脸关键点的位置(如眼睛中心或嘴角等),每个系统关键提取的数量相差很大,有的只有左右眼睛中心两个点,有的可能多达近百个点。这些点的位置一是用来做人脸的几何校正,即把人脸通过缩放、旋转、拉伸等图像变化变到一个比较标准的大小位置。这样待识别的人脸区域会更加规整,便于后续进行匹配。同时,现在的实际系统一般也都配有人脸光学校正模块,通过一些滤波的方法,去除一些对光照更加敏感的面部特征。在做完这些预处理之后,就是从人脸区域提取各种特征,包括LBP、HOG、Gabor等。最终相关的特征会连接成一个长的特征向量(Feature&Vector),然后匹配出人脸的相似度,根据相似度的大小,系统会判定两张图片到底是不是一个人。不难看出,人脸识别技术还是一个系统链条较长,较为有技术门槛的领域。因为这条流水线的每个环节可能都会严重影响最终系统性能,所以一个好的人脸识别技术公司需要在各个环节上追求细节,建立自己的技术优势,最终才有可能在最后的人脸识别精度上有出色的表现。
3 人类识别人脸用的是什么算法:
上面链接是知乎上面的讨论,有一个关于生物学方面的解释。
又一个Face++的专访:
通过下面这段话可以了解到目前的一些测试平台:
人脸检测(在照片中精准定位人脸位置的算法),在世界公开评测集FDDB 排名人脸关键点检测(精准定位面部关键部门的位置),在世界公开评测比赛300-W排名。在最重要的互联网图片人脸识别(Face recognition) 比赛LFW中,Face++团队更是力压Facebook人脸团队 (前团队),获得世界。在极难识别的互联网新闻图片上,获得了97.3%的准确率。
Face++:&Face++已经能够较为稳定地应对复杂的光照和人脸姿态,但过于极端的光照和姿态还是十分困难。Face++的全线技术都更新为大数据深度学习算法,通过收集的海量人脸照片,新型的神经网络算法可以通过大数据训练形成性能更好的人脸检测,人脸分析,和人脸识别技术。
所以我的感觉是技术实现的方式采用:深度学习与传统算法相结合,互补的方式,并注重深度学习方面的创新。Face++ 目前发布的两篇论文,关键点检测和人脸特征表示都是基于DCNN的技术。
SegmentFault:&Face++的算法研发用到了C++、Matlab和Python?能比较下Matlab和Python在视觉算法研究方面的优势和不足么?
Face++:&优势是比较糙快猛,方便验证idea;落实到系统和实用级别,可能还是要采用C++。所以用matlab验证完idea后,用C++做实现。不妨申请下Face++的实习生。
4 阅读文献《人脸特征点定位研究与应用-吴证》
文中提到几种人脸关键点检测的方法:
1投影(五官灰度值较周围皮肤灰度值低)
2基于先验规则(先验知识指的是人脸比如眼睑、虹膜等一些已知的灰度、形状信息)
3基于几何形状(比如可变形模板,能够较好检测眼睛嘴唇特征形状,但是由于边缘不精确难以精确定位特征点,依赖初始参数大,容易陷入局部最小,计算时间长)(另外还有主动形状模型(ASM),主动表观模型(AAM))
4基于统计的方法(该方法的思想是将特征部位看做一类模式,然后使用大量的特征部位样本和非特征部位样本进行训练,然后构造分类器,该类方法主要有PCA(主成分分析)、SVM、ANN(神经网络)、AdaBoost、模板匹配)
5基于小波和小波包
5 机器学习的封装好的库:
这里有关于库的介绍:
theano:妹纸目前推荐我用这个库,python封装的。知乎上有不少人用这个,但是统一的评论是调试不方便。theano,教程比较基础,安装非常简单,几个指令可以搞定,不过用他来做开发实在太麻烦,建议配合keras使用,非常赞。
Theano   
Github网址:
还有一些库比如:matconvnet、Lasagne、opencv、nolearn、keras、caffe
最新的kaggle比赛中很多人用的是nolearn + lasagne,这两个库也是基于Theano作为核心建立的。&&
6 目前我的打算
我的目的:实现对人脸的关键点定位
学习思路:打算通过深度学习的方式来进行关键点检测,首先在ufldl上学习深度学习的入门知识,然后在网络的博客上找别人用python写的人脸检测的算法,最后自己基于C++实现,然后app中java调用。
比如链接:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1238550次
积分:15298
积分:15298
排名:第752名
原创:103篇
转载:1353篇
评论:188条
个人邮箱: xuxiduo@
1)OpenCV俱乐部
2) 视频/音频/图像/算法/ML
备注:加群需要回答问题,避免广告党。
如果你是博客看到后加的,请注明“博客”并回答问题,只注明”博客“不回答问题的恕不加入。答案为和群相关的任何技术名词,不能出现1)和2)中的任何字眼
阅读:6850
文章:16篇
阅读:12020
阅读:6477
文章:32篇
阅读:41154
(24)(46)(6)(9)(8)(8)(31)(20)(18)(42)(70)(118)(143)(56)(68)(107)(226)(78)(3)(9)(37)(46)(50)(19)(15)(13)(27)(12)(12)(103)(18)(18)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'5582人阅读
生成式模型(5)
人脸识别(10)
&&&&&&&& 人脸的Pose检测可以使用基于位置约束的特征点的方法。人脸特征点定位的目的是在人脸检测的基础上,进一步确定脸部特征点(眼睛、眉毛、鼻子、嘴巴、脸部外轮廓)的位置。定位算法的基本思路是:人脸的纹理特征和各个特征点之间的位置约束结合。经典算法是ASM和AAM。
&&&&&&&& 一不小心听懂了ASM、AAM、CLM算法,还是记录下来......................
CLM/AAM/ASM/Snake模型:
&&&&&&&& 参考文献:An Introduction to Active Shape Models.& Constrained Local Model for FaceAlignment. Xiaoguang Yan(2011).
&&&&&&&& Kass et al [15] introduced Active Contour Models (or ‘snakes’) which are energy minimising curves. In the original formulation the energy has an internal term which aims to impose smoothness on the curve, and an external term which encourages movement
toward image features. They are particularly useful for locating the outline of general amorphous objects, such as some cells (see Chapter 3, secion 3.1 for the application of a snake to microscope images). However, since no model (other than smoothness) is
imposed, they are not optimal for locating objects which have a known shape. As the constraints are weak, this can easily converge to incorrect solutions.
&&&&&&& ASM模型起源于snake模型(作为动态边缘分割的snake模型),该方法用一条由n个控制点组成的连续闭合曲线作为snake模型,再用一个能量函数作为匹配度的评价函数,首先将模型设定在目标对象预估位置的周围,再通过不断迭代使能量函数最小化,当内外能量达到平衡时即得到目标对象的边界与特征。
&&&&&&& 1989年yuille等人此提出使用参数化的可变形模板来代替snake模型,可变形模板概念的提出为aam的产生奠定了理论基础。
&&&&&&& 1995年cootes等人提出的asm算法是aam的直接前身,asm采用参数化的采样形状来构成对象形状模型,并利用pca方法建立描述形状的控制点的运动模型,最后利用一组参数组来控制形状控制点的位置变化从而逼近当前对象的形状,该方法只单纯利用对象的形状,因此准确率不高.
&&&&&&& 1998年,cootes等人在asm算法的基础上首先提出aam,与asm的不同之处是他不仅利用了对象的形状信息而且利用了对象的纹理信息。
Snake模型:
&&&&&&&& 参考文章:
自1987年Kass提出Snakes模型以来,各种基于主动轮廓线的图像分割理解和识别方法如雨后春笋般蓬勃发展起来。Snakes模型的基本思想很简单,它以构成一定形状的一些控制点为模板(轮廓线),通过模板自身的弹性形变,与图像局部特征相匹配达到调和,即某种能量函数极小化,完成对图像的分割。再通过对模板的进一步分析而实现图像的理解和识别。
&&&&&&& 简单的来讲,SNAKE模型就是一条可变形的参数曲线及相应的能量函数,以最小化能量目标函数为目标,控制参数曲线变形,具有最小能量的闭合曲线就是目标轮廓。
模型的形变受到同时作用在模型上的许多不同的力所控制,每一种力所产生一部分能量,这部分能量表示为活动轮廓模型的能量函数的一个独立的能量项。
&&&&&&&& Snake模型首先需要在感兴趣区域的附近给出一条初始曲线,接下来最小化能量泛函,让曲线在图像中发生变形并不断逼近目标轮廓。
&&&&&&& Kass等提出的原始Snakes模型由一组控制点:v(s)=[x(s), y(s)]&& s∈[0, 1]组成,这些点首尾以直线相连构成轮廓线。其中x(s)和y(s)分别表示每个控制点在图像中的坐标位置。 s是以傅立叶变换形式描述边界的自变量。在Snakes的控制点上定义能量函数(反映能量与轮廓之间的关系):
&&&&&&&&&&&
&&&&&&&&& .................................................
&&&&&&&&& 此外由不同的参数不同的函数值,表示为轮廓能量表达式,通过最小化轮廓能量来控制轮廓的演化,完成图像分割。
&&&&&&&&& 效果:原始的snake模型倾向于生成光滑的边缘,对边缘变化剧烈的图像分割效果不明显....
&&&&&&&&& 其他方法:基于轮廓内外函数差值的图像分割方法
&&&&&&&& 参考文献:An Introduction to Active Shape Models
&&&&&&&& 参考文献:
&&&&&&&& 算法理论查看论文即可,在此处只列出ASM算法其中的几个关键点,也是当初起疑的地方。
&&&&&&&& ASM是一种基于点分布模型()的算法。在中,外形相似的物体,例如人脸、人手、心脏、肺部等的几何形状可以通过若干关键特征点()的坐标依次串联形成一个形状向量来表示。本文就以人脸为例来介绍该算法的基本原理和方法。首先给出一个标定好个关键特征点(怎么标的??)的人脸面部图片,如下所示:
&&&&&&&& 三维框显示了面部的位姿。ASM在实际应用中,包括了一般的ML训练和搜索两个部分。年级大了,就显得憔悴......................
ASM模型:训练/学习过程
&&&&&&& 1、建立形状模型
&&&&&&&& 搜集N个训练样本:
&&&&&&&&&&&&&&&& 搜集的图片只要有人脸的面部区域就可以了,暂时不需要考虑尺寸的归一化问题。以便完成人脸区域的ASM训练。
&&&&&&&& 手动记录每个样本中的k个关键点:
&&&&&&&&&&&&&&&&& 对于训练集中的一个图片而言,你需要手动标记下(68)个关键点的位置坐标信息,并且将它们保存在文本中。最好用程序实现半自动化标定。
&&&&&&&& 构建训练集的形状向量:
&&&&&&&&&&&&&&&& 将一幅图片中的K个关键点组成一个形状向量 X( Xi,Y ), 其中,Xi 为 i 个位置坐标组成的向量,这样所有N个图像便生成N个训练样本,构成了N个形状向量组成的集合S(X |X(Xi,Y ) ,N )。
&&&&&&&& 形状归一化:
&&&&&&&&&&&&&&&& 改步骤的目的在于对前面手动标定的人脸形状进行归一化或者对齐操作,从而消除图片中人脸由于不同角度、距离远近、姿态变换等外界因素造成的非形状干扰,从而使点分布模型更加有效。 一般,使用Procrusts方法进行归一化:把一系列的点分布模型通过适当的平移、旋转和缩放变换,在不改变点分布模型的基础上对齐到一个点分布模型,从而改变原始的 非形状干扰。
&&&&&&&&&&&&&&&& Procrusts归一化方法一般为使用一个四元数:旋转角度a, 缩放尺度s,水平位移x, 垂直位移y 。可以用一个 4X4 的矩阵来完成转换过程。
&&&&&&&&&&&&&&&& 在ASM模型中,利用Procrusts转换 完成 点分布模型的对齐操作,具体过程为:
&&&&&&&&&&&&&&&&&&&&&&&&&&& (1)、将训练集中的所有人脸模型对齐到第一个人脸模型(典型意义,可以自主选择);
&&&&&&&&&&&&&&&&&&&&&&&&&&& (2)、计算平均人脸模型 X0,
&&&&&&&&&&&&&&&&&&&&&&&&&&& (3)、将所有人脸模型对齐到平均人脸 X0,
&&&&&&&&&&&&&&&&&&&&&&&&&&& (4)、重复(2)(3),直至X0收敛或者到一定时间停止。
&&&&&&&&& 灰度模型:
&&&&&&&&&&&&&&&&& 方法请参考原始论文
&&&&&&&&& 选择是否PCA:
&&&&&&&&&&&&&&&&&&&& 若考虑到某些特征的影响可以忽略,可以考虑PCA。
&&&&&&&&& 示意图:
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& 模型描述:
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& X 为平均脸,b表示一个脸与平均脸的差的参数化,可以描述为图像到参数空间的变化。任意的一个脸可以由平均脸和参数b来进行描述,参数b描述了平均脸到人脸的细微变化。
ASM模型:搜索/使用过程
&&&&&&& 通过训练样本集得到ASM模型之后即可进行ASM搜索,首先对平均形状进行仿射变换得到一个初始模型:
&&&&&&&&&&&&&&& X = M( Tp ) + Xc
&&&&&&& 用初始模型在新的图像中搜索目标形状,使搜索中的特征点和相对应的特征点最为接近,搜索过程可以通过仿射变换Tp和参数b变化(Xc)完成。
&&&&&&& 进行迭代搜索,持续优化Xc,计算最接近模型。
初始化过程:
&&&&&&& 依据上述描述,目标向量的初始化是由 初始模型在图像中搜索得到,这是个得到近似结果的过程。也可以借由其他的人脸检测算法检测出人脸,再由初始模型按照固定参数起始点进行搜索,得到目标形状向量。
迭代匹配过程:
&&&&&&& 原始过程描述:
&&&&&&&& &&&&&
&&&&&&&& 通过模型由平均脸 y0 寻找 目标向量 Y,& 来获得仿射转换参数Tp;
&&&&&&&& ---------由 Y 经 Tp的逆 得到 平均脸的接近值 y;
&&&&&&&& 通过向y 的 切平面 投影得到原始尺度 y1;
&&&&&&&& 得到模型描述的残差b = y1 - y0 ;再由 b 更新 Y------------
&&&&&&&& 反复迭代,直到 残差b 小到一定范围...
&&&&&&&& 结果:得到形状和Pose(x,y,z,旋转)最匹配 平均脸 的结果Y,完成对齐过程,和得到一个收敛的 b来描述结果。
&& & && ASM的搜索过程:
&&&&&&&&&&&&&&& 持续更新Y:根据灰度模型来更新Y;
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& 由更新的 Y 获得 y, y1, 更新b 。
&&&&&&& 参考文献:Active Appearance Models
&&&&&&& ASM是基于统计形状模型的基础上进行的,而AAM则是在ASM的基础上,进一步对纹理(将人脸图像变形到平均形状而得到的形状无关图像g)进行统计建模,并将形状和纹理两个统计模型进一步融合为表观模型。
&&&&&&& AAM模型相对于ASM模型的改进为:使用两个统计模型融合 取代 ASM的灰度模型。主要对特征点的特征描述子进行了改进,增加了描述子的复杂度和鲁棒性。
&&&&&&&& 参考链接:&&&&&&&&&&&&&&&&
Patch模型/Local模型:
&&&&&&&& 在ASM构建好形状模型之后,我们就可以在检测到的人脸上初始化一个人脸形状模型,接下来的工作就是让每个点在其邻域范围内寻找最佳匹配点。ASM使用灰度来更新Y,是沿着边缘的方向进行块匹配。匹配高错误率导致ASM的性能不是很好。后续各种改进版本大部分做法都是对候选匹配特征点邻域内的块--局部 进行建模,我们统称他们为有约束的局部模型:CLM。
局部特征提取:
&&&&&&& 建议提取laws特征,比较有普遍适用性。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& & & & & & & & & & & & CLM模型& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && 特征点(左)其邻域响应图(右)
优化过程:
&&&&&&& 寻找最小残差b 最后为可以转化为一个二次凸优化问题,作者在论文里有详细的解释。
&&&&&&& ...........................................&&&&&&&
人脸的Pose检测:
&&&&&&&& 人脸的Pose检测需要一个 SolvePNP 的过程,对于固定三维点集模型,找出二维点集对应的位姿。此外,在track时使用点集寻找一个最优的位姿起始,应该给出一个好的起始点。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:784348次
积分:10971
积分:10971
排名:第1493名
原创:280篇
转载:280篇
译文:28篇
评论:177条
(5)(9)(15)(11)(8)(4)(18)(4)(1)(2)(3)(3)(2)(8)(11)(13)(40)(4)(4)(3)(3)(21)(5)(12)(13)(16)(14)(8)(4)(24)(8)(10)(23)(3)(7)(1)(16)(21)(11)(3)(5)(10)(21)(11)(17)(38)(28)(28)(12)(24)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'人脸识别研究的新进展及趋势
人脸识别研究的新进展及趋势
摘 要:简要回顾了人脸识别技术的研究背景及发展历程,总结了近三四年人脸识别方法的研究进展,根据三维人脸重构方法的数据来源不同,将其分为基于静态图像和视频序列的三维重构技术。重点对目前多特征和多模态识别技术进行了分类阐述,分析了一些有代表性的算法并对其识别结果进行了比较。最后,总结了人脸识别技术现存的研究难点,并探讨了其未来的发展方向。
关键词:人脸识别;三维人脸重构;多特征;多模态
摘 要:简要回顾了人脸识别技术的研究背景及发展历程,总结了近三四年人脸识别方法的研究进展,根据三维人脸重构方法的数据来源不同,将其分为基于静态图像和视频序列的三维重构技术。重点对目前多特征和多模态识别技术进行了分类阐述,分析了一些有代表性的算法并对其识别结果进行了比较。最后,总结了人脸识别技术现存的研究难点,并探讨了其未来的发展方向。
关键词:人脸识别;三维人脸重构;多特征;多模态
&&& 在现有的众多生物特征(指纹、虹膜、视网膜、掌形等)识别技术中,人脸识别技术具有传统的识别技术无法比拟的优点,如直接、友好、对用户干扰少、更易于被接受等。人脸识别技术是一门融合了多学科(生物学、心理学、认知学等)、多技术(模式识别、图像处理、计算机视觉等)的新的生物识别技术,它具有广泛的应用和巨大的市场前景,可用于身份确认(verification or authentication 一对一比较)、身份鉴别(identification or recognition 一对多匹配)、访问控制(门监系统)、安全监控(银行、海关监控)、人机交互(虚拟现实、游戏)等。在人脸识别研究的早期阶段,识别技术主要依赖于人的先验知识,也就是二维人脸识别方法。20世纪80年代,二维图像处理技术日趋成熟,在一定约束条件下人脸识别已经能取得较好的效果,但同时也暴露了二维人脸识别技术对环境和人脸姿态变化鲁棒性差的缺点。从20世纪90年代开始,随着计算机性能的飞跃性发展和成像技术的进一步提高,三维人脸识别技术成为目前最受关注的新方法[1]。在国内,比较有代表性的成果是北京奥运会使用的自动人脸识别系统。
1 三维人脸重构方法
&& &三维人脸重构是指通过含有人脸的图像或视频中有限的人脸信息来建立人脸三维模型。根据人脸信息来源的不同,本文将三维人脸重构方法分为从静态图像重构和从视频序列重构两大类。
1.1 从静态图像重构三维人脸
&& &传统的三维重建技术大多是通过特征点的提取和匹配计算特征点的三维坐标来获取脸部的三维结构。特征点定位有手工标定和自动检测两种,特征点数目比较大时,手工标定很难严格定义特征点之间的对应关系。ZHANG C等人[2]采用点对点集的距离来间接描述特征点之间的相似度,但是,这种局部相似度不能保证全局最优匹配,且有可能造成畸变。
&& &为了减少点对应性的困难,参考文献[3]中提出了以形状匹配为相似性度量的通用头部形变模型,在不需要严格的特征点对应甚至某些特征点缺失的情况下,完成姿态估计和三维重建。为了解决搜索点之间的最佳相似性,文中还提出了一种多级搜索的方法,大大减少了搜索时间,但这只是基于多幅图像的情况。虽然多幅图像可以消除人脸特征部件检测的不确定性,但特定脸的多幅图像一般难以获得,所以当前的很多研究都是基于单一图像的。为了能获得人脸的完整的脸部特征信息,单一图像一般要求是正面人脸图像且是中性表情。
&& &BREUER P[4]和胡元奎[5]等人都是基于单一图像进行建模。参考文献[4]中提出了一种融合支持向量机(Support Vector Machine)和三维形变模型(3D Morphable Model)的方法,分别用不同方法检测人脸和人脸的局部特征(鼻尖、眼角、嘴角),然后确定人脸特征可能的位置并评估特征点的轮廓,通过迭代处理提高算法对头部方向的鲁棒性,最后初始化形变模型的模型试配流程来产生高分辨率的三维人脸模型。但是,形变模型算法需要花费很长的时间对大量的三维人脸数据进行训练。参考文献[5]基于通用三维人脸模型的三维人脸合成方法能很好地减少算法的复杂性和训练时间。他们利用了基于知识的特征点定位算法和ASM(Active Shape Model)方法进行人脸特征点的定位,用SFS(Shape From Shading)算法恢复人脸表面深度,并利用内插算法对通用三维人脸模型进行变形处理以生成适用于特定人脸的三维模型。此算法的优点是只需要一个通用的三维人脸模型即可,不需要进行额外的训练,而且对训练数据以及存储空间的实际需求很容易满足,具有明显的优势。
&& &无论是单一图像还是多幅图像,静态图像提供的信息都是相对有限的,例如无法提供连续多帧图像和时间相干性 。于是,在研究从静态图像重构人脸模型的同时,少数研究尝试了从视频图像序列重构三维人脸模型的方法。
1.2 从视频序列重构三维人脸
&& &从视频重构人脸的过程和从单一图像重构人脸的过程基本上一样(如图1所示),只是源图像不同。视频序列虽然也可以使用适合于单一图像的方法,如参考文献[4]从图像序列中选出最合适的一帧图像(例如正面图像)来重构三维人脸模型,但这显然不是应用视频序列图像的目的。
&& &PARK U等[6]用通用三维人脸模型和两个视频帧来重构特定用户三维人脸模型。他们从立体视频中重建脸部标记点的稀疏集合,将其用于薄板样条TPS(Thin Plate Spline)的试配过程,在TPS试配的基础上对一般人脸模型进行非线性变换,得到合适的三维人脸模型,将视频中人脸纹理信息对三维人脸模型进行映射,从而获得真实的三维人脸模型。该方法应用比较广泛,但在重建的初始化阶段,初始值与通用模型非常相似,导致重建的模型与视频中的人脸相比更近似于通用人脸模型。此缺点可以利用SFM(Structure From Motion)算法[7]解决。首先,SFM算法能够保留通用人脸模型的特定特征;其次,通过与通用人脸模型比较,两脸间的误差在能量函数最小化过程中都被修正。但是,不使用通用模型,单纯用SFM算法对视频图像进行三维估计会使深度估计变得困难,可能会带来其他信息不足或估计误差等问题。文中的算法流程如图2所示[7]。
2 多特征融合人脸识别方法
&& &重构三维人脸模型只是人脸识别的重要手段之一,但其算法相对复杂。目前,使用多方法(二维)融合来提高识别性能还是人脸识别领域研究的热点[8-15]。多方法融合主要分为融合多种脸部特征(肤色、轮廓和纹理等信息)和融合多种模态(二维和三维信息)两种。由于图像与形状信息相对独立,多特征融合的人脸识别方法曾经很少使用。
&& &2005年前后,SU Hong Tao[8]和周晓彦等人[9]分别提出了融合主分量分析PCA(Principal Component Analysis)与线性判别式分析LDA(Linear Discriminant Analysis)混合特征和融合核主元分析KPCA(Kernel Principal Component Analysis)与核判别式分析KDA(Kernel Discriminant Analysis)的人脸识别算法。在参考文献[8]中,利用库中图像和被检测图像的交互信息进行粗分类,在图形数据的傅里叶频率区域进行PCA和LDA特征的抽取。由于PCA和LDA能分别反映图像的不同特性,故融合两子特征将取得比单一特征更好的分类性能。参考文献[9]首先求解KDA的最佳判别矢量,然后基于KPCA准则函数求得另一组投影矢量,最后将两组投影矢量融合成一组新的特征矢量用于特征的提取。
&& &与参考文献[8]和参考文献[9]不同,LIU Zhi Ming等[10]应用了颜色和频率特征。离散傅里叶变换将肤色RIQ空间转换到频域并分别求出各个颜色分量的掩饰面(mask),用增强Fisher模型EFM(Enhanced Fisher Model)抽取互补频率特征(包括检测脸、库中人脸和R分量大小),在特征水平上用级联的方法将其融合在一起,将得到的相似性结果用于分类。分别对各个分量进行互补频率特征抽取和分类,最后将分类结果通过加权因子再次融合在一起,用于人脸的识别。该方法比单颜色分量时的识别率有很大的提高,这也说明,单一特征所包含的信息都是有限的。充分利用人脸的肤色和纹理结构等各种特征,将会取得较好的识别效果。
3 多模态融合人脸识别方法
&& &多模态融合的人脸识别方法与多特征融合方法一样,目的是融合二维和三维甚至四维的脸部信息,以提高识别的精度和算法对环境的鲁棒性[11,14-15]。
&& &在多模态融合的研究上,比较成功的是MIAN A等人[12]提出的全自动三维人脸识别算法。该算法能全自动检测人脸鼻子区域,自动修正三维人脸姿态和进行标准化处理,可以在规模比较大的人脸识别中通过粗匹配快速拒绝大多数不适合的人脸并能自动分割易受表情影响和不易受表情影响区域。但是,算法在最后识别阶段容易受头发的影响,且无法自动检测侧面图像。为了解决此问题,他们在前期研究的基础上提出了一种有效的多模态(二维/三维)融合和混合(局部/整体特征)匹配的方法[13]。该方法在参考文献[12]的基础上,用三维球面人脸描述SFR(Spherical Face Representation)和可变尺度特征变换SIFT(Scale-Invariant Feature Transform)描述子来构建拒绝分类器,通过粗(整体)匹配快速拒绝大部分候选人脸并对剩下的人脸进行区域分割,得到对表情不敏感的局部特征区域(眼睛-前额/鼻子),再用修正的迭代最近点算法(Modified ICP)对这些局部特征进行单独匹配。
&& &相对三维融合二维信息的方法,三维与四维信息的融合技术应用比较少。参考文献[14]中PAPATHEODOROR T等人利用人脸纹理结构和表面信息注册,提出一种自动的四维人脸识别方法。他们利用立体摄像系统,结合面部外观的二维纹理映射描述符和三维面部几何的致密三维网格顶点描述符,重构四维人脸数据。在识别阶段先进行三维或者四维刚性注册,然后通过ICP算法和欧氏距离计算两脸部图形对应点的距离,根据相似性判断来进行识别。表1所示是多特征融合与多模态融合的一些代表性算法在各自实验中的结果。
  由于现在人脸数据库并不统一,不同文献的实验数据库一般不一样,且所使用的图像类型(颜色图像和灰度图像)与大小不同,因此很难根据它的识别率来判断某个算法的优劣性。此外,即使使用同一个数据库,数据库中也往往含有各种变化剧烈程度不一致的表情、姿态和光照情况,在不同的环境和姿态表情下,算法的结果会有很大的差别。
&&& 目前,三维人脸识别方法已经代替二维人脸识别方法成为研究热点。克服表情姿态和环境影响是目前三维识别研究的主要目的,其手段就是从图像中重构人脸三维模型。图像采集设备的差异和成像原理的不同,造成了采集数据的差异,如何更好地获取更多的有效信息与对数据的正规化一样成为难题。同时,特征点定位和人脸特征的提取对三维人脸重构非常重要,有效地监测定位和特征提取算法有待进一步地完善。
&&& 虽然三维数据获取技术有了飞速发展,但远没有达到像获取二维图像那么方便和普及,且基于三维信息的识别技术同样会受到人脸姿态和环境的影响。此外,由于三维识别算法在某些特定环境下(视频监控、受限制区域)无法像二维识别技术一样取得令人满意的结果,它需要二维方法甚至更高维方法的辅助来提高它的识别精度和鲁棒性,故融合多特征的识别技术和融合多模态的人脸识别技术在很长的一段时间内将是最有效的人脸识别方法之一。
[1] 段锦, 周春光, 刘小华. 三维人脸识别研究进展[J] . 小型微型计算机系统, 2004 , 25 (5) : 886-890.
[2] ZHANG C, COHEN S. 3-D face structure extraction and recognition from images using 3-D morphing and distance mapping[ J ] . IEEE Trans on PAMI, ):.
[3] XUE Feng, DING Xiao Qing. 3D reconstruction of& human face based on shape match morphing model[ J ] . ACTA ELECTRONICA SINICA , ):.
[4] BREUR P, KIM Kwang-In, KIENZLE W, et al . Automat ic 3D face reconstruction from single images or video[C]. Automatic Face & Gesture Recognition, 2008. FG '08. 8th IEEE International Conference on 17-19 Sept. .
[5] 胡元奎.可变光照和可变姿态下的人脸图像识别研究[D]. 合肥: 中国科学技术大学, 2006.
[6] PARK U, JAIN A K. 3D face reconstruction from stereo video[C]. Proceedings of the 3rd Canadian Conference on Computer and Robot Vision (CRV&06),.
[7] CHOWDHURY A R, CHELLAPPA R, VO T, et al.3D face reconstruction from video using a generic model[C]. Multimedia and Expo, 2002. ICME '02. Proceedings. 2002 IEEE International Conference on Volume 1,26-29 Aug, 9 - 452.
[8] SU Hong Tao, FENG D D, WANG Xiu Ying, et al . Face recognition using hybrid feature[C]. Machine Learning and Cybernetics, 2003 International Conference, 2003(5):.
[9] 周晓彦,郑文明. 一种融合KPCA和KDA的人脸识别新方法[J]. 计算机应用, ):.
[10] LIU Zhi Ming , LIU Cheng Jun. A hybrid color and frequency features& method& for& face recognition[J]. Image Processing, IEEE Transactions , ):.
[11] LIN C J, CHU C H, LEE C Y, et al . 2D/3D Face Recognition Using Neural Networks Based on Hybrid Taguchi-Particle Swarm Optimization[C]. Intelligent Systems Design and Applications, 2008. ISDA '08. Eighth International Conference on Volume 2,26-28 Nov, 2.
[12] MIAN A, BENNAMOUN M, OWENS R. Automatic 3D face detection, normalization and recognition[J]. 3D Data Processing, Visualization, and Transmission, Third International Symposium on 14-16 June, 2.
[13] MIAN A S, BENNAMOUN M, OWENS R. An efficient multimodal 2D-3D hybrid approach to automatic face recognition[J]. IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE,):.
[14] T PAPATHEODOROU, RUECKERT D. Evaluation of automatic 4D face recognition using surface and texture registration[C]. Automatic Face and Gesture Recognition, 2004. Proceedings. Sixth IEEE International Conference on 17-19 May, 6.
[15] RAMA A,& TARRES F, ONOFRIO D, et al . Mixed 2D-3D information for pose estimation and face recognition[C]. Acoustics, Speech and Signal Processing, 2006. ICASSP 2006 Proceedings. 2006 IEEE International Conference on Volume 2, .
型号/产品名
深圳市萌蛙科技有限公司
深圳市特成电子商行
深圳市鼎盛微电子科技有限公司}

我要回帖

更多关于 人脸识别模型训练 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信