人脸对齐(二):Active Shape Models ---Their Training and Application

来源:互联网 发布:天天pk10计划软件 编辑:程序博客网 时间:2024/05/01 10:08
Active Shape Model ---Their Training and Application

       内容说明:本博客内容主要是针对T.F. Cootes早期的关于ASM的论文《Active Shape Models ---Their Training and Application》介绍个人的理解,算是个人的学习总结,ASM是比较早的算法,我是结合论文原文和相关中文资料来理解的,主要参考内容的链接也将给出。本人初学者,难免会有理解不透彻或理解错误之处,还望各位不吝指教。
       论文链接:Active Shape Model --- Their Training and Application (详细内容请阅读英文原文)
       博客链接:ASM(Active Shape Model)算法介绍 (这是一篇很好的关于ASM的博客,但是我还是对很多公式或者符号的含义不太清楚,本文则是以原文电阻的示例来对一些公式符号进行理解)

一、简单介绍

       论文原文开头介绍了ASM的发展历程,从"Hand Crafted" Model 到 Articulated Models 再到Active Contour Models (“Snake”)等等,才发展到ASM算法。虽然接下来的主要内容是以电阻模型为示例介绍ASM的训练(Training)和测试(Testing)和相关应用,但是我觉得对这些发展过程的了解是很重要的(请参考原文)。
       ASM是一种基于统计点分布模型(Point Distribution Models),在PDM中,一个物体的几何形状可以通过若干关键特征点的坐标按照一定次序串联形成一个向量来表示,如电阻、人脸、心脏图等等。下面过程以电阻为例。

二、ASM训练

       ASM训练的主要步骤:
       Step1 :  建立形状模型
                 (1)训练数据的获取,即大量的已标定特征点的电阻图片;
                 (2)获取特征向量,即将每一个用于训练的电阻照片的特征点按照一定的顺序串联成一个向量;
                 (3)对形状进行归一化和对齐(对齐采用Procrustes方法);
                 (4)将对齐后的形状做PCA处理,获得形状模型。
       Step2 :  为每个特征点(landmark)构建局部特征。

2.1  训练数据的获取

       如下图所示,左边为训练集(如总样本数n=200)中的一些训练样本(每个样本中的landmarks都是已经标定好了的),右边是其中一个样本,有k=32个landmarks。仔细观察电阻形状,容易发现,有上下端长短不一的,有上下端左右弯曲程度不一样的这些特征的直观意义将在后面图形化解释【标注1】针对右边单个样本,提出问题
       【问题1:关键特征点landmarks是如何选取的呢?特征点的个数又是如何确定的呢?(见本博客第五部分)】
                       

2.2  获取特征向量

       

2.3  对形状进行归一化和对齐

       目的:消除图片中电阻由于不同角度,距离远近和姿态变化等外界因素造成的干扰,使得点分布模型更加有效。
       方法:Procrustes方法。此处,简言之,就是把n=200个训练样本的形状模型通过适当的平移、旋转、缩放变换,在不改变点分布模型的基础上,对齐到同一个点分布模型(比如第一个样本的PDM)上。从而改变获得的原始数据杂乱无章的顺序,减小非形状因素的干扰。
       详细过程:
        
       
       这里的W权重矩阵为2k*2k的对角矩阵,2k-1和2k位置上的值均为wk。
       对于整个训练集,对齐流程如下:
       (1)将所有的n个样本对齐到第一个样本;
       (2)计算集合中所有对齐后的样本的平均形状a;
       (3)将求得的平均形状a归一化;
       (4)再将集合中所有人脸样本对齐到(3)所得平均形状a;
       (5)循环执行(2)(3)(4)直到a收敛。
       【问题2:为什么要对平均形状归一化处理?那为何不是对每一个样本归一化?(见本博客第五部分)】
        对齐过程后,有用的数据只是每个形状对齐后的形状向量,构成我们PCA处理的原始数据集,过程中其它变量(如仿射变换参数)都是不用作后边处理的。
       下图是论文中电阻的示例,是将对齐后的所有训练样本的landmarks的坐标绘制出来的图:
                   
       你会发现有些点很密集,有些点比较分散,又对应着模型的那个参数呢?【标注2】

