SDM(superviseddescentmethod)人脸特征点训练

  • SDM方法是13年在文章《Supervised Descent Method and its Applications to Face Alignment》提出的,github上一个大牛根据文章《Random Cascaded-Regression Copse for Robust Facial Landmark Detection》的方法利用SDM的思想实现了人脸特征点检测的任务。

  • SDM方法有点老,但是今天啥也不想干了,又有点无聊,就写下这篇博客,上面的文章google能下到,或者去我的csdn资源上下载(本来想改其它资源积分,改成0的,改不了,也删不了,太麻烦了,其它的就忽略它们吧,哈哈),SDM代码也可以在github上下到,本博客主要是讲怎么用该训练出脸的特征点检测模型。作者的代码把用到的第三方库基本都包含在工程中了,但是要另外安装Eigen和OpenCV。

  • 博主是在ubuntu14.04下训练的,步骤如下:

    1. 安装Eigen库,详细方法见博主另一篇博客,ubuntu14.04+eigen3安装,博主安装的是3.3.0版本

    2. 安装OpenCV库,从OpenCV官网下载OpenCV,该页面有各种版本,而且支持各种系统,博主用的是OpenCV3.0版本中的OpenCV for Linux/Mac,安装方法在下载页面中有个THE INSTALLATION DOCUMENTATION(如下图所示),根据该文档安装即可,安装完后在终端输入pkg-config --modversion opencv 查看安装版本,而且能查到说明OpenCV安装成功。
      这里写图片描述

    3. 下载github上的代码,在终端运行下列语句(博主直接下载到主目录下即~目录下)

      git clone https://github.com/patrikhuber/superviseddescent.git
    4. 下载训练用到的标定好的人脸数据库,博主用的是lpfw库,下载地址
      这里写图片描述
      博主在第三步下载下的superviseddescent的目录中创建train_data文件夹中(即~/superviseddesecent/train_data),并解压。

    5. 将一些训练的配置文件考入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中保存的是根据下图人脸标定规则顺序选择出来的需要训练的点。
      这里写图片描述
      具体训练多少个点,可以根据自己的需要设置,博主修改了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
        }
      }
    6. 由于该方法运用的是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  .
    7. 数据准备完毕,可以开始编译代码了

      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这份代码,最后按照博客下载数据集,即可训练。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值