机器视觉 增强现实分享 http://blog.sciencenet.cn/u/wanglin193

博文

人脸检测之一:样本准备

已有 12898 次阅读 2011-2-1 17:50 |个人分类:人脸检测|系统分类:科研笔记| 模式识别, 人脸检测

基于机器学习方法的人脸检测,通常需要固定大小的人脸图像样本作为训练用的正样本,不包含人脸的样本作为负样本。训练过程是一个监督学习的过程,通过特定的特征提取和学习规则的制定,让计算机计算出最有效的将两类样本区分开来的数据,这些数据最为自动检测系统的最终配置加以存储,在真正检测的时候,对于任意输入图像,系统可以调用存储好的数据(知识),对图像加以判断,从而得出样本属于‘+’或‘-’的结论。

 
模式识别问题总是和统计学紧紧相联系的,它所得出的结论往往不是绝对的1或0,只能说是1的概率是多少,是0的概率的多少。所以天气预报会有“降水概率为80%”这种听起来模棱两可的说法。预报出错的情况在所难免,就像所有的模式识别问题都会有false alarm和false positive一样,这就需要对模式识别的结果有理性的认识。喜欢钻牛角尖的人从事这项工作就很容易抑郁,因为往往有这种情况:你花了很大工夫设计的算法,仍然无法在识别率达到100%的同时又没有出现任何错检。所以不能总盯着那些一时无法解决的“特例”,要用一种权衡的思想通盘考虑问题。一个好的识别系统,应该是好的算法加上好的权衡。
 
人脸样本一般是用手工的方法从一幅包含人脸的照片上截取的,然后在缩放成统一的尺寸,比如16×16或20×20。这个过程需要一些耐性,即使设计一个专门的小程序来选取人脸位置并自动缩放,对于几千个样本,重复这样的操作也不是一件轻松愉快的事。好在我们从这个网址找到了现成的训练样本 http://www.cmucam.org/wiki/viola-jones ,它包含两个.pat文件(链接已经失效,pat文件可以直接下载),分别存储两类图像样本,每个样本是24×24的灰度图像。这些样本是Viola-Jones 2001年论文里用的训练样本,从里面甚至可以找到很多熟悉的面孔。
 
利用附件里的matlab程序读出这些样本,正样本为:
psams = getsamples('faces.pat',24);
psams是3维矩阵,维度是24*24*4916,每个样本沿着z方向存放,可以用下面命令显示其中的某个样本:
imshow(psams(:,:,6));%显示第6个样本
 
同样负样本用下面语句读出:
nsams = getsamples('nonfaces.pat',24);
这只是很少的一部分负样本,对于一个鲁棒的系统来说远远不够,需要在训练过程中不断加入新的负样本。
 
并且还可以把它们拼成一个大图,写论文的同学可以从上面截一块出来,插到文章里:“看,我用的人脸样本是这样的”:
tilesamples(psams,'faces.bmp');
tilesamples(nsams,'nonfaces.bmp');
 
部分正样本如下:
 
 
把样本存储成3维矩阵的好处是,提取特征的运算可以充分利用矩阵运算功能,而不用循环处理每个图像。比如正样本的平均值可以用:
meanface = mean(double(psams),3);
imshow(meanface,[]);
平均脸的结果是这样的: 

 

以下附件是从打包存储的样本文件.pat中读取人脸矩阵的matlab小程序:

getdata.rar



https://blog.sciencenet.cn/blog-465130-409609.html

上一篇:Real-time augmented reality based on planar homography
下一篇:人脸检测之二:提取特征
收藏 IP: 58.247.12.*| 热度|

0

发表评论 评论 (3 个评论)

数据加载中...

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

GMT+8, 2024-11-25 14:49

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部