2.4  将对齐后的形状进行PCA处理

       
       上面是PCA处理过程,实验结果分析如下:
       左图为电阻例子中计算得到的特征值比例,值越大,所对应的特征越明显,也说明训练集中该特征区分度高;图2列出前两个特征对应的b1和b2值,分布比较随机,说明它们之间的相关性较小。
                     
       下图分别为前三个特征,形状随着权值b的变化而变化的趋势。这里可以对应标注1,我们比较容易观察到训练集中差异较大的地方都对应着这比较靠前的一些特征,如上下端的长短,上下端的弯曲程度等等;对应标注2,上下端的点最分散,这是由于每个样本上下端的点差异较大。这里Dmax=2。
       稍微解释一下为什么要对b值进行限制,从下图很容易看到,对于b1,如果太大的话,上端过长而下端会消失不见;对于b2,如果太大的话,上下两端会同时变短甚至消失,而这样的话和我们的训练中的形状相似度很小了,这里的Dmax是一个经验值。
               

2.5  为每个点构建局部特征

        构建局部特征是为了在搜素的时候能够不断更新位置,也就是说每个landmark要确定一个新的位置的依据就是这个局部特征,构建局部特征的方法有很多种,文中利用的是目标边缘的强度,如下右图,越在目标点边缘的地方,边缘强度(梯度)就越大,通过提取局部纹理更新位置。
                 
局部特征方法的详细过程来自链接博客,对于第i个特征点landmark,其局部特征创建过程如下:

                         
       如上图所示,在第j个训练图像上的第i(i=29)个特征点两侧,沿着垂直与该点前后两个特征点连线的方向上分别
选择m个像素构成一个长度为2m+1的向量,对该向量所包含的像素的灰度值求导得到一个局部纹理gij,对训练集中的
其他样本图像上的第i个特征点进行同样的操作,便可得到第i个特征点的n个局部纹理gi1,gi2,...,gin。

        

三、ASM测试

        ASM测试的主要步骤:
        (1)给定一个初始形状,然后用它在给定图像中不断搜索,搜索过程由后3步完成;
        (2)计算特征点的局部特征,不断更新每个特征点的位置;
        (3)更新仿射变换参数;
        (4)重复(2)(3)直至仿射变换参数收敛。

3.1  确定初始形状

       确定初始形状的方法有很多,比如可以使用遗传算法获得一个和目标比较近似的形状。文中使用的是将训练集中的平均形状进行一个仿射变换得到一个比较粗糙的形状:
        
        这里的a0为初始时刻的当前形状,以后的当前形状均用a表示。
        虽然ASM测试时不需要初始化一个很接近目标的一个形状,但是上述初始化方法的参数对最后的搜索影响大吗?
        【问题3: 如何确定初始化旋转角度和缩放尺度?随机选取不会导致最后搜索偏差较大吗?(未解决)】

3.2  计算特征点局部特征,更新特征点位置

       特征点更新,示意图如下:
                             
       对于模型中第i个特征点,在垂直于其前后两个特征点连线方向上,以其为中心两边各选择l(l>m)个像素,然后计算这1个像素的灰度值倒数并归一化,从而得到一个局部特征,包括2(l-m)+1个子局部特征,然后利用前面的公式计算这些子局部特征与当前特征点的局部特征之间的马氏距离,使得马氏距离最小的那个子局部特征的中心即为当前特征点的新位置,这样就会产生一个位移。为所有特征点找到新的位置,并将他们的位移组成一个向量:
       
                       

3.3  更新仿射变换参数至收敛

        
        【注意:这里不要混淆dX和da,dX是我们通过局部特征更新特征点前后的差值,我们需要计算最佳的仿射变换参数使得最与X+dX接近,但是不会完全和X+dX重合,如果在a加上这个偏差da后使得完全相等,我们期望的就是这个偏差值da接近于0。】
        
        
        在搜素的过程中,不断更新仿射变换参数和b,直到他们的值变化不大(即增量接近0)或者到达设定的迭代次数就可以停止搜索。db接近为0,说明dx接近为0,即调节偏差接近为零,自然可以理解为已经足够接近目标形状。
        【问题4: 最后这些更新参数的权值是如何确定的?(未解决)】

3.4  实验结果分析

       之前这里没有将文中实验结果给出,在老师的建议下,加上这部分内容,主要是文中电阻,心脏,手掌例子。
       电阻示例如下:a:原图;b:初始化形状;c、d、e、f:分别为迭代30,60,90,120次的匹配结果。
                              
       心脏图示例如下:a:原图;b:初始化形状;c、d:分别为迭代80、200次的结果。
                             
       手掌示例如下:a:初始化形状;b、c、d:分别为迭代100、200、350次的结果。
                           

四、ASM应用于人脸特征点检测

       立足于原文,上面示例主要是以电阻为例,如果换成是人脸的特征点检测,过程是与上面的是一致的。

4.1  训练

       Step1 :  建立形状模型
                 (1)训练数据的获取,即大量的已标定特征点的人脸图片,如上篇综述提到的300W数据集;
                 (2)获取特征向量,即将每一个用于训练的人脸照片的特征点按照一定的顺序串联成一个向量;
                 (3)对形状进行归一化和对齐(对齐采用Procrustes方法);
                 (4)将对齐后的形状做PCA处理,获得形状模型。
       Step2 :  为每个特征点(landmark)构建局部特征。

4.2  测试

        (1)给定一个初始形状,然后用它在给定图像中不断搜索,搜索过程由后3步完成;
        (2)计算特征点的局部特征,不断更新每个特征点的位置;
        (3)更新仿射变换参数和参数b;
        (4)重复(2)(3)直至仿射变换参数和参数b收敛。

五、问题总结

5.1  问题1 : 关键特征点landmarks是如何选取的呢?特征点的个数又是如何确定的呢?

       特征点当然是指形状中比较重要的点,文中大致把这些landmarks分为3种,如下:
       (1)points marking parts of the object with particular application-dependent significance ,比如边角点等;
       (2)points marking  application-dependent things ,比如特殊方向的最高点,曲率极值点等;
       (3)上述两种点的内插点。
         下图的电阻,0,3,5,10等为类型(1);4,11等点就是曲率较大的点,为类型(2);6-9等为类型(3)。
                
       关键点的选取是极其重要的,这些关键点得能够很好地描述一个形状,当然特征点的个数问题是个经验问题,对于复杂一点的形状就需要用多一点的点,简单点的就少用一点。

5.2  问题2 : 为什么要对平均形状归一化处理?

       将平均形状归一化到一个默认的形状,是为了确保迭代过程中慢慢收敛,本质上是增加了约束条件。我这样理解文中的说法:如果不将形状归一化,那么每次对齐到平均形状,都会有4N个变量(N个样本,每个样本4个参数),但实际上只有4(N-1)个约束,比如刚开始对齐到第一个样本时以第一个为参考,它对其它N-1个样本构成约束【不确定这种理解对不对】。如果少了约束条件,最后求的平均形状就会不收敛。

5.3  问题3 : 如何确定初始化旋转角度和缩放尺度?随机选取不会导致最后搜索偏差较大吗?

       这种算法对初始化的形状要求很低,大抵是任意初始化都能得到一个理想的结果,但是没有试验过,不清楚任意的初始化会不会陷入局部最优,希望能有大神指点。

5.4  问题4 :  最后这些更新参数的权值是如何确定的?

       这些权值都是大小都是决定参数变化速度,我觉得是个经验值,在不断的实验中找到较好的值,因为缺少实践,还望实践过的朋友指点指点。

2 0
原创粉丝点击