face alignment by 3000 fps系列学习总结

我们主要讲一讲Github上给出的matlab开源代码《jwyang/face-alignment》的配置。
首先声明:本人第一次配置的时候也是参考了csdn一个作者和github给出的说明配置成功的。其实后来想想很简单的,但是可能对于初学者,还是有一定的困难。为此,本人将自己的一些心得列出来,以供参考。
另外,本人对代码做了详尽的注释,代码下载地址:http://pan.baidu.com/s/1nu58xx3

  1. 下载源代码:https://github.com/jwyang/face-alignment
  2. 环境:windows64位+matlab2014a
  3. 下载数据库,本人给出自己收集的一个数据集。见百度网盘(密码:in)。注意:我们这里训练的是68个特征点的,我那个数据集还有29个点和194个点的。
  4. 为代码中的训练样本函数的依赖库liblinear做配置,从http://www.csie.ntu.edu.tw/~cjlin/liblinear/,可以直接下载liblinear库,然后如果你的系统是windows64位的就直接从里面的windows文件夹中将里面的文件全部拷贝到matlab的工程文件夹中(我就是这样干的,当然你也可以自己编译,参考文献:http://blog.sina.com.cn/s/blog_5bd2cb260100ev25.html)。(本人也上传了一个下好的liblinear库)
  5. 准备数据,建立一个文件夹叫datasets,里面可以放你下好的数据,包括图片和shape txt.
  6. 因为train_model.m文件中
 for i = 1:length(dbnames)% load training samples (including training images, and groundtruth shapes)if strcmp(dbnames{i},'lfpw')==1imgpathlistfile = strcat('./datasets/', dbnames{i}, '/trainset/Path_Images.txt');elseimgpathlistfile = strcat('./datasets/', dbnames{i}, '/Path_Images.txt');endtr_data = loadsamples(imgpathlistfile, 2);Tr_Data = [Tr_Data; tr_data];
end

表示读入训练样本的数据的文件是Path_Images.txt,所以进入控制台(cmd)先转到目录../datasets/afw,然后输入命令dir /b/s/p/w .jpg>Path_Images.txt,这是将所有jpg的文件的文件名都输入到Path_Images.txt文件中,同样转到目录../datasets/lfpw/trainset文件夹中输入命令dir /b/s/p/w .png>Path_Images.txt,因为lfpw的数据都是png文件。注意train数据集和test数据集都要做一遍。

注意:afw,ibug都是只有一个数据集,而lfpw分为两个,一个训练集,一个测试集。
7. 然后我们开始训练样本,在matlab文件夹下新建一个m文件,例如我这里建的是:train_start.m,然后里面输入一下代码:

filepath_model='./models/LBFRegModel.mat';LBFRegModel=train_model({'lfpw'});save(filepath_model,'LBFRegModel');

和《Face Alignment at 3000FPS工程配置》略有不同,其实本质一样。都是为了保存训练好的数据。只不过他分开保存,我一块而保存而已。

然后执行,训练样本的时间可能会过长。目的是将训练后的结果导入LBFRegModel.mat文件夹中.当训练完毕后,可以在./models文件夹下看到LBFRegModel.mat。
8. 观看结果。在matlab文件夹下新建一个m文件,例如我这里建的是:test_start.m,在里面输入下面代码:

filepath_model='./models/LBFRegModel.mat';
m=load(filepath_model,'LBFRegModel');
t=m.LBFRegModel;
[predshapes,Data]=test_model({'lfpw'},t);
[X,Y,N]=size(predshapes);
for i=1:Nshapes=predshapes(:,:,i);img=Data{i}.img_gray;drawshapes(img, [shapes,Data{i}.shape_gt]);rectangle('Position',  Data{i}.bbox_facedet, 'EdgeColor', 'b');hold off;pause;
end

就可以看到结果了。
PS: Github上有作者自己训练的一个模型。使用时只需放在models里面,并将test_start.m中改为filepath_model=’./models/LBFRegModel_best.mat’;再将./src/config_te.m打开,将models/config_te_best.txt的内容复制进来即可。

另外:关于3000fps方法,网上也有许多好的资料,这里给出两个链接:
http://blog.luoyetx.com/2015/08/face-alignment-at-3000fps/#
http://freesouls.github.io/2015/06/07/face-alignment-local-binary-feature/(中间求特征树有一点问题,可以参考文中后面的答复).

后面,我会详细讲解这个matlab代码的原理,重点是预处理和训练,测试基本和训练相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

paypal之nodejs 框架 Kraken-js 源码分析

本文是基于 kraken-js 0.6.1 版本的 关于如何使用kraken-js 可以去看看官网的使用文档 点击这里 。kraken-js 是基于express之上的,目的在于让工程师更多的去关注代码逻辑,少关注自身的开发环境,所以他将express所有的一些公用的配置都写在了…

go build 参数_Go语言 通过go bulid -tags 实现编译控制

Go语言提供的build tag 条件编译特性,顾名思义,只有在特定条件下才会构建对应的代码。比如下面的源文件只有在设置debug构建标志时才会被构建:// build debugpackage mainvar buildMode "debug"可以用以下命令构建:go …

selinux 的管理

