人脸特征点提取算法包对比(ASM/深度学习)

人脸特征点提取算法包对比(ASM/深度学习)

原创 2016年04月27日 19:35:33

人脸特征点提取算法包对比(ASM/深度学习)

前言

之前由于项目需要,学了不少东西,但是从来没有随手记录的习惯,等项目结束之后,长时间不用,许多东西也会慢慢变得模糊。于是,决定从现在开始,多动动手,也留下点东西吧。我个人的研究方向主要是,机器视觉,Deeplearning,机器学习。也写过几篇水文,希望能有志同道合的朋友一起交流。不过本文是之前做过的一个“基于人脸特征点的卡通头像生成”项目的一部分,和研究方向无关,纯属熟悉CSDN博客的环境,博客不是论文,能不贴公式尽量不贴公式,能公开代码,也尽量公开代码。如果效果不错的话,以后会坚持写下去。

ASM算法简介

ASM是基于统计学习模型的特征点提取的一种方法。这个方法是95年就提出来的,在深度学习没有普及的之前,ASM应该是人脸特征点提取较好的解决方案。关于ASM详细介绍,可以参考博客ASM算法简介。ASM算法与普通的统计学习算法类似,需要先准备带标签的数据集,Train(or Build)模型,然后Test(Fit)。

目前流行的ASM算法包对比

目前关于ASM算法公开的工具包有3个(比较著名的):
1.ASMLibrary
提供功能:
1)采用opencv进行人脸检测及定位
2) 支持用自己的数据集Train及Fit
3)通过训练好的模型,提取人脸特征点
特点:
1)可以同时检测多个人脸
2)可以实时进行视屏人脸检测及特征提取
3)可以训练自己的模型
4)提供了一个已训练好的,68特征点的模型
5)采用提供的模型,特征点定位效果较佳
ASMLib提取的人脸特征
不足:
仅提供API,不开放源码
源码链接
2.asmlib-opencv
提供功能:
1)单张人脸检测及特征提取
2)支撑用自己的数据集Train及Fit
特点:基于Opencv,简单,开源
不足:只能用于单个人脸,定位效果不佳
源码链接
3.stasm
特点:算法更强大,精确度更高,完全开源
不足:上手难,代码复杂度高(如果只是应用,不需要知道原理的话,还是比较容易)。
源码链接

ASMLibrary应用及介绍

在人脸特征点检测时,我利用的是算法提供的,已经训练好的68个特征点提取的模型,然后用自己的图像数据做Fit,简单修改了测试源码,将特征点坐标保存到txt文件中。
注意:ASMLibrary编译的时候需要配置Opencv环境,同时改一下源项目中的配置文件,将.lib换成自己对应的版本,不然编译不通过。

流程:
1. 读入图片,视频,图片list(自己添加的,便于批处理)
2. 利用Haar分类器检测人脸区域
3. 利用训练好的模型寻找68个特征点
4. 将68个特征点坐标保存到txt文件中

//C++特征点保存 demo_Fit.cpp
savepath = savepath + ".txt";
        ofstream examplefile(savepath);
        if (examplefile.is_open())
        {
            //examplefile << "This is a line.\n";
            //examplefile << "This is another line.\n";
            examplefile << "#People:" << nFaces << endl;
            examplefile << "##Points:" << shapes[0].NPoints() << endl;
            for (int i = 0; i < nFaces; i++)
            {
                for (int j = 0; j < shapes[i].NPoints(); j++)
                    examplefile << "(" << shapes[i][j].x << "," << shapes[i][j].y << ")" << endl;
            }
            examplefile.close();
        }
#坐标点格式
lichao:1
Points:68
(61.5149,134.076)
(61.1954,151.526)
(63.4041,169.403)
(67.9898,186.943)
(75.983,203.934)
(85.5157,214.763)
...

由于ASMLib没有相应点坐标的编号说明,查了一下文献和资料,基本都采用的下图中的编号,我也抽样验证过。
坐标点序号

展望–利用Deeplearning实现人脸特征点检测

随着计算机计算能力和存储能力的大幅度提示,以及Deeplearning理论的成熟,许多传统的特征提取问题都可以用深度学习来实现,而且效果更优。在人脸特征点检测也是,之前也用Theano/Lasagne实现过,效果挺好的,后来也是疏于整理,没留下教程。在这里也简单引用一下别人的教程(英文版),做一个简单的说明,如果对这块感兴趣的人多的话,我再写一篇深度学习用来特征点检测的教程好了。

深度学习主要用来做分类(classification)和回归(regression),其实特征点检测就是回归问题,将每个特征点坐标(x,y)作为连续变量,多个特征点就代表多类回归。

Theano 实现人脸特征点检测

英文教程:Theano人脸特征点检测
环境:Theano,Lasagne,nolearn
注意:安装nolearn时,对Theano和Lasagne版本有特定要求,为避免冲突,最好使用VirtualEnv

Caffe实现人脸特征点检测

英文教程:Caffe人脸特征点检测
注意:Caffe官方教程主要用来做分类,也支持回归,支持由于回归的数据标签不是整型,而leveldb,lmdb,imagedata等Caffe Datalayer都只支持整型标签,要解决回归问题可以采用:
1)修改datalayer源码,使其支持float类型;
2)利用HDF5数据类型

结束

第一篇博客,希望是一个好的开始。

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值