自定义级联分类器缺乏检测频率

时间:2014-01-20 05:51:23

标签: opencv computer-vision haar-classifier

为了开发能够实时检测特定手部位置(或手部符号)的应用程序,我和我的团队在几个月前偶然发现了haar分类。我们认为这将是这项工作的理想工具。然而,在尝试创建自己的分类器时,我们遇到了困难(我们正在使用OpenCV)。它们在很大程度上没有捕获感兴趣的物体(见下面的第二个问题)。

我对这个问题有两个问题:

  1. 我们已经搜索了许多资源(目前我已经开放了一百万个和一个标签),但似乎没有必要的方法来训练你自己的分类器。 有哪些指针对于创建精确的分类器非常有用,同时允许灵活性(考虑性别差异,重量,手上的戒指等)?
    • 我们尝试过使用大量的正数(1000)和负数(3000)。
    • 我们使用了各种照明条件,来自不同个体的手,手的角度略有不同。
    • 我们改变了级联的阶段数
  2. 我知道haar分类器检测使用由训练过程创建的阈值进行“类似haar”的特征检测。由于训练过程创建了阈值,我的想法是,在训练中使用的正图像上运行分类器将始终检测我们在正样本中使用的图像。我尝试这样做,发现事实并非如此,只有5.8%的正面图像被发现包含图像。 我错误地认为理论上,我的正面图像的~100%应该由他们训练的分类器检测到?或者培训过程出错了?
  3. 我们发现非常有用的一些消息来源是:

    当然还有opencv级联培训页面。

    我感谢你对此事的任何帮助。 非常感谢!

1 个答案:

答案 0 :(得分:0)

首先是一个问题。您试图检测到的手势中有多少面内旋转?级联检测器不是旋转不变的。这意味着如果您的手势可以向左或向右倾斜超过大约10度,您将无法检测到它们。唯一的解决方案是旋转图像并再次尝试检测。

现在有些指示:

  • 1000个阳性样本数不是很多。对于检测手势,如果不是更多,您可能需要至少10倍。
  • 检查探测器的最小和最大窗口大小。确保符合图像中指针的大小。
  • 尝试更大的窗口尺寸。
  • 尝试其他功能。除了Haar之外,OpenCV还允许您使用LBP和HOG。我猜想HOG可能对这个问题有好处,而且训练的时间也少得多。

编辑: opencv_traincascade,取代haartraining支持HOG功能。或者,在Matlab的计算机视觉系统工具箱中有一个trainCascadeObjectDetector函数可以执行相同的操作并为您提供更好的界面。在一些基准测试中,LBP的准确度略低于哈尔,但是训练速度要快得多,并且记忆力也要少得多。

如果您在方向上有很多变化,那么您肯定需要更多数据。您还需要了解可能的旋转范围。你的标志可以颠倒吗?它们可以旋转90度吗?如果您的范围是30度,也许您可​​以尝试3次旋转图像,或者为每个标志训练3个不同的探测器。

此外,如果您使用Haar功能,您可以从启用45度功能中受益。我认为他们默认是关闭的。