0

所以,我有 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

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

我已经用完了更改文件路径或进行任何修改以使其工作的方法!

4

2 回答 2

4

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

bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)

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

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

于 2015-12-04T08:28:40.710 回答
-1

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

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

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

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

于 2015-12-07T21:21:36.870 回答