第十单元selinux 的管理一 显示及更改 SELINUX 模式getenforce ###显示selinux模式setenforce 0|1 ##0指permissive警告,1 表示 enforcing强制###vim /etc/sysconfig/selinux ###修改selinux开机状态###注:disable表示关闭&…

ubuntu15.10下安装opencv2.4.9python上调用opencv库

对于centos,可以参考:Install OpenCV-Python in Fedora 如果IPP难以下载可以在cmake时禁掉它,只需:cmake -DWITH_IPPOFF OpenCV3.3CUDA9.0 安装过程中遇到的问题,解析: https://blog.csdn.net/u014613745/a…

【转】jquery 注册事件的方法

原文链接:http://outofmemory.cn/code-snippet/2123/jquery-zhuce-event-method 1.使用事件名来绑定,可用的事件名有 change,click,dblclick,error,focus,focusin,focusout,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,…

ffmpeg 时间戳

转http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的时间戳pts和dts.单位好像是us. 问 : 时间戳pts和dts,这里两个时间戳各有什么意义? 答 : 显示时间,解码时间. DTS:decoding time stamp PTS:presentation time stamp Generally …

键盘改键软件_一秒五键,一键三招,万种光污染,杜伽K310樱桃轴机械键盘感受...

机械键盘我一直用的青轴,或者各种其他名字但其实本质就是青轴的。喜欢青轴那种清脆的声音,在我听来如同山间小溪流水般的叮咚。不过这声音在夜间分外的具有穿透力,更会在人身体不好的时候难以承受,所以每每用过之后却又不得不换回…

ubuntu 15.10下cmake 的安装

因为原先ubuntu自带的cmake有点旧,就想着安装个最新的,可是直接安装卡在了某一步上,后面有说明。现将正确的安装方法列出来。1.卸载原有的版本sudo apt-get autoremove cmake2. 下载最新的cmake :https://cmake.org/download/3. 解压&#xf…

codeigniter钩子的使用

CodeIgniter 的钩子功能,使得我们可以在不修改系统核心文件的基础上,来改变或增加系统的核心运行功能。可是钩子究竟该怎么用呢?虽然不是很难,不过很多刚用ci的朋友可能还是不明白怎么用。 通过本文的简单实例,大家一下…

wxWidgets之wxGrid控件

1. 介绍wxGrid控件时wxWidgets界面库中内置的网格控件。通经常使用来显示表格数据。该控件拥有强大的功能。开发人员可依据自己的需求对其进行定制。 2. 经常使用API 构造函数:wxGrid ()wxGrid (wxWindow *parent, wxWindowID id, const wxPoint &poswxDef…

powerdesigner画关系图_想画好手绘,这些图你一定要画一下!

画好手绘除了对透视要深入了解掌握以及线条运用把握之外,还有很重要的就是要对空间物体的关系、比例、光影关系都要理解透彻。大体快可分割成多个x小体块。其实当年学习的绘画基础也是画好手绘的基础,画手绘依然需要去理解整体画面的空间黑白灰、物体穿插…

C#,pdf文件转换成图片文件。

本文采用Adobe Acrobat9.0的COM组件,将Pdf文件的每一页转换成对应的图片文件。 开发环境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。 工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必须装了Adobe …

Android进程间通信

一.Linux系统进程间通信有哪些方式? 1.socket; 2.name pipe命名管道; 3.message queue消息队列; 4.singal信号量; 5.share memory共享内存; 二.Java系统的通信方式是什么? 1.socket; 2.name pip…

最新的一些开源face alignment及评价

dlib :https://github.com/davisking/dlib/tree/v18.18 评价:速度快,可商用,有些时候不太准确 2. CLM-framework: https://github.com/TadasBaltrusaitis/CLM-framework 评价:很准确,不可商用 3. Face Detection…

1048 石子归并

1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]w[i1]。问安排怎样的合并顺序&#xf…

internetreadfile读取数据长度为0_【完结】TensorFlow2.0 快速上手手册

大家好,这是专栏《TensorFlow2.0》的第五篇文章,我们对专栏《TensorFlow2.0》进行一个总结。我们知道全新的TensorFlow2.0 Alpha已经于2019年3月被发布,新版本对TensorFLow的使用方式进行了重大改进,为了满足各位AI人对TensorFlow…

Facial Landmark Detection(人脸特征点检测)

原文地址:http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作为计算机视觉研究员,我们很早就开始研究人脸。人脸分析领域最广为人知的就是人脸识别(face recognition).但是为了识别一幅图像中的人脸&…

cpu卡操作协议iso14443协议

http://baike.baidu.com/link?url3mef2ZMRoNuBrVLA2HpEh8xrBtzACdIi5nIDUsMyVkA8OulIXGWgswvFcTiBfh_B转载于:https://www.cnblogs.com/shuenjian901/p/3496331.html

Python 字符串的内置函数

方法描述string.capitalize()把字符串的第一个字符大写string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串string.count(str, beg0, endlen(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str …

Java中的Error和Exceptiond的异同点

Error和Exception的异同点: (1)Error类和Exception类都继承超类Java.lang.Throwable (2)Error:一般指与虚拟机相关的问题,如系统崩溃,内存溢出等。对于这类错误,仅靠程序…