首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收集adaboost人脸检测算法的负值样本

收集adaboost人脸检测算法的负值样本
EN

Stack Overflow用户
提问于 2014-09-01 03:04:54
回答 1查看 3.6K关注 0票数 1

维奥拉-琼斯的AdaBoost方法是非常流行的人脸检测?我们需要大量的阳性和阴性样本来训练人脸检测器。

收集阳性样本的规则很简单:包含人脸的图像。但是采集负片样本的规则并不十分清楚:不包含人脸的图像。

但是有那么多没有脸的场景(可能是天空、河流、家畜等等)。我该收哪一个?我怎么知道我收集了足够多的阴性样本?

对阴性样本提出了一些建议:利用阳性样本,用左侧区域作为阴性样本对人脸区域进行裁剪。这是工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 06:58:14

你在你的帖子里问了很多问题。

  1. 样品量。拇指的规则是:当你训练一个探测器时,你每个阶段大约需要几千个正反两个例子。典型的探测器有10-20级.每一阶段都会减少2倍的负数,所以你需要大约3,000 -10,000个正例子和5,000,000到100,000,000负例子。
  2. 的负片取。经验法则:你需要在给定的环境中找到一张脸。所以你需要把这个环境当作负面的例子。例如,如果你试图检测坐在教室里的学生的脸,而不是把教室里的图像(墙壁、窗户、人体、衣服等)当作负面的例子。拍摄月亮或天空的照片可能对你没有帮助。如果你不知道你的环境,只是采取尽可能多的不同的自然图像(在不同的光照条件)。
  3. 你应该把面部部位(比如眼睛,还是鼻子)当作阴性吗?你可以,但这绝对是不够的(只拿那些负面的)。探测器的真正强度将来自于代表人脸典型背景的负片图像。
  4. 如何收集/生成负样本-您实际上不需要很多负面图像。您可以拍摄1000张图像并从中生成10,000,000个负片样本。这是你怎么做的。假设你拍了一张1兆像素分辨率1000x1000像素的汽车的照片。假设您不想训练人脸检测器来处理20x20像素的分辨率(就像openCV那样)。所以你把你的1000x1000大图像切成20x20的碎片。你可以得到2500件(50x50)。这就是如何从一个大的图像,你产生了2,500个负面例子。现在你可以把同样大的图像切成10×10像素大小的碎片。现在您将有更多的10,000个负面示例。每个示例的大小为10×10像素,您可以将其放大倍数为2,以强制所有样本具有相同的大小。您可以随心所欲地重复这个过程(将输入的图像切割成不同大小的片段)。从数学上讲,如果你的图像的大小是NxN -你可以从它生成O(N^4)负的例子,通过在里面的每一个可能的矩形。
  5. 在第4步中,我描述了如何获取单个大图像并将其裁剪成大量的负面示例。我必须警告你,负的例子不应该有很高的协方差,所以我不建议只取一张图片并从中产生一百万个负面的例子。根据经验-创建一个1000张图片的库(或者从Google下载随机图片)。验证这些图像中没有一个包含人脸。从每幅图像中裁剪大约10,000,000个负数,现在你已经得到了一个像样的10,000,000负例子。训练你的探测器。在接下来的步骤中,您可以将每幅图像削减到50,000(部分重叠的部分),从而将您的底片数量扩大到5000万。你会开始有很好的效果。
  6. 探测器的最终增强步骤。当你已经有了一个相当好的检测器,运行它在许多图像。它将产生错误的检测(在没有脸的地方检测人脸)。收集所有的错误检测,并将它们添加到您的负值集中。现在再重新训练探测器。这样的迭代越多,检测器就会变得越好。
  7. 实数--当今最好的人脸检测器(如Facebook)使用了数亿个正面的例子和数十亿的负面信息。作为正面的例子,他们不仅取正面的脸,还取许多方向的脸,不同的面部表情(微笑,喊叫,生气,.),不同的年龄组,不同的性别,不同的种族(白种人,黑人,泰国人,中国人,.),不管有没有眼镜/帽子/太阳镜/化妆等等。你将无法与最好的竞争,所以不要生气,如果你的探测器漏掉了一些面孔。 祝好运
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25598335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档