收集adaboost算法的负样本用于人脸检测

时间:2014-09-01 03:04:54

标签: image-processing computer-vision face-detection adaboost

Viola-Jones的AdaBoost方法非常适合人脸检测?我们需要大量的正面和负面样本来训练面部检测器。

收集正样本的规则很简单:包含面部的图像。但收集负样本的规则不是很清楚:不包含面孔的图像。

但是有很多场景不包含面孔(可能是天空,河流,家畜等)。我该收集哪个?怎么知道我收集了足够的阴性样本?

阴性样本的一些建议:使用阳性样本并使用左侧部分作为阴性样本裁剪面部区域。这有用吗?

1 个答案:

答案 0 :(得分:5)

你在线程中提出了很多问题。

  1. 样本量。根据规则:当您训练探测器时,每个阶段需要大约数千个正面和负面示例。典型的探测器有10-20级。每个阶段将负数减少2倍。因此,您需要大约3,000 - 10,000个正面示例和〜5,000,000到100,000,000个负面示例。
  2. 采取哪些否定。经验法则:您需要在给定的环境中找到一张脸。因此,您需要将该环境视为负面示例。例如,如果你试图检测坐在教室里的学生的面孔,而不是从教室(墙壁,窗户,人体,衣服等)作为负面例子图像。拍摄月亮或天空的图像可能对你没有帮助。如果您不了解您的环境,请尽可能多地拍摄不同的自然图像(在不同光线条件下)。
  3. 你应该将面部护理(如眼睛或鼻子)作为阴性吗?你可以,但这绝对不够(只采取那些负面)。探测器的真实强度来自负面图像,这些负面图像代表了面部的典型背景
  4. 如何收集/生成负片样本 - 您实际上并不需要很多负面图像。您可以拍摄1000张图像并从中生成10,000,000张负样本。这是你如何做到的。假设您拍摄了一张100万像素分辨率为1000x1000像素的汽车照片。假设你想要训练面部探测器来处理20x20像素的分辨率(就像openCV那样)。因此,您将1000x1000的大图像切割成20x20的碎片。你可以得到2,500件(50x50)。所以这就是你从单个大​​图像中生成2500个负面例子的方式。现在你可以拍摄相同的大图像并将其剪切成10x10像素的大小。您现在将有另外10,000个负面示例。每个示例的大小为10x10像素,您可以将其放大2倍,以强制所有样本具有相同的大小。您可以根据需要重复此过程(将输入图像切割为不同大小的碎片)。从数学上讲,如果您的图像大小为NxN - 您可以通过在其中包含每个可能的矩形来生成O(N ^ 4)个负面示例。
  5. 在第4步中,我描述了如何拍摄单个大图像并将其剪切为大量的反面例子。我必须警告你,负面的例子不应该有很高的共同方差,所以我不建议只拍摄一张图像并从中产生100万个负面例子。根据经验 - 创建一个包含1000张图像的库(或从Google下载随机图像)。验证没有图像包含面。从每张图片中裁剪大约10,000个负面示例,现在您已经获得了相当于10,000,000个负面示例。训练您的探测器。在下一步中,您可以将每张图像剪切为~50,000(部分重叠的片段),从而将负片数量增加到5000万。你将开始用它获得非常好的结果。
  6. 探测器的最终增强步骤。如果您已经有一个相当不错的探测器,请在许多图像上运行它。它会产生错误的检测(检测没有脸的面部)。收集所有这些错误的检测并将它们添加到您的负集。现在再次重新训练探测器。你做的越多这样的迭代越好你的探测器
  7. 真实数字 - 今天最好的面部探测器(如Facebook)使用数以亿计的正面例子和数十亿的底片。作为积极的例子,他们不仅采取正面,而且面对许多方向,不同的面部表情(微笑,呐喊,愤怒......),不同年龄组,不同性别,不同种族(高加索人,黑人,泰国人,中国人,... ..),有或没有眼镜/帽子/太阳镜/化妆等。你将无法与最好的人竞争,所以如果你的探测器错过了一些面孔,不要生气。
    祝你好运