训练级联分类器检测一篇论文



我正在尝试训练一个级联分类器来检测窗户(真正的房子窗户)上的纸(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 - nsplitting 2 -minHitRate 0.995 -maxFalseAlarmRate 0.9 -numPos 890 -numNeg 890 -w 62 -h 80(底片分辨率为150 × 150像素)

所以我得到了比普通纸更好的结果。我尝试将一些阳性样本(由opencv_createssamples生成)输入到级联分类器中,它以高精度检测纸张(打印的Android)。当我输入一个真实的图像(带有Android论文的窗口的图片)时,问题发生了,分类器根本没有检测到论文。

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

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

你们有什么建议吗?你觉得我还能做什么?我在考虑用更复杂的模式重新训练系统,这会有帮助吗?我只是需要一些意见,因为我已经训练了我的分类器3周,尝试了50多次不同的参数和图像大小。我只是累了,不知道该怎么办了。

在训练时记住以下几点,你应该会取得好的效果-

  1. 只指定不能缺少的参数,例如

    -numPos
    -numNeg

    使用默认值作为其他参数,如

    -minHitRate
    -maxFalseAlarmRate
    -weightTrimRate
    maxdepth
    -maxWeakCount

    一旦您成功地生成了一个分类器,您就可以使用其他值了。

  2. 获得大量的原始正样本和负样本,而不是使用opencv_createsamples从少量样本中创建它们,因为使用相同的样本一次又一次地训练分类器并不能提高其准确性。还要注意,-numPos不是中存在的阳性样本的总数。vec 文件。相反,它是要输入到分类器训练的每个阶段的正样本的数量,所以这个数字应该略小于正样本的总数,

  3. 级联分类器的特点是使用一系列弱分类器,以便在较低的计算成本下提供良好的分类。因此,通过足够数量的阶段来训练分类器是非常重要的,否则,它将无法工作。

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

    -precalcValBufSize
    -precalcIdxBufSize

    因此,如果您有1GB空闲内存,您可以将其分成两部分。请记住,您不应该消耗所有的空闲内存,否则您的系统可能会遇到故障,或者由于内存不足而过早地终止训练。

进一步阅读:如何正确训练级联

最新更新