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')==1
        imgpathlistfile = strcat('./datasets/', dbnames{i}, '/trainset/Path_Images.txt');
    else
        imgpathlistfile = strcat('./datasets/', dbnames{i}, '/Path_Images.txt');
    end
    tr_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:N
   shapes=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代码的原理,重点是预处理和训练,测试基本和训练相同。

你可能感兴趣的:(alignment)