目标
OpenCV库为我们提供了一个非常有趣的演示:人脸检测程序。这个人脸检测程序被称为神圣而伟大的haartraining训练分类器,这样我们就可以使用这些功能创建自己的对象分类。是不是很有趣!
然而,Opencv上面的代码直接给我们提供了一个已经训练好的人脸HAAR XML包,这让我情何以堪。OpenCV开发人员使用haartraining进行人脸检测,正是因为他们没有给咋们提供一些信息如图像和参数用于训练,所以本报告的目的是提供一步一步的操作。
1.数据收集
正样本图像 Positive (Face) Images
这个时候,我们需要收集一些自己感兴趣的目标正样本,当然这些样本只包括目标区域。例如,人脸。
Kuranov et. al[1] 提到他们使用5000个正面人脸图像,其中这5000个正面人脸图像是来自1000个原始的人脸图像,从1000到5000是通过平移、旋转、翻转等方法去增加正样本的数量,减少我们人工收集的数量。在后面会描述如何增加更多的样本。
在这之前,我下载并使用UMIST人脸数据库。UMIST人脸数据库是从视频流提取出来的,包括从侧面到正面的人脸。一开始我认为这样的图片训练集会产生一个鲁棒性的面部检测器,毕竟是包括了人脸的侧脸和正面了嘛。可是呀,这个最终的效果却没有想象中的那样,检测器实际上并没有很好地工作。So Sad。
MIT CBCL Face Data数据集合一个很好的人脸识别样本。因为里面包含了2429个正面人脸,其中正面人脸样本当中光照变化和姿势变化都比较少,最后通过敬仰总结这样的数据将是很好的haartraining训练集。然而,图像的大小最初是小的19×19。如果只用19*19的样本,这样对于大的图像进行检测效果也不是很好。
因此总结一下正样本的特性:
1.正样本光照变化和姿势变化尽可能少,最后的效果比较稳定。
2.正样本的图像大小不能太小。如果正样本图像太小,最终检测小的物体效果还可以,如果检测图像中较大的物体效果不太理想。
3.正样本不宜超过1000,opencv的haartraining程序默认最大的正样本集是1000,我尝试过输入2000最后等了半天之后出现宏错误,暂时没有修复。
负样本图像
我们需要收集的负样