[捉虫记录]关于Cascade Training Error的bug
来源:互联网 发布:淘宝swot分析表格 编辑:程序博客网 时间:2024/05/06 20:27
Jeremy
opencv_traincascade.exe -data data -vec diode\pos.vec -bg nodiode\neg.dat -numPos 600 -numNeg 600 -numStages 15 -w 22 -h 52 -minHitRate 0.995 -maxFalseAlarmRate 0.5 pause
Note:如果上面的参数名称写错了,程序会自动忽略,并取默认数值.
在应用opencv_traincascade.exe对图片进行训练的过程中碰到很多问题,现一一记录如下:
[bug1]: Train dataset for temp stage can not filled. Branch training terminated.
首先我们来看这个错误时从哪里出来的,从源代码[cascadeclassifier.cpp]中我们可以看到:
for( int i = startNumStages; i < numStages; i++ ) { cout << endl << "===== TRAINING " << i << "-stage =====" << endl; cout << "<BEGIN" << endl; if ( !updateTrainingSet( requiredLeafFARate, tempLeafFARate ) ) { cout << "Train dataset for temp stage can not be filled. " "Branch training terminated." << endl; break; } if( tempLeafFARate <= requiredLeafFARate ) { cout << "Required leaf false alarm rate achieved. " "Branch training terminated." << endl; break; } CvCascadeBoost* tempStage = new CvCascadeBoost; bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator, curNumSamples, _precalcValBufSize, _precalcIdxBufSize, *((CvCascadeBoostParams*)stageParams) ); cout << "END>" << endl;
可以知道,是在函数updateTrainingSet()中出了问题,我们接下来进去看看:
bool CvCascadeClassifier::updateTrainingSet( double minimumAcceptanceRatio, double& acceptanceRatio){ int64 posConsumed = 0, negConsumed = 0; imgReader.restart(); int posCount = fillPassedSamples( 0, numPos, true, 0, 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, minimumAcceptanceRatio, 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;}
我们的错误输出是在"POS count……"之后,“NEG count”之前,这样……问题就是negCount=false,也即fillPassedSamples()函数出错了
后来我把numPos变大为1500,numNeg变大为1200。因为每次stage的迭代过程中会只更换“1%”左右的样本。
0 0
- [捉虫记录]关于Cascade Training Error的bug
- 关于Xshell命令的bug记录
- Cascade Classifier Training
- Cascade Classifier Training
- 记录我的bug,关于setVisibility()出现的奇怪问题
- 记录我发现的第一个关于 Google 的 Bug
- 关于Apple Mach -O Linker Error的bug解决
- 关于iOS默认中文输入法乱码的Bug解决记录
- 关于edittext焦点消失的一个bug记录
- 记录偶的bug
- 偶现bug的记录
- 修改的bug记录
- spring的bug记录
- 关于PAC Fetch failed with cached error 错误的记录
- 第五十二篇:Cascade Classifier Training详解
- 记录一个bug的解法
- 记录最近的几个bug
- android奇怪的bug记录
- Ted has a new house
- IOS国际化
- 【已解决】Linux下root权限强制踢掉其他用户
- Using Apple’s vDSP/Accelerate FFT
- C语言指针使用小结
- [捉虫记录]关于Cascade Training Error的bug
- Yii2 ArrayHelper
- Hibernate 4.3 开发问题详解
- javafx登录demo透明效果
- ndk开发的一些小笔记http://120.26.81.9/bin/flash.bin
- Hash表
- windows下把本地代码同步到github上
- ubuntu14搭建网上邻居
- git使用