ASM(active shape model)算法学习总结
引言
大二利用ASM算法做完项目后,一直没有进行总结。时至今日读了ASM原始论文,以及多篇ASM算法介绍的博客,做以下总结。
ASM(active shape model)大多地方译作 :主动(主观)形状模型,我个人认为如果译作:动态形状模型 更为合适,原始论文指出ASM是形状可变的图像结构模型。(new methods of building and using flexible models of image structures shose shape can very)。
简介
ASM的基础是:图像的结构能够被一系列的点来表示。可以是表示边缘的点、内部结构的点甚至是外部的点。这意味着ASM可以用来提取物体的特征点、可以做为表示物体特征的一种形式。【这种以点来做物体特征的方法曾用于ChaLearn Lookingat People New2015 competitions 中 年龄预测部分】
以下两种见于博客中对ASM的简介:
ASM是一种基于点分布模型(Point Distribution Model,PDM)的算法。在PDM中,外形相似的物体,例如人脸、人手、心脏、肺部等的几何形状可以通过若干关键特征点(landmarks)的坐标依次串联形成一个形状向量来表示。个人认为这种说法直观上更易于理解。
ASM基于统计学习模型的特征点提取的一种方法。
优势及不足
ASM适用于表示典型的形状和典型的形状改变。目前已经是一种很成熟的算法(1995年提出),有关原理、开源包等资料网上有很多。如果只是简单的用于特征点定位,其表现(定位精度和效率)完全可以接受。
但之后提出的AAM、CLM、SDM,以及深度学习、机器学习、神经网络,有着更高的精度、更广的适用范围。
ASM原理/流程
ASM算法需要通过人工标定的方法先标定训练集,经过训练获得形状模型【train】,再通过特征点的匹配实现特定物体的匹配【test/fit】。
由于所做项目与人脸特征点(通常取68个)定位有关,接下来以这个例子来串起ASM的原理/流程。
Train
1.训练集标记
往往有现成的带有标记信息的数据集,例如人脸的FG-NET库。
如果是人工标记,则需结合具体项目根据图形学选取关键点进行标记。【有关点的标记可参考原始论文Active Shape Models-Their training and Appilcation】
这里选取 N 张人脸照片作为训练集,每张人脸 68 个点做为标记点。
2.训练集对齐(Aligning)
1)将每个样本的68个点的坐标按照顺序,描述为一个向量。
第 i (0 < i < N)张脸可表示为 Xi = {xi0,yi0...,xi67,yi67} ,则训练集记作:X = {X1,...Xi,...Xn}
2)通过缩放、旋转、平移,使训练集中不同形状人脸到第一张人脸同一位置的点的距离的加权和(E)尽可能的小。
(1)将第 1 张脸作为基准
(2)对第 i 张脸做缩放s、旋转r、平移t,记作:M(s,r)[Xi]+t
(3)重复 (2) 直至 E = [X0 - (M(s,r)[Xi]+t)]*W 收敛
得到对齐后的训练集 X' = {X1',...Xi',...Nn'} Xi' = {xi0',yi0'...xi67',yi67'}
3.计算ASM并添加约束
1)计算对齐后的训练集X',得到一个平均形状向量(人脸模型) Xmean = {xi0,yi0...,xi67,yi67}
2)以Xmean为中心确定各个向量与平均向量的偏差范围 dXi = Xi - Xmean ,即保证形状的改变在一定范围。
3)若形状向量维数太大,应该用 PCA 算法进行降维。
数学原理的推导:点击打开链接 参考训练将对齐后的形状进行PCA处理部分
Fit
1.为模型的每个点建立局部特征
1)以对上图中第29个特征点建立局部特征为例,在第28、30个特征点连线的中垂线(过第29个特征点)上,以第29
个特征点为中心前后各取 m 个像素值得到一个长为2m+1的向量dX0,即:对训练集中第一张图像的操作。
2)重复1),得到所有dX = {dX0,...,dXn}
3)对向量 dXi 求导,计算、统计dX中导数最大值的均值及方差。即为改点的局部特征。