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

tid*_*idy 1 image-processing computer-vision face-detection adaboost

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

收集正样本的规则很简单:包含面部的图像.但收集阴性样本的规则不是很清楚:不包含面部的图像.

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

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

Dan*_*HsH 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)使用了数亿个正面例子和数十亿个底片.作为积极的例子,他们不仅采取正面,而且面对许多方向,不同的面部表情(微笑,呐喊,愤怒......),不同年龄组,不同性别,不同种族(高加索人,黑人,泰国人,中国人,... ..),有或没有眼镜/帽子/太阳镜/化妆等.你将无法与最好的竞争,所以如果你的探测器错过了一些面孔,不要生气.
    祝好运