最近一直在做adaboost的检测 收集了样本用自带的createsample 和haartraining自己训练样本。其中遇到了许多问题,还好最终都解决了,写下来,希望对大家有帮助。
1.首先收集正负样本
分别建立两个文件夹pos和neg存放正负样本
2.然后建立样本描述,在命令窗打开样本所在位置
再cd进pos正样本文件夹 输入 dir /b>pos.txt 就建立了一个正样本描述,可以在pos文件夹中找到名字为pos.txt的文件,打开该文件
将文件中所有图片的后缀jpg改为jpg 1 0 0 20 20。(1表示正样本,0 0 表示起始位置,20 20表示样本大小)然后删去最后一行不属于图片的信息。
至此正样本描述完成。
同样,cd到neg中做负样本描述,不过不用修改后缀,也就是不用统一大小,只需将neg.txt中最后一行删掉即可。
3.然后建立vec文件。
有人说在创建vec文件时 需要将pos.txt和neg.txt剪切到上一级文件夹,不过我在做的时候并没有这样,在输入的时候带上路径应该也是一样的如:
opencv_createsamples.exe -vec pos.vec -info pos/pos.txt -bg neg/neg.txt -w 20 -h 20 -num 80
参数都很简单 应该一看就明白,不明白的可以再百度。敲完之后就会出现一个pos.vec文件,这是下一步进行训练的基础。
4.使用opencv_haartraining.exe训练样本
在命令提示窗敲入:
opencv_haartraining.exe -data xml -vec pos.vec -bg neg\neg.txt -npos 80 -nneg 100 -w 20 -h 20
这里输入比较简单,相关参数没有输入都采取了默认的。其他参数可以百度。
默认的训练sntages是14层,由于样本选取不大,很快会训练完毕。训练完后会在当前文件夹下出现一个xml.xml的文件 这个就是训练出来的.xml的文件。
5.相关问题:
死循环:训练过程中,可能会在某一层一直停滞不前,后来我层用2000正样本的训练。在某一层一直卡了近一个星期,以为就是慢,实际上是负样本数量不足。
这时,需要ctrl+c停下训练,往负样本中添加图片,然后重新做样本描述,接着之前继续训练,不用担心会从头训练,因为之前训练好的每一层都已经建好了文件夹, 再训练时就直接load这些文件,直接过了前面训练过的了。
unable to read negitiveimages error 2432: 这个问题也纠结了我好久,其实非常简单,就是上面说的路径问题。一般是在pos和neg上一层文件夹做训练,当敲-bg neg.txt的 时候就需要敲入neg/neg.txt,这样就能读取负样本了。
还有一个error 1859的问题,我搜寻答案许久之后,应该是个正负样本比例问题,网上有说7:3 也有1:3的。我也没有准确答案。