aam_tools工具的使用
转自:http://blog.csdn.net/raby_gyl/article/details/17716283
Tim Cootes 个人主页:http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/
http://www.isbe.man.ac.uk/~bim/Models/aam.html
1、am_tools工具
am_tools——Modelling and Search Software
地址:http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/software/am_tools_doc/index.html
这个文档用来描述如何建立,显示和使用统计表观模型
这些工具仅可用于研究/非商业使用。
可以利用下面的工具:
1、am_build_apm——用来建立表观模型(For building appearance models)
2、am_build_aam——用来建立主动表观模型(For building active appearance models(AAMs))
3、am_view_shape_model——用来显示形状模型(For displaying shape models)
4、am_view_apm——用来显示表观模型(For displaying appearance models)
5、am_markup——用来使用模型进行迭代图像搜索(For interactive image search with the models)
6、am_tri_editor——用来产生和编辑三角剖分(For generating and editing triangulations)
7、am_get_params——用来从标记的图像中获取模型的参数(For getting model parameters from sets of annotated images)
8、am_make_image——用来使用模型产生图像(For generating images using the models )
下载工具和数据:(Windows)
2、模型化和搜索软件:基本手册——Modelling and Search Software:Basic Tutorial
当你下载了工具之后,你应该也获得了一个小的标记数据集,我们可以用它来进行实验。
数据由三个子目录组成:
1、images——包含图像
2、points——包含每一个图像上的注释点
3、models——包含描述模型的数字文件
为了编译模型,在命令行执行下面的步骤:
(注释:
方法1:如我将这个文件下载后加压到D盘根目录,那么我执行下面的操作:开始——运行——cmd——d:——cd D:\am_tools\win_bin 记得要先把models文件夹下需要的文件拷贝进去
方法2:为程序增加这个路径到系统:控制面板——系统——高级——环境变量,在下级面板通过在分号后增加适当的路径来编辑the path statement。在这种改变生效之前,计算机需要重启。然后按下面步骤1开始即可。例如我们上面描述工具(如am_build_apm)在D:\am_tools\win_bin 目录下,我们将其添加到环境变量中的path变量中,然后重启计算机即可。)
1)移动到models子目录
2)运行命令"am_build_apm tim_face"
3)运行命令"am_build_aam tim_face"
4)运行"am_view_shape_model tim_face"来观察形状模型(detail如下:am_view_shape_model)
5)运行"am_view_apm tim_face"来观察表观模型(detail如下:am_view_apm)
6)运行“am_markup tim_face”来进行搜索实验:(detail如下:am_markup)
(1)加载一个单独的测试集图像:选择"File->Load Image Set",从中选择"tim_face_test.smd"
(2)打开搜索参数面板:"Props->Search"
(3)点击"Search"按钮,运行AAM搜索
(4)在主窗口左侧的一行按钮中选择"Move All"
(5)使用鼠标在周围拖动模型点集
(6)重新运行"Search"
(7)使用"+1>"按钮移动到下一个图像
(8)发挥你自己内心的内容和想象。
am_view_shape_model
用来显示一个形状模型模式的变化的一个工具。(A tool to display the modes of variation of a shape model)
它从*.apm文件中读取形状模型(通过am_build_apm建立)
它同时读取关联的parts文件,该文件描述点是如何连接的。
允许操作的控件(control)如下:
1、模型感兴趣的模型(Mode:)
2、改变展示模式样本的数量(N.egs:)
3、改变模型变化的范围(Limit(SD%))(SD——Standard deviation 标准方差)
4、改变用来显示形状的线宽(Width)
另外,允许操作的按钮(buttons)如下:
1、动画显示形状的变化(Animate )
2、产生当前图形的一个封装的PostScript格式(用于包含在文献中)
3、保存一系列的图像,适合用来创建一个movie(注释:当进行这个操作时,最好仅显示一个形状)
am_view_apm
用来显示一个表观模型模式变化的一个工具——a tool to display the modes of variation of an appearance model它从*.apm文件中读取形状模型(通过build_apm建立)( 这里是原文,感觉不妥)
这个工具允许我们现实3中类型的模型:
1、一个形状模型(使用均值纹理)( 感觉不妥) 2、一个纹理模型(使用均值形状)( 感觉不妥) 3、一个组合的形状和纹理模型
允许你操作的控件如下:
1、选择感兴趣的模型(Mode) 2、改变展示这个模型的样本数量(N.static) 3、改变模型变化的范围(Range(%SDs))
另外允许你操作的按钮:
1、动画现实形状的变化 2、保存一系列的图像,适合用来创建一个movie(注释:当进行这个操作时,最好仅显示一个形状)
am_markup
用主动表观模型进行迭代搜索的工具使用命令行:am_markup 或者am_markup xxxx 调用,这里的xxxx.smd是一个SMD文件。
导入一个模型——Loading a model
这个文件(filenames)定义了每个模型的各种成分,通过SMD文件封装。为了导入一个模型,可以通过允许命令行是传递一个SMD文件作为参数,也可以使用"File->Load Model"
导入图像用来搜索——Loading images to search
为了导入单个图像,使用"File->Load Imae"菜单目录。
通常,我们感兴趣的图像可能带有注释。处理这些图像最简单的方法是建立一个基本的SMD文件列出感兴趣的图像。然而可以使用"File->Load Image Set"将它们导入。第一个图像将被显示(并且任何相关的注释点也在SMD文件中列出)。你可以使用主窗口上的箭头按钮遍历这组图像。
当标记一组图像时,这是首选的一种技术,因为这个工具可以自动地为任何保存的点创建一个合适的文件名。
注意:当年导入一个模式时,SMD文件定义了一个初始的图像集,图像集中的第一个是自动加载的。
操作模型——Manipulating the Model
因为AAM是一个局部搜索算法,模型必须从大致正确位置开始。主窗口左侧的按钮允许各种各样的交互式的选择,如下: 1、放大:选择一个矩形框(box)来放大。双击或者点击“Unzoom”按钮来显示整幅图像。 2、Move All:拖动鼠标左键平移模型,拖动鼠标右键绕其中心旋转和尺度化。 3、Select: 按住和拖动来选择结果矩形框内的所有点 4、Move One:点击单个模型点来向周围拖动
注意,当你拖动单个点的时,它们是红色的。这表示它们固定并且在搜索的时候不会移动。假设,如果用户已经移动了这些点,它们被移动到了以特殊的期望的位置,并且机器
不会再次移动它们。为了返回到“正常”状态,使用面板(panel)上的按钮。打开面板使用"Props->Point State"菜单栏目。当导入一个新的图像时,所有点返回到正常状态。
用模型进行搜索——Searching with the Model
使用"Props->Search"菜单栏目打开搜索控件的一个面板。
这些允许你定义参数来控制搜索(尽管默认通常合理的工作) 为了运行搜索,简单地按“Search”按钮。
搜索参数 1、Max.Level:使用的最粗糙的模型分辨率。默认值对于最粗糙模型分辨率有效。 2、Min.Level:使用的最好模型分辨率 3、Max.Its:用在每一个分辨率上的最大迭代次数。 4、Forced Its:在不检查:预测步骤实际上提高了匹配设置到1或者2,并且发现这对于跳出局部极小值是有用的(情况)下,运行的迭代次数。 (The number of iterations to run without checking that the predicted step actually improves the match-setting to 1 or 2 has been found to be useful for jumping out of local minima 这句话如何翻译?)。
保存结果——Saving Results
使用“File->Save Points”可以将当前模型点的位置保存到一个point文件。
当使用一个SMD文件导入图像时,可以自动的产生一个适当的文件名(基于图像的名字)并且保存这些点。
显示问题——Display Issues
通过"Props->Graphics"菜单栏目调出一个面板,这个面部允许我们对画图进行控制(线宽,点半径等等)
1、显示在每一次迭代的结果。(但减缓搜索) 2、“View Recon”按钮弹出一个窗口,显示的图像是当前模型的重构和原图像的叠加。注意:只有当模型表示的是(并且可以合成)原始纹理区域时,才是明智的。如果模型表示的是梯度或者其他其他复杂特征,它不会工作的很好。
产生截图和视频序列——Generating screenshot是and video sequences
1、“File->Save Screenshot”将保存当前窗口中的图像,带有任何图形覆盖。 2、使用提供的按钮允许我们保存搜索过程的每一个截图,进而用来为视频产生帧序列。 3、这些操作也可以应用于重构的图像。
总结:
1、通过上面的步骤,我们可以对ASM和AAM有一个初步的可视化了解。上述是翻译的Cootes网站上的教程。自己写下来仅是方便自己查看,里面有有理解错误的还有不理解的,还请说明指正。。 2、如下图,我们拖动模型到真实的大致位置,然后点击Search按钮,正确匹配的结果如下:地址: http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/software/am_tools_doc/exercises.html
模型化和搜索软件:练习——Modelling and Search Software:Exercises
1、操作存在的模型——Playing with existing models
当你下载这个工具之后,你应当也获得了一些标记的数据集,我们可以用它们来进行实验。
建立模型之后,试试以下的实验,让自己熟悉模型的建立和搜索过程。
1、编辑SMD文件,将“Colour:”值该为"RGB‘。重新建立模型并且显示它。(注:这里要RGB和//之间有个空格)
2、编辑SMD文件,增加"n_pixels:"变量到20000。重新建立模型并且显示。
3、当使用am_markup进行搜索时,尝试在运行搜索前增加数量(amount),然而显示。估计区域的大小使得模型能够正确地收敛。
4、尝试导入其他人脸图像——模型匹配情况如何?
5、当搜索中使用的模式数量减少时,将发生什么?
2、建立一个新的模型——Building a new model
How to build a new model?
这个文档概括了如何从零开始创建模型,假设你现在所拥有的仅是一组为标记 的图像。
假定你已经建立了你自己的路径,以使得各种各样的工具可以从命令行运行。(例如,在Windows下,为程序增加这个路径到系统:控制面板——系统——高级——环境变量,在下级面板通过在分号后增加适当的路径来编辑the path statement。在这种改变生效之前,计算机需要重启,例如我的am_markup.exe等程序在D:\am_tools\win_bin下,我们将这个目录添加到环境变量中的path变量中)
(1)预备任务——Preparatory Tasks
1、创建一个工程目录(目录和文件名不能有空格),例如osteo
2、为模型(例如 models),点文件(point files)以及图像(images)添加三个子目录。
3、复制下面文件的模版到models目录:xxxx.smd,xxxx.aaprops。使用适当的模型名字替代xxx,例如foream_distal.
4、编辑.smd文件并且增加模型名字(例如forearm_distal),parts文件名(例如forearm_distal)以及需要的各种目录名。也在training_set下增加一对点/图像文件。图像文件是第一个进行分析的图像。
5、编辑.aamprops文件,并且增加模型名字(例如forearm_distal)到am_name、aam_name以及models目录名。
6、创建一个虚拟点文件,称为"points/dummy.pts",如下
[cpp] view plain copy
- version: 1
- n_points: 2
- {
- 0.0 0.0
- 1.0 1.0
- }
(2)标记第一个图像——Annotating the First Image
假定你正在运行一个shell或者command prompt。改变目录到你创建好的models目录。
1、运行am_markup开始程序,通过使用SMD文件名字调用它(例如" am_markup start forearm_distal")
2、选择Add Curse并且标记第一个点轮廓。定位终点在第一个点上来关闭轮廓。
3、选择Move One调整单个点的位置。如文使用其他工具。
4、当需要时创建额外的轮廓。如果期望建立一个主动形状模型,期望形状周围的轮廓应该充足。对于一个主动表观模型,形状周围的区域同样被确定。
5、通过"File>Save Points As"选择上面创建points子目录来保存点轮廓并且使用图像的文件名,扩展名为.pts
6、通过"File>Save Parts As"选择上面创建的models子目录来保存轮廓的描述并且使用模型的文件名,扩展名为.parts,例如 forearm_distal.parts
7、退出am_markup
(3)创建第一个模型——Create a First Model
1、使用模型的名字运行表观模型建立器(例如"am_build_apm forearm_distal")
2、通过运行"am_build_aam forearm_distal"建立主动表观模型。
3、通过运行"am_view_apm forearm_distal"观察表观模型。
(4)进一步标记图像——Annotating Further Images
1、创建一个SMD文件(称作,例如 data_todo.smd),包含你希望操作的所有图像列表。设置点文件为"dummy.pts"。这简单地使遍历数据更容易。
2、再次运行am_markup(例如am_markup forearm_distal)。先前标记的第一个图像和它的模型在窗口中用黄色显示。
3、使用"File->Load Image Set"导入文件列表进行标记(data_todo.smd)
4、进入Props->Graphics Props并且重复地按Model Points右边的+按钮来扩大model-points的大小(绿色)。
5、使用"Props->Search Props"菜单栏目来获得搜索面板。
6、按左侧栏的"Move All"按钮进入一个模式,在该模式下所有点被移动(使用左键拖动鼠标)或者尺度/旋转(拖动右键)。移动点集到粗略地正确位置。
7、使用搜索面板上的“Search”按钮开始搜索。
8、编辑点集(例如进入"Move one"模式)直到满意。
9、按"Save,Add,Update"或者"Save,Add,Update,Next,Labels,Frame"按钮,后一个按钮将自动的导入列表上的下一个图像。
10、遍历剩下的图像并且退出am_markup。
如果仅使用单个图像训练,搜索将工作的不是很好。建议,当我们增加了一些图像之后,重新建立模型。为了这样做,退出am_markup并且重新运行am_build_apm/am_build_aam工具。模型SMD文件将自动的更新来包含你已经标记的图像(但是值得检查确保没有重复或者任何问题)。从data_todo.smd文件中删除标记的文件。然而重新运行am_markup并且如上继续。
当更多的图像添加到模型后,模型变的更灵活并且能够更好的推广。
3、创建嘴唇形状的一个统计形状/统计纹理模型
这里步骤是安装上述2中操作获取的,这里仅简单的贴一下运行过程的操作效果图。
1、Cootes关于创建一个嘴唇形状的教程中,将嘴唇的左角点和右角点连接起来,我的下面没有,仅是操作的嘴唇的边缘,当然你自己在操作的过程中可以把这个连通性也添加进去。
2、用一幅图像建立模型之后,运行"am_view_apm mouth"观察的表观模型:(上面步骤3.3)
3、再次运行am_markup(例如am_markup mouth)。先前标记的第一个图像和它的模型在窗口中用黄色显示:(上面步骤4.2)
4、进入Props->Graphics Props并且重复地按Model Points右边的+按钮来扩大model-points的大小(绿色):(上面步骤4.4)
5、模型训练完后,导入训练的模型:mouth.smd,然而导入一个测试图像列表,我们这里还是用先前创建的data_todo.smd,然而,我们移动嘴唇大致在嘴唇的位置,然而运行搜索按钮:
拖动鼠标右键改变了一下形状和大小如下图:
点击“Search”按钮,搜索后的结果如下:
我要说的:
1、在预备任务中第3小步骤,“也在training_set下增加一对点/图像文件”,图片的文件名我们知道填写第一个图片名就可以了点文件名这里可以添加下面的dummy.pts,这里填写是随意的,因为我们在标记完后,save这些点集的时候,会生成以图像名为命名的点集,并且这些点集保存后,在创建表观时,即运行am_build_apm/am_build_aam时,会将这些点集列表加入到模型文件中,即我们这里是mouth.smd。也正如文章说的那样,使用dummmy.pts仅是为了“遍历数据更容易”。 2、当我们训练完模型后,我们应该也可以导入单个图像来测试,而不是导入一个smd文件的图像列表。但是我们这样会程序会异常退出,一个可能的原因是我们加载的是彩色图像,而我们程序smd文件中设置的是灰色图像,这个你这样自己测试一下,即改变smd的colour属性为RGB后,再次导入单个彩色图像,看看会不会异常退出。 3、有人可能回想,当我们导入测试图像后,嘴唇形状(即训练的模型)会定位到哪里?这里它不会定位到嘴的附近,因为它不知道嘴在哪,这也就是为什么我们用ASM做的时候,一定要首先初始的粗略定位。这里我们在操作测试的时候,可以将模型移动到嘴的大致位置,然而再允许搜索。 4、过段时间,我会把我的上述嘴唇形状的文件上传到csdn的下载地方。本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
