OpenCV Haar训练

    xiaoxiao2023-03-28  12

    目标

    OpenCV库为我们提供了一个非常有趣的演示:人脸检测程序。这个人脸检测程序被称为神圣而伟大的haartraining训练分类器,这样我们就可以使用这些功能创建自己的对象分类。是不是很有趣!

    然而,Opencv上面的代码直接给我们提供了一个已经训练好的人脸HAAR XML包,这让我情何以堪。OpenCV开发人员使用haartraining进行人脸检测,正是因为他们没有给咋们提供一些信息如图像和参数用于训练,所以本报告的目的是提供一步一步的操作。

    [1]Opencv Python人脸检测程序

    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最后等了半天之后出现宏错误,暂时没有修复。

    负样本图像

    我们需要收集的负样本的图像,叫做负样本当然不包含感兴趣的对象。

    值得注意的是第一次我用来训练的负样本大概有1万个,与正样本的比例是1:10,最终训练的检测器的精度很低,完全不能好好地工作,后来同样的正样本与负样本比例降到1.5:1之后,效果好了很多。

    因此负样本不要太多,适当为止,建议5:3的比例组织正样本与负样本数。

    2. 创建样本集

    样本集当中不能把所有正样本都放到正样本中,应该留有 训练集 和 测试集。训练集可以尽可能多,测试集个人觉得留100个左右差不多就可以了。

    下面是opencv的createsamples参数,根据opencv官方的参数是有歧义的。

    Usage: ./createsamples [-info <description_file_name>] [-img <image_file_name>] [-vec <vec_file_name>] [-bg <background_file_name>] [-num <number_of_samples = 1000>] [-bgcolor <background_color = 0>] [-inv] [-randinv] [-bgthresh <background_color_threshold = 80>] [-maxidev <max_intensity_deviation = 40>] [-maxxangle <max_x_rotation_angle = 1.100000>] [-maxyangle <max_y_rotation_angle = 1.100000>] [-maxzangle <max_z_rotation_angle = 0.500000>] [-show [<scale = 4.000000>]] [-w <sample_width = 24>] [-h <sample_height = 24>]

    2.1 创建训练样本

    $ createsamples -img face.png -num 10 -bg negatives.dat -vec samples.vec -maxxangle 0.6 -maxyangle 0 -maxzangle 0.3 -maxidev 100 -bgcolor 0 -bgthresh 0 -w 20 -h 20

    引用

    [1]. Alexander Kuranov, Rainer Lienhart, and Vadim Pisarevsky. An Empirical Analysis of Boosting Algorithms for Rapid Objects With an Extended Set of Haar-like Features. Intel Technical Report MRL-TR-July02-01, 2002

    转载请注明原文地址: https://ju.6miu.com/read-1210778.html
    最新回复(0)