训练级联分类器以检测论文

时间:2015-10-27 18:16:18

标签: opencv object detection cascade

我正在尝试训练级联分类器来检测窗口(实际房屋窗户)上的纸张(8.5" x11")。基本上,我试图根据纸张测量窗户的宽度和高度。一旦我检测到纸张,我就可以通过简单的比率计算获得窗口的宽度和高度(因为纸张是固定尺寸的)

我尝试使用普通纸而没有运气。它可以检测纸张,但也可以检测一些随机物体。它不太可靠,训练只花了31分钟。从15张不同的纸张图片(裁剪的)生成阳性样本。负样本是300x300窗口图像。 参数:-numStages 1 -nsplits 2 -minHitRate 0.995 -maxFalseAlarmRate 0.9 -numPos 400 -numNeg 400 -w 62 -h 80

现在我正在尝试检测相同的纸张尺寸,但上面印有打印的物体(以提供一些图案)。基本上,我打印了一个很大的Android徽标,并尝试训练级联分类器来检测它。这是我的参数: -numStages 1 -nsplits 2 -minHitRate 0.995 -maxFalseAlarmRate 0.9 -numPos 890 -numNeg 890 -w 62 -h 80 (负像的分辨率为150x150像素)

所以我得到的结果比普通纸好。我试图将一些正样本(由opencv_createsamples生成)输入到级联分类器中,并且它以高精度检测纸张(打印的Android)。当我输入真实图像(带有Android纸张的窗口图片)时,问题就出现了,分类器根本没有检测到纸张。

请注意,当我输入真实图像时,我将其调整为150x150,因此要检测的对象(纸张)变得更小(约31x40),我尝试将最小尺寸参数(在detectMultiScale中)设置为31x40。

此外,当我尝试增加阶段数时,它会给我一个所需的叶子误报率'错误无论我多少尝试-minHitRate和-MaxFalseAlarmRate参数。即使将这两个参数设置为非常低的值(分别为0.3和0.3)。

你们有什么建议吗?你还应该怎么想我尝试?我想用更复杂的模式重新训练系统,这会有帮助吗?我只需要一些意见,因为我已经训练了我的分类器3周,尝试不同的参数和图像大小超过50倍。我只是厌倦了,没有想法尝试......

提前致谢。

1 个答案:

答案 0 :(得分:2)

在训练时要牢记以下几点,你应该取得好成绩 -

  1. 仅指定您无法执行的参数,例如

      

    -numPos
      -numNeg

    默认值用于其他参数,例如

      

    -minHitRate
      -maxFalseAlarmRate
      -weightTrimRate
      -maxdepth
      -maxWeakCount

    成功生成分类器后,您可以使用其他值。

  2. 获取大量原始阳性样本和阴性样本,而不是使用 opencv_createsamples 从少量样本中创建它们,因为再次使用相同样本训练分类器并且不再增加它的准确性。另请注意,-numPos不是 .vec 文件中存在的阳性样本总数。相反,它是分类器训练的每个阶段的正数样本的数量,因此这个数字应该比正样本的总数少一些,

  3. 级联分类器的特性是它们使用一系列弱分类器,以便以低计算成本提供良好的分类。因此,通过足够多的阶段训练你的分类器是非常重要的,否则就行不了。

  4. 检查系统上的可用内存量(RAM)并相应地指定以下参数 -

      

    -precalcValBufSize
      -precalcIdxBufSize

    因此,如果您有 1GB 的可用内存,则可以将其拆分为两半。请记住,您不应该消耗所有可用内存,否则您的系统可能会遇到故障,或者由于内存不足而导致培训过早终止。

  5. 进一步阅读: How to train cascade properly