因此,我有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
但没有工作!我也尝试了正面和反斜杠!
我已经没有办法改变文件路径或进行任何修改以使其工作!
答案 0 :(得分:4)
首先: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”?
无论如何,只有极少的正面和负面样本你都不会训练任何功能,只有让你了解训练过程是如何运作的。
答案 1 :(得分:-1)
我能够解决问题并成功运行训练分类器。但是,我并不是100%确定我所做的改变是如何帮助的。
这就是我所做的: 我使用Excel生成Negative.txt文件。我会输入一个图像的文件路径并增加图像文件名(因为我的图像是名称image1,image2,image3 ......)。所以前面提到的格式是:
C:\的OpenCV-3.0.0 \的OpenCV \构建\ 64 \ VC12 \ BIN \负\ Image1.pgm
最后将文件保存为Unicode txt文档。但是,将其保存为unicode txt文档会给我提出问题中所述的错误。我把它保存为文本(制表符分隔)文件并且有效。