一文解决OpenCV训练分类器制作xml文档的所有问题
一 前言关于训练分类器制作XML文档时需要的两个exe应用程序的解释。 opencv_createsamples :用来准备训练用的正样本数据和测试数据。opencv_createsamples 能够生成能被opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。 二 训练整个过程分为两步:
opencv_traincascade.exe -data data -vec D:/Opencv/build/x64/vc12/bin/a.vec -bg H:/negdata/bg.txt –numPos 10 –numNeg 100 -numStages 4 -w 32 -h 32 -featureType HAAR -precalcValBufSize 1 -precalcIdxBufSize 1
三 opencv_traincascade.exe用到的参数及解释一、训练时存储在变量中的参数(9个参数)
二、存储在参数类中的参数() 1、存储CvCascadeParams的对象中的参数(4个参数)
2、存储在CvCascadeBoostParams的对象中的参数(6个参数)
四 遇到问题一: 在用opencv_traincascade训练分类器的时候,遇到了报错如下: 看下面cascadeclassifier.cpp的源代码: for( int i = startNumStages; i < numStages; i++ )
{
cout << endl << "===== TRAINING " << i << "-stage =====" << endl;
cout << "<BEGIN" << endl;
if ( !updateTrainingSet( tempLeafFARate ) )
{
cout << "Train dataset for temp stage can not be filled. "
"Branch training terminated." << endl;
break;
}
...
bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)
{
int64 posConsumed = 0,negConsumed = 0;
imgReader.restart();
int posCount = fillPassedSamples( 0,numPos,true,posConsumed );
if( !posCount )
return false;
cout << "POS count : consumed " << posCount << " : " << (int)posConsumed << endl;
int proNumNeg = cvRound( ( ((double)numNeg) * ((double)posCount) ) / numPos ); // apply only a fraction of negative samples. double is required since overflow is possible
int negCount = fillPassedSamples( posCount,proNumNeg,false,negConsumed );
if ( !negCount )
return false;
curNumSamples = posCount + negCount;
acceptanceRatio = negConsumed == 0 ? 0 : ( (double)negCount/(double)(int64)negConsumed );
cout << "NEG count : acceptanceRatio " << negCount << " : " << acceptanceRatio << endl;
return true;
}
1)负样本描述文件neg.txt不能带路径名,即 : -bg neg.txt 是合法的, -bg negdata/neg.txt是非法的。所以必须把neg.txt文件跟exe文件放在同一个目录下 五 遇到问题二: 在用opencv_traincascade训练分类器的时候,遇到了报错如下: 正样本数量必须大于10,需要重新创建数据集并重新试验。 N 为训练层数 六 遇到问题三: 1.如果出现 Parameters can not be written,because file traincascade/params.xml can not be opened 错误,则自己需要手动创建一个文件夹 traincascade; 七 参考文献:1.http://www.52php.cn/article/p-suydzhdb-qn.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |