错误"无法填充临时阶段的训练数据集".同时使用OpenCV的traincascade工具

Shi*_*shi 9 opencv

我从源代码(OpenCV的2.4.0)使用Windows 7.我想训练LBP分类VS2010建设opencv_traincascade.exe工具,所以我用opencv_traincascade.exe以以下的参数

-data d:\的OpenCV \量词\ lbpclassifier1\TEMP \数据-vec d:\的OpenCV \量词\ lbpclassifier1\TEMP\samples.vec -bg d:\的OpenCV \量词\ lbpclassifier1\TEMP \负\ infofile.txt -numPos 40 -numNeg 40 -precalcIdxBufSize 500 -precalcValBufSize 500 -stageType BOOST -featureType LBP -w 24 -h 24

我得到的错误消息是:

PARAMETERS:
cascadeDirName: D:\OpenCV\Classifiers\lbpclassifier1\temp\data
vecFileName: D:\OpenCV\Classifiers\lbpclassifier1\temp\samples.vec
bgFileName: D:\OpenCV\Classifiers\lbpclassifier1\temp\negative\infofile.txt
numPos: 2
numNeg: 40
numStages: 20
precalcValBufSize[Mb] : 500
precalcIdxBufSize[Mb] : 500
stageType: BOOST
featureType: LBP
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   2 : 2
Train dataset for temp stage can not be filled. Branch training terminated.
Run Code Online (Sandbox Code Playgroud)

之前已经问过这个问题:使用opencv_train级联时出错 ,并且解决方案建议在那里.在这种情况下,使正样本和负样本的数量相等无济于事.

我认为错误可能与此有关的bug:http://code.opencv.org/issues/1834 所以,我下载imagestorage.cpp的最新版本从该页面和重建opencv_traincascades工具.此外,.vec文件中的样本总数为45.因此,在此注释中建议我将numPos参数更改为2,这样我就不会用完.vec文件中的样本..vec文件中的样本数为45.

任何帮助深表感谢.谢谢.

eto*_*pov 9

首先,对我来说,错误与bg文件有关.我使用Opencv 2.4.10.1.

当我在命令中指定bg文件的绝对路径时(例如帖子的作者),我收到了错误.看起来作者在弄清楚完整的负面图像路径时做了一件非常非常糟糕的工作.一个简单的解决方法是简单地将CD转换为.info文件的目录(注意-bg infofile.txt)

cd D:\OpenCV\Classifiers\lbpclassifier1\temp\negative
train_cascade -data D:\OpenCV\Classifiers\lbpclassifier1\temp\data -vec D:\OpenCV\Classifiers\lbpclassifier1\temp\samples.vec -bg infofile.txt -numPos 40 -numNeg 40 -precalcIdxBufSize 500 -precalcValBufSize 500 -stageType BOOST -featureType LBP -w 24 -h 24
Run Code Online (Sandbox Code Playgroud)


Hir*_*iro 8

我也在学习如何使用OpenCV对象检测工具.

我注意到,如果bg文件(在您的情况下为"D:\ OpenCV\Classifiers\lbpclassifier1\temp \negative\infofile.txt")格式错误或包含不存在文件的条目,opencv_traincascade会产生错误.

希望能帮助到你.


xee*_*eed 4

我希望结束这个问题。对于那些也被这个问题绊倒的人。我知道它很旧。我调试了 traincascade 并发现,在某些时候出现以下行:

src = imread( imgFilenames[last++], CV_LOAD_IMAGE_GRAYSCALE );
Run Code Online (Sandbox Code Playgroud)

返回一个空垫。该行应该读取背景图像。

如果您构建 traincascade.cpp 作为调试并使用 opencv 的发布库和 dll,则会出现此错误。(反之亦然。