【问题标题】:Opencv traincascade cannot fill temp stageOpencv traincascade 无法填充临时阶段
【发布时间】:2015-12-03 21:29:35
【问题描述】:

所以,我有 20 个正样本和 500 个负样本。我使用 createsample 实用程序创建了 .vec 文件。现在,当我尝试使用 traincascade.exe 实用程序训练分类器时,遇到以下错误:

我研究了许多解决方案,提供给面临类似问题的人,但没有一个奏效。

我尝试过的事情:1. 增加负样本大小 2. 检查存储在 Negative.txt 文件中的负(或背景图像)的路径 3. 改变不同的参数。

以下是有关路径的一些信息: 我的工作目录有以下文件: 1. Traincascade.exe 2. 正图像文件夹 3. NegativeImageFolder 4. vec 文件 5. Negative.txt(在负片文件夹)

我的 Negative.txt 文件具有负图像文件夹中图像的绝对文件路径。我还尝试将文件路径更改为以下格式:

NegativeImageFolder\Image1.pgm

但是没有用!我也尝试了正斜杠和反斜杠!

我已经没有办法更改文件路径或进行任何修改以使其正常工作!

【问题讨论】:

    标签: opencv opencv3.0 stage training-data cascade-classifier


    【解决方案1】:

    首先:NumStages 1 和 maxDepth 1 是故意的吗?
    查看Opencv的源码(cascadeclassifier.cpp,imagestorage.cpp),在函数中抛出错误

    bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)
    

    无法填充负样本数 negCount=500。
    以前,阳性样本一切正常(屏幕上打印的关于 pos 计数的行就是证明)。
    当 imgReader.getNeg(img) 返回 false 时,无法填充源代码 negCount,这意味着它无法提供任何图像,而当源底片列表为空时,就会发生这种情况。 因此,您必须将所有精力集中在为算法提供正确的负图像列表的方向上。
    有两种方法可以解决这个问题:确保读取 Negative.txt 并且所有路径都正常,并且列表中的每个图像都可以正常读取。
    文件名是“Negative.txt”还是“Negatives.txt”?

    无论如何,如果正负样本如此之少,您将无法训练任何功能,只有让您了解训练过程的工作原理才有用。

    【讨论】:

    • 感谢您的回复!关于阶段的数量,我最初从 10 个阶段开始。那没有用。我刚开始尝试为 -numStages 尝试不同的值,看看它是否会产生任何影响,因为我无法弄清楚究竟是什么导致了错误。使用默认的 maxDepth 值。
    • 它是 Negatives.txt。我进一步减少了负面图像的数量,并查看了每张图像的路径。我仍然遇到同样的错误。我只对负样本使用较少的计数,因为我认为它会更容易调试并且可以帮助我更好地理解训练过程。
    • 负片的尺寸(宽x高)是多少?所有文件都是 .pgms 吗?如果是,请尝试放置至少一个 png。
    • 尺寸真的很重要吗?我认为拥有较大的图像尺寸会减慢训练过程。但是它应该还是可以训练的吧?目前,我的图像尺寸很大(1920x1080)。也尝试使用较小的图像,我得到了同样的错误。
    • 我认为错误是微不足道的,只是想弄清楚它是什么。一个常见的错误是拍摄与窗口大小一样小的负片图像。 60x30 在 ypur 情况下。
    【解决方案2】:

    好吧,我能够解决问题并成功运行分类器。但是,我不能 100% 确定我所做的更改有何帮助。

    这就是我所做的: 我正在使用 Excel 生成 Negative.txt 文件。我将输入一个图像的文件路径并增加图像文件名(因为我的图像名称为 image1、image2、image3...)。所以前面提到的格式是:

    C:\OpenCV-3.0.0\opencv\build\x64\vc12\bin\Negative\Image1.pgm

    最后将文件保存为 Unicode txt 文档。但是,将其保存为 unicode txt 文档给了我问题中所述的错误。我将它保存为文本(制表符分隔)文件,它可以工作。

    【讨论】:

    • 希望我提供的建议能帮助您找到正确的方向(负面文本文件)。无论如何,Opencv 不支持 Unicode。 code.opencv.org/issues/3235
    • 是的,确实有帮助 :) 非常感谢!
    • 哦,我做到了,但我想我需要至少 15 的声誉才能公开展示我的选票。 :) 这是我在 stackoverflow 上的第一篇文章!
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 2016-07-05
    • 2014-10-18
    • 1970-01-01
    • 2015-05-12
    • 2016-09-26
    • 2013-06-07
    • 2014-12-04
    相关资源
    最近更新 更多