-
SDM方法是13年在文章《Supervised Descent Method and its Applications to Face Alignment》提出的,github上一个大牛根据文章《Random Cascaded-Regression Copse for Robust Facial Landmark Detection》的方法利用SDM的思想实现了人脸特征点检测的任务。
-
SDM方法有点老,但是今天啥也不想干了,又有点无聊,就写下这篇博客,上面的文章google能下到,SDM代码也可以在github上下到,本博客主要是讲怎么用该训练出脸的特征点检测模型。作者的代码把用到的第三方库基本都包含在工程中了,但是要另外安装Eigen和OpenCV。
-
博主是在ubuntu14.04下训练的,步骤如下:
-
安装Eigen库,详细方法见博主另一篇博客,ubuntu14.04+eigen3安装,博主安装的是3.3.0版本
-
安装OpenCV库,从OpenCV官网下载OpenCV,该页面有各种版本,而且支持各种系统,博主用的是OpenCV3.0版本中的OpenCV for Linux/Mac,安装方法在下载页面中有个THE INSTALLATION DOCUMENTATION(如下图所示),根据该文档安装即可,安装完后在终端输入
pkg-config --modversion opencv
查看安装版本,而且能查到说明OpenCV安装成功。
图一.jpg
-
下载github上的代码,在终端运行下列语句(博主直接下载到主目录下即~目录下)
git clone https://github.com/patrikhuber/superviseddescent.git
-
下载训练用到的标定好的人脸数据库,博主用的是lpfw库,下载地址
图二.jpg
博主在第三步下载下的superviseddescent的目录中创建train_data文件夹中(即~/superviseddesecent/train_data),并解压。
-
将一些训练的配置文件考入train_data文件夹中,运行下列代码
cd ~/superviseddescent/train_data cp ../apps/rcr/data/mean_ibug_lpfw_68.txt ../apps/rcr/data/rcr_eval.cfg ../apps/rcr/data/rcr_training_22.cfg .
上面三个文件,mean_ibug_lpfw_68.txt中保存的是lfpw数据库中所有图像68个标定点的归一化后的坐标值,rcr_eval.cfg保存的是用来检测训练误差选择的检测点,rcr_training_22.cfg中保存的是根据下图人脸标定规则顺序选择出来的需要训练的点。
图三.jpg
具体训练多少个点,可以根据自己的需要设置,博主修改了rcr_training_22.cfg文件中的参数,训练了68个特征点,修改配置文件运行下列代码
cd ~/superviseddescent/train_data mv rcr_training_22.cfg rcr_training_68.cfg vim rcr_training_68.cfg
用vim打开复制的文件rcr_training_68.cfg后修改里面的参数,博主修改的参数如下:
modelLandmarks ; Parameters specifying the model that is to be trained { landmarks ; What landmarks to use and how we name them. Also, the model will have the landmarks in this order. { ; we use the numbering from ibug-lfpw 1 ; 1 to 8 are the right contour landmarks 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9 ; chin bottom 10 ; 10 to 17 are the left contour landmarks 11 ; 12 ; 13 ; 14 ; 15 ; 16 ; 17 ; 18 ; right eyebrow outer-corner (18) 19 ; right eyebrow between middle and outer corner 20 ; right eyebrow middle, vertical middle (20) 21 ; right eyebrow between middle and inner corner 22 ; right eyebrow inner-corner (19) 23 ; left eyebrow inner-corner (23) 24 ; left eyebrow between inner corner and middle 25 ; left eyebrow middle (24) 26 ; left eyebrow between middle and outer corner 27 ; left eyebrow outer-corner (22) 28 ; bridge of the nose (parallel to upper eye lids) 29 ; middle of the nose, a bit below the lower eye lids 30 ; above nose-tip (1cm or so) 31 ; nose-tip (3) 32 ; right nostril, below nose, nose-lip junction 33 ; nose-lip junction 34 ; nose-lip junction (28) 35 ; nose-lip junction 36 ; left nostril, below nose, nose-lip junction 37 ; right eye outer-corner (1) 38 ; right eye pupil top right (from subject's perspective) 39 ; right eye pupil top left 40 ; right eye inner-corner (5) 41 ; right eye pupil bottom left 42 ; right eye pupil bottom right 43 ; left eye inner-corner (8) 44 ; left eye pupil top right 45 ; left eye pupil top left 46 ; left eye outer-corner (2) 47 ; left eye pupil bottom left 48 ; left eye pupil bottom right 49 ; right mouth corner (12) 50 ; upper lip right top outer 51 ; upper lip middle top right 52 ; upper lip middle top (14) 53 ; upper lip middle top left 54 ; upper lip left top outer 55 ; left mouth corner (13) 56 ; lower lip left bottom outer 57 ; lower lip middle bottom left 58 ; lower lip middle bottom (17) 59 ; lower lip middle bottom right 60 ; lower lip right bottom outer 61 ; right inner corner of the mouth 62 ; upper lip right bottom outer 63 ; upper lip middle bottom 64 ; upper lip left bottom outer 65 ; left inner corner of the mouth 66 ; lower lip left top outer 67 ; lower lip middle top 68 ; lower lip right top outer } }
-
由于该方法运用的是OpenCV的人脸检测器进行检测人脸,所以训练的时候要使用到OpenCV的人脸检测模型。用locate语句查找haarcascade_frontalface_alt2.xml人脸检测模型,找到后拷到~/superviseddescent/train_data路径下。下语句中的PATH根据你找到的haarcascade_frontalface_alt2.xml路径书写。
cd ~/superviseddescent/train_data locate haarcascade_frontalface_alt2.xml cp /PATH/haarcascade_frontalface_alt2.xml .
-
数据准备完毕,可以开始编译代码了
cd ~/superviseddescent mkdir build cd build cmake .. make -j6
编译完成后在可以得到可执行程序进行训练,运行代码
cd ~/superviseddescent/build/apps/rcr ./rcr-train --data ../../../train_data/trainset/ \ -m ../../../train_data/mean_ibug_lfpw_68.txt \ -f ../../../train_data/haarcascade_frontalface_alt2.xml \ -c ../../../train_data/rcr_training_68.cfg \ -e ../../../train_data/rcr_eval.cfg \ -o ../../../train_data/model68.bin \ -t ../../../train_data/testset/
操作完成后,程序开始训练,输出的特征点检测模型为model68.bin。
-
-
最后给出博主的github,只是单纯的加了一个train_data文件夹,并且复制好了训练需要的文件,只要安装opencv和eigen库后,git clone这份代码,最后按照博客下载数据集,即可训练。
网友评论