我們主要講一講Github上給出的matlab開源代碼《jwyang/face-alignment》的配置。
首先聲明:本人第一次配置的時候也是參考了csdn一個作者和github給出的說明配置成功的。其實后來想想很簡單的,但是可能對于初學者,還是有一定的困難。為此,本人將自己的一些心得列出來,以供參考。
另外,本人對代碼做了詳盡的注釋,代碼下載地址:http://pan.baidu.com/s/1nu58xx3
- 下載源代碼:https://github.com/jwyang/face-alignment
- 環境:windows64位+matlab2014a
- 下載數據庫,本人給出自己收集的一個數據集。見百度網盤(密碼:in)。注意:我們這里訓練的是68個特征點的,我那個數據集還有29個點和194個點的。
- 為代碼中的訓練樣本函數的依賴庫liblinear做配置,從http://www.csie.ntu.edu.tw/~cjlin/liblinear/,可以直接下載liblinear庫,然后如果你的系統是windows64位的就直接從里面的windows文件夾中將里面的文件全部拷貝到matlab的工程文件夾中(我就是這樣干的,當然你也可以自己編譯,參考文獻:http://blog.sina.com.cn/s/blog_5bd2cb260100ev25.html)。(本人也上傳了一個下好的liblinear庫)
- 準備數據,建立一個文件夾叫datasets,里面可以放你下好的數據,包括圖片和shape txt.
- 因為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代碼的原理,重點是預處理和訓練,測試基本和訓練相同。