假设我有一个 haar 级联 xml 文件。有没有办法将文件渲染成图像以创建“完美标本”?
因此,如果 xml 用于人脸检测,它将显示获得最高分数的人脸图像?
如果不可能,有没有办法对“主要成分”进行成像?
顺便说一句,我使用的是 Python 版本的 openCV。
据我所知,这将是困难的。分类方案很复杂,我认为没有一种简单的方法可以“反转”它,得到“完美的样本”,甚至是主成分之类的东西。(下面有更多关于主成分的内容。)让我试着快速解释一下分类是如何完成的,以便更清楚为什么这些事情很难;然后我会提到你可以尝试的其他一些方法。
级联的想法是通过尽快拒绝尽可能多的非人脸来加快分类速度。(这很重要,因为图像中的大多数东西都不是人脸。)你可以通过级联的分类器来做到这一点。第一个分类器经过训练,可以拒绝 90% 的非人脸,但至少保留 99.99% 的人脸。这仍然是很差的性能——如果你只使用这个分类器,你会得到大量的误报。但是,您可以非常快速地执行此分类,因此您可以快速摆脱大量非人脸。
好的,那么这些分类器之一是什么?好吧,每个分类器都是一组增强的弱分类器。这意味着,对于您传递给分类器的每张图像,它都会将其传递给N个非常简单的分类器中的每一个,并且每个简单分类器都会投票“真”或“假”。每个简单(弱)分类器都被加权,因此加权投票给出了强分类器的答案。
好的——那么什么是弱分类器?我认为在 OpenCV 中,弱分类器是高度为 2 的决策树(参见OpenCV 文档,起始页 ~368)。所以每个弱分类器都将输入图像与一个简单的模式进行比较;如果图像与图案足够相似,则将其传递给另一个图案进行比较;如果它足够不同,它将被传递以与第三种模式进行比较。
因此,您可能会看到,实际上不可能制作“完美样本”,因为决策过程中存在许多非线性——对于其中一个弱分类器而言,“完美样本”可能对大多数其他分类器来说是一个糟糕的样本,这意味着总体而言,它不会成为一张好脸。映射重要组件的问题相同,但是您可以通过在第一(或最后)阶段选择最重要(即权重最高)的弱分类器,然后绘制这些过滤器使用的过滤器来到达某个地方阶段。
您可以尝试的另一种方法是我在一个艺术项目中看到的,但遗憾的是找不到链接。一位艺术家生成了形状的随机组合,并观察了它们触发面部检测器的效果。他会随机添加更多形状,并保留在触发面部检测方面做得更好的形状配置。通过这种爬山策略,他能够生成算法看起来像人脸的图像。可以说,这种方法的一个更细微的版本——在刺激空间中寻找被归类为面孔的事物——可能有助于找到一个“完美的样本”。
希望这有帮助,祝你好运!