第一步:在win7的命令框输入cmd,进入dos命令窗口

Python openc训练结果评估 opencv训练样本_宽高

第二步:新建一个文件夹trainXML用于存放所需的样本和程序;在trainXML文件夹下创建文件夹pos用于存放正样本的人脸图片、文件夹neg用于存放负样本的图片、xml用于存放训练的模型;将opencv中的opencv_createsamples.exe、opencv_traincascade.exe和opencv_world341.dll放入trainXML文件夹下备用。

Python openc训练结果评估 opencv训练样本_滑动窗口_02

第三步:正样本的尺寸不能设置太大,否则容易内存泄漏,一般为20*20、30*30、50*50大小;将调整好大小的人脸样本放入pos文件夹中。

Python openc训练结果评估 opencv训练样本_宽高_03

第四步:负样本的尺寸必须要大于正样本的6倍及以上;因为首先我们要知道训练程序中写的numNeg参数表示每级训练用到的负样本数,本人把它设置为1500。其实这个numNeg的大小和原始负样本数量没有任何关联, 因为numNeg是通过滑动窗口在原始负样本上不断滑动采集,得到的预处理负样本图像的数量(滑动窗口的大小就是正样本的大小,这里是50*50);

负样本的尺寸如果不够大,或者和正样本一样大,滑动窗口就无法在原始负样本上滑动来采集足够多的训练图像,再加上如果收集到的原始负样本的数量可能并不比正样本多多少,也许就是3、4倍。这样的话就会导致( 执行opencv_traincascade训练程序过程中中断 )的错误,同时会报(Train dataset for temp stage can not be filled. Branch training terminated。)这时我们发现训练图中的FA( FalseAlarm,虚警率 )为0,表示负样本已全部被正确分类了,也就不会有负样本继续参与下一轮的训练了,所以就退出了。所以在准备原始负样本的时候一定要保证尺寸足够大,同时包含的内容足够复杂。

第五步:生成正样本的路径文件pos.txt。

在DOS窗口中输入命令cd G:\img\trainXML\pos 和G:进入pos文件夹,再输入命令dir /b >pos.txt生成路径文件;用Notepad打开路径文件并删除最后一行的

Python openc训练结果评估 opencv训练样本_xml_04

 ,再用Notepad的模块编辑将路径文件批量修改为如下格式:

Python openc训练结果评估 opencv训练样本_宽高_05

注:1 :该样本数目为1;0 0 :表示样本起始坐标;50 50 : 表示样本宽高

第六步:生成负样本的路径文件neg.txt。

在Dos窗口中输入命令cd G:\img\trainXML\neg 和G:进入neg文件夹,再输入命令dir /b >neg.txt生成路径文件;

同样的,用Notepad打开文件并删除最后一行的

Python openc训练结果评估 opencv训练样本_Python openc训练结果评估_06

 ,再用Notepad的模块编辑将路径文件批量修改为如下格式:

Python openc训练结果评估 opencv训练样本_xml_07

将pos.txt和neg.txt都复制到文件夹trainXML下

第七步:获取供训练的vec文件

新建文本文件并将以下指令输入:

opencv_createsamples.exe -vec pos.vec -info pos.txt -num 188 -bg neg.txt -w 50 -h 50 pause

 然后将文件保存为vec.bat,然后双击该文件生成pos.vec文件;

注:

-vec : 输出生成的文件路径

-info : 正样本的路径txt文件

-num : 正样本的数量

-w -h : 样本宽高

 第八步:训练

将以下指令输入,编写train.bat文件;

opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 188 -numNeg 600 -numStages 20 -w 50 -h 50 -minHitRate 0.9999 -precalcValBufSize 1024 -maxFalseAlarmRate 0.5 -mode ALL

 注:

-data : 存放xml文件的目录

-vec : 正样本vec文件源

-bg : 负样本路径txt文件

-numPos : 正样本数量

-numNeg : 负样本数量

numStages:训练分类器的级数

-w -h : 样本宽高

-minHitRate :分类器的每一级希望得到最小检测率(即正样本被判断有效的比例)

-maxFalseAlarmRate:分类器的每一级希望的最大误检率(负样本判定为正样本的概率)

-mode: 选择训练中使用的Haar特征类型。BASIC只使用右上特征,ALL使用所有右上特征及45度旋转特征

 

双击train.bat开始训练。

参考文献:https://www.jianshu.com/p/0afa9712c6d5

https://www.jianshu.com/p/e35260f7cbf0?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation