一文解决OpenCV训练分类器制作xml文档的所有问题
来源:互联网 发布:5g网络什么时候上市 编辑:程序博客网 时间:2024/06/05 06:17
一 前言
关于训练分类器制作XML文档时需要的两个exe应用程序的解释。
opencv_createsamples :用来准备训练用的正样本数据和测试数据。opencv_createsamples 能够生成能被opencv_haartraining 和 opencv_traincascade 程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。
opencv_traincascade :支持 Haar和 LBP(Local Binary Patterns) 两种特征,并易于增加其他的特征。opencv_haartraining 是一个将被弃用的程序(Opencv3.0版本中没有)。opencv_traincascade 可以旧格式导出选练好的级联分类器。
二 训练
整个过程分为两步:
创建样本
样本的创建见参考文献1训练分类器
命令:
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训练分类器的时候,遇到了报错如下:
Train dataset for temp stage can not be filled. Branch training terminated.
看下面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文件放在同一个目录下
2)当切换了操作系统时,会因为txt文件的格式问题而导致了负样本读取失败。比如:在windows操作系统下生出了neg.txt,但是在ubuntu下进行训练,这样就会导致错误,这是因为windows下txt文件换行符’\r’在ubuntu下无法识别
五 遇到问题二:
在用opencv_traincascade训练分类器的时候,遇到了报错如下:
“Cascade classifier can’t be trained. Check the used training parameters.”
正样本数量必须大于10,需要重新创建数据集并重新试验。
N 为训练层数
HR 击中率,
FA 虚警,只有当每一层训练的FA低于你的命令中声明的maxfalsealarm数值才会进入下一层训练
六 遇到问题三:
1.如果出现 Parameters can not be written, because file traincascade/params.xml can not be opened 错误,则自己需要手动创建一个文件夹 traincascade;
2.如果出现如下问题.
Traincascade Error:Bad argument(Can not get new positive sample.The most possible reason is insufficient count of samples in given vec-file.
记得一定要numPos小于vec_file文件里面的数 一般numPos为0.9*num_in_vec或者为0.8*num_in_vec
七 参考文献:
1.http://blog.csdn.net/kevin_ut/article/details/5838389
2.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html#id9
3.http://answers.opencv.org/question/16868/error-in-train-casacde/
4.http://blog.csdn.net/xidianzhimeng/article/details/10470839
- 一文解决OpenCV训练分类器制作xml文档的所有问题
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- OpenCV训练分类器制作xml文档
- arm linux 挂载initramfs根文件系统
- T-SQL查询进阶--详解公用表表达式(CTE)
- iOS 中的 Attribute - 富文本文字
- Action Pascal(A语言)v3.0官方版
- AndroidStudio修改debug为真实签名
- 一文解决OpenCV训练分类器制作xml文档的所有问题
- 湖南14年省赛 H - Happy Robot dp
- keyStore和trustStore
- 【转】JNI官方规范中文版
- 画小圆型
- 28个超经典社会心理学现象
- 使用curl undeploy project (tomcat下)
- C/C++中static关键字作用总结(转)
- 课时37|String 对象的创建和使用