科学网

 找回密码
  注册
科学网 标签 ASM

tag 标签: ASM

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

ASM/AAM形状训练
热度 2 wanglin193 2011-6-13 22:33
ASM/AAM形状训练
用上次提供的手工标定的脚本,我们已经得到了一些训练样本,接下来就该进行训练了。 AAM和ASM的形状和纹理(ASM用的是形状landmark点附近的局部纹理,AAM用的是base shape mesh内部的全部像素)训练都是独立进行的,训练的方法都是主成分分析(PCA),把形状或纹理投到训练样本撑起的子空间(subspace)中去,把人脸形状或纹理利用子空间中相对较少的维数来表达。样本在子空间中得到的坐标值,又可以称为 模型参数 。也就是说任何一个样本都能表达成用一组正交向量基的加权和的形式,这些向量基表示高维空间中的坐标轴,这些权重系数(模型参数)表示样本在坐标轴上投影得到的坐标值。PCA使用的KL变换,是一种线性变换,它把样本集合所在的高维空间坐标轴进行了平移和旋转变换,变换后,坐标原点变到样本聚类中心(这就需要样本在空间中是聚类的,比如都是正脸的形状或纹理),坐标轴的方向旋转到与聚类集合的主轴方向平行(假设样本聚类成一个高维椭球),序号在前的坐标轴的集中的能量较多,排在后面的只能表达一些噪声,通过忽略后面的表达能力较弱的坐标轴,达到降维的目的。比如68×2=136维的形状矢量,可以用较少的几十个参数来表达。PCA计算可以非常容易地用matlab的svd函数(或svds)实现,比如这样 = svds(x,s);%x是样本集合,每个样本对应一列,均值为0,s表示最大能量的s个eigenvalue Evalues=diag(S).^2;%eigenvalue,S是singular value矢量 Evectors=U; %本征矢量eigenvectors 在开始做PCA之前,来至不同图像的形状样本,都要经过一个4个参数(表示位移,平面内旋转和变比)的相似变换,变换到和它们的平均形状对齐。而这个平均形状是在变换后的样本上得到的,这是个先有鸡还是先有蛋的问题。具体做法用到迭代步骤:先给定一个平均形状的初始值,大家都向它对齐,然后计算均值,这个均值每次都要经过规范化,比如让重心为0,方差为一个固定数100,具体如下: %% aligne all shapes 形状都表达成(x1,x2,...y1,y2...)的136维的矢量 alishapes = shapeall; meanshape = alishapes(:,1); for round=1:50 %循环次数50 meanshape = norm_meanshape(meanshape); for i=1:ls %所有样本,pntnum=68 = align2shape( ,... , ones(pntnum,1) ); alishapes(:,i) = ; end meanshape = mean(alishapes,2); end 我手里有80个训练样本,最后的对齐的样本如下,红点是meanshape: PCA得到的头两个坐标轴(本征矢量)对应的本征值在方差(sqrt(engenvalue))正负3之间变化,中间那个是meanshape,也可以称为base mesh: 下面是把平均形状画在一个宽高分别为133和153像素图像上的情形,形状重心对应图像的中心点: 这个图像是AAM用来训练纹理用的,作为一个摆放不同大小的人脸样本图像的标准尺度,所有图像样本都要warp到这个平均形状内部上(上篇博客文章最后那个图),它内部对应的像素个数决定了warp和纹理子空间的计算量。 如果使用多分辨率AAM,则可以以它为基础构造图像金字塔。
个人分类: ASM/AAM|12405 次阅读|2 个评论
ASM/AAM手工标定的Matlab脚本
热度 9 wanglin193 2011-5-25 18:57
ASM/AAM手工标定的Matlab脚本
有段时间我一直满足于在脸上画个框,后来又满足于在脸上标些点,再后来在这方面就没有进展了。剩下不多的东西包括硬盘某个文件夹里不同时期下载的paper:光流、特征检测、ASM、AAM...... 还有各种版本的人脸检测和跟踪的代码,里面藏着很多垃圾,比如每个版本的文件夹都包含一个debug和release目录。相对来说那些Matlab小程序就挺不错,不太占地方,用几行代码就能实现挺复杂的功能,比如下面这个AAM或者ASM训练用的手工标点的脚本,我把它放在这里晒晒。 程序下载: Edit68CMU_pack.rar 对于人脸检测的人脸样本准备,通常需要手工从图像中截取人脸区域,为了程序鲁棒性的考虑,生成的人脸样本需要还要有一定角度的旋转;对基于统计训练的图像自动标定(image alignment,比如Active shape model 或Active appearance model)方法来说,第一步工作就是手工在图上把物体轮廓标出来,这些点一般称为landmark。在没有用过OpenCV之前,要写一个支持鼠标输入交互选点的程序还是挺麻烦的,但是等到我开始使用Matlab,并且知道有个ginput函数后,这事就变得无比简单了。 首先,因为ASM的形状(shape)点是有序号的,每个点都对应一个目标上的关键点,是有具体含义的。一个标定的方法是用sh=ginput(68)一口气选取68个点,但是这中间一旦出错就前功尽弃了。所以比较好的办法是先把一个差不多的标准形状铺在输入的图像上,然后交互地调整每个点的位置,直到每个点都放到对应的位置为止,这样就把"标定形状"变成"编辑形状"了。其次,如果一个人脸图像"A.jpg"对应的landmark已经标记好了,并且保存在一个比如叫做"A.lmk"的文件中,过了一阵子我又想重新修改某些点的位置,或者因为不同的应用,形状的配置发生变化需要增加删除某些点,程序也应该满足编辑lmk文件个功能。 下面的程序就主要完成这两个功能: 1.先准备个标准形状做参考,比如从论文里找这样一张图,用ginput按顺序选68个点(68个点的定义见CMU那帮人的论文,文献 ,也可以用画图软件事先标好你要的点,比如下图的蓝点,这样的好处是可以保证使用ginput(68)一次成功): imshow('meanface.jpg'); sh = ginput(68); 这样这些点的X,Y坐标就放在sh的两列里。把它作为一个标准形状,存在一个文本文件里。 2.程序开始,先要load标准形状。然后通过对话框选取一个图像文件,并显示 = uigetfile( , 'Pick an image'); Aim = imread( ); imshow(Aim, 投影到图像中。 4.如果对应的lmk文件已经存在,则读入lmk,把形状 铺在图像上。 5.根据上面的输入信息,粗略计算一个人脸区域box,并且放大显示 im=imcrop(Aim,box); imshow(im, =ginput(1); %最近点的序号存在ind里 =min((xc-Xo).^2 + (yc-Yo).^2); 5.2 再用ginput(1)选择要移动的位置,替换旧的值 = ginput(1); Xo(ind)=xc; Yo(ind)=yc; 重复这两个步骤,直到满意为止。 6. 保存形状文件(.lmk) fid = fopen( , 'w'); fprintf(fid,'%6.2f %6.2f\r\n', '); fclose(fid); 另外利用delaunay函数事先计算平均形状的三角网格(mesh): mtri=delaunay(meanshape68(:,1),meanshape68(:,2)); mtri的每行存储的是3角形的3个顶点序号,我们也可以利用这个三角剖分信息,把网格画在人脸上。 遗憾的是这3个点不都是顺时针或逆时针的,也就是说delaunay输出的这些三角形面片的法线方向不是朝一个方向的,这就需要交换某些三角形内某对点的位置,网格三角剖分工作甚至可以不用delaunay函数,而用手工完成,因为这个步骤都是一次性的。这些三角网格的主要用处是把人脸图像纹理warp到平均形状,叫做shape-free patch,这是AAM的关键步骤之一。如下图所示。左边是原始图的网格,右上角是表示在平均形状位置的每个三角形有一组仿射变换参数(用来到原始图像中采样,每个三角形内的图像采样点相对于该三角形网格的参数是固定的,也只要计算一次即可),右下角是得到的shape-free patch。 这样做,可以有助于实现形状(shape)和纹理(appearance)的的分别训练,具体更进一步实现自动人脸校准(face alignment),就需要好好看看下面两个文章了。 : 1. AAM/ASM创始人Tim Cootes的文章: http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/refs.html 2.CMU的方法,以Lucas-Kanade 算法为基础(同时可参考我之前贡献的Lucas-Kanade 算法的文档) Active Appearance Models Revisited : http://www.ri.cmu.edu/publication_view.html?pub_id=4601 3.3D电影Avatar就是用了类似的方法进行人脸表情跟踪的。 http://www.meraforum.com/showthread.php?t=36119
个人分类: ASM/AAM|26238 次阅读|16 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 21:39

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部