怎样使用opencv进行Haartraining样本训练

来源:互联网 发布:python shelve 编辑:程序博客网 时间:2024/04/28 22:16

原创,转载请注明出处。


1.正样本,负样本

---为了效率就不自己采集了。选用MIT人脸库,正样本2706个,负样本4381个


2.创建正样本的描述文件。

2.1创建批处理create_filename.bat:

@echo   off
dir/s/b   *.*>filename.txt
    pause 
    exit


2.2创建批处理pos_vec.bat,添加每张图像的参数信息:

@echo off
set c= 1 0 0 20 20
for /f "tokens=* delims= " %%i in  (pos.txt) do echo %%i%c%>>"pos5.txt"
pause


2.3创建批处理opencv_createsamples.bat,以vec格式保存正样本的样本描述符:

@echo off
D:\OpenCV\FaceDetect\MITface\MITface
opencv_createsamples.exe -info pos5.txt -vec pos.vec -w 20 -h 20 -num 2706
pause



3.分类器训练

创建批处理文件flq_create_classify_new.bat

D:\OpenCV\FaceDetect\MITface\MITface
opencv_haartraining.exe -data d:\OpenCV\FaceDetect\MITface\MITface  -vec D:\OpenCV\FaceDetect\MITface\MITface\pos.vec  -bg D:\OpenCV\FaceDetect\MITface\MITface\nonfaces\neg_pure_all.txt  -npos1000  -nneg 2000 -nsplits 2   -mem 512   -nonsym  -w 20  -h 20
pause

开始进行分类



4.可能出现的问题:

4.1.分类器训练时找不到负样本

原因及解决办法:

原因是找不到bg

负样本描述符路径为:D:\OpenCV\FaceDetect\MITface\MITface\nonfaces\neg_pure_all.txt

负样本格式为

002549.bmp
002831.bmp
003621.bmp
004901.bmp
006151.bmp

即可解决


4.2.样本训练中出现如下错误:

OpenCV Error: Assertion failed (elements_read == 1) in icvGetHaarTraininDataFrom VecCallback, 

原因及解决办法:

npos与nneg 设置过大导致。

-npos的意思是每次训练从.vec文件中随机选取npos个正样本。由于存在虚警,在每一次训练一个强分类器之后,会把那些分类错误的从整个样本库中剔除掉,总的样本就剩下 CountVec = CountVec - (1 - minhitrate)* npos,在第二个强分类器的训练过程中就是从剩下的Countvec抽样,一直这样进行nstage次,所以就有CountVec >= (npos + (nstages - 1)*(1 -minhitrate) * npos ) + nneg 。当把npos设置与vec中总样本数相同时,第二个强分类器训练时,必然就会报错,提示样本数不足。故将npos和nneg都减少,改成1000和2000即可。


阅读全文
1 0
原创粉丝点击