【人脸】人脸关键点检测---ASM、CLM

ASM方法

论文:《Active Shape Models - Their Training and Application》

github链接:https://github.com/greatyao/asmlibrary

基于特征点分布模型(PDM):人工标定、构建形状模型,搜索匹配

Step1---训练:

  1. 构建形状模型【人脸】人脸关键点检测---ASM、CLM
  • 搜索N个训练样本(N=400)
  • 手动标记脸部特征点,特征点的标注顺序要一致,如右图
  • 将训练集中特征点坐标{(x1,y1),(x2,y2),...,(xN),yN)}串成特征向量,特征点看成是一个2N维的向量(x1,x2,...,xN,y1,y2,...,yN)
  • 选定基准图像,通过缩放、平移、旋转(Procrusts方法)将其他图像与基准图像对齐
  • 对对齐后的形状特征做PCA处理

      2. 构建形状模型

  • 为每一个特征点提取局部特征,目的是每一次迭代每个特征点都可以找到新位置,局部特征一般用梯度特征表示

    Procrusts方法

    使用一个四元数,即旋转角度a,缩放尺度s,水平位移x,垂直位移y

  • 将训练集中的所有人脸模型对齐到一个人脸模型上
  • 计算平均人脸模型X0
  • 将所有人脸模型对齐到平均人脸X0
  • 重复2、3两步,直到X0收敛或一定时间停止

      PCA算法
      设有m条n维数据
      1)将原始数据按列组成n行m列矩阵X
      2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
      3)求出协方差矩阵
      4)求出协方差矩阵的特征值及对应的特征向量
      5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
      6)即为降维到k维后的数据



 

Step2---搜索:

  1. 计算眼睛(或者眼睛和嘴巴)的位置,做简单的尺度和旋转变化,对齐人脸
  2. 匹配每个局部特征点(马氏距离),计算新位置,得到仿射变换参数,迭代直到收敛

CLM方法

【人脸】人脸关键点检测---ASM、CLM

 Patch模型构建

       在构建好形状模型之后,我们就可以在检测到的人脸上初始化一个人脸形状模型,接下来的工作就是让每个点在其邻域范围内寻找最佳匹配点。传统的ASM模型就是沿着边缘的方向进行块匹配,点匹配等各种低级匹配,匹配高错误率导致ASM的性能不是很好。后续各种改进版本也就出来了,大部分做法都是对候选匹配特征点邻域内的块进行建模(patch模型),我们统称他们为有约束的局部模型:CLM。这里先以基于SVM的匹配作为例子来说,当我们初始化每个特征点后,用训练好的SVM对每个特征点周围进行打分,就像滤波器一样,得到一个打分响应图(response map),标识为R(X,Y)

【人脸】人脸关键点检测---ASM、CLM
标 特征点(左)其邻域响应图(右)题