Haarcascade训练说明手册.doc
文本预览下载声明
一、Adaboost训练
OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade?是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是?opencv_traincascade?支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。
opencv_traincascade?and?opencv_haartraining?所输出的分类器文件格式并不相同。注意,新的级联检测接口(参考?objdetect?模块中的?CascadeClassifier?类)支持这两种格式。?opencv_traincascade?可以旧格式导出训练好的级联分类器。但是在训练过程被中断后再重启训练过程,?opencv_traincascade? and?opencv_haartraining?不能装载与中断前不同的文件格式。
opencv_traincascade?程序使用TBB来处理多线程。如果希望使用多核并行运算加速,请使用TBB来编译OpenCV。还有一些与训练相关的辅助程序。
opencv_createsamples?用来准备训练用的正样本数据和测试数据。?opencv_createsamples?能够生成能被?opencv_haartraining?和?opencv_traincascade?程序支持的正样本数据。它的输出为以 *.vec 为扩展名的文件,该文件以二进制方式存储图像。
opencv_performance?可以用来评估分类器的质量。它读入一组标注好的图像,运行分类器并报告性能,如检测到物体的数目,漏检的数目,误检的数目,以及其他信息。
/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html
/delltdk/article/details/9186875
1 建立样本集pos和neg
pos中存放正样本的图像,可以是一张图像或多张图像。neg中存放包含负样本的图像,可以是任意图像,但是这些图像中不能包含待检测的物体。
注意:
一般需要一个很大的负样本库送给训练程序进行训练。如果是绝对刚性的物体,如OpenCV的标志,只有一张正样本图像,那么可以通过对物体图像的随机旋转、改变标志亮度以及将标志放在任意的背景上而获得大量的正样本;如果是人脸,需要几百甚至几千个正样本。在待检测物体是人脸的情况下,需要考虑所有的人种、年龄、表情甚至胡子的样式。
2 生成正\负样本描述文件negdata.txt
(1)???负样本描述文件negdata.txt
在命令行窗口输入“cd d:\%....%\pos”路径切换到neg文件夹下,输入“dir/bnegdata.txt”就会在neg文件夹下生成描述文件negdata.txt,存放neg中所有图片的文件名,注意要去掉最后的negdata.txt?。
注意:
如果把negdata.txt保存在neg文件夹外面,需要在每一行外面添加相对路径或绝对路径来指出样本的所在位置。一种方法是将negdata.txt?文件中的内容复制到word中,使用替换功能实现快速修改。neg替换为neg\neg
(2)???正样本描述文件posdata.txt
与建立negdata.txt一样建立posdata.txt,只不过在正样本描述文件中需要指出目标在每个样本中的数量和位置如pos\1.bmp 1 x1 y1 x2 y2,其中(x1,y1,x2,y2)为目标所在的矩形框,又如pos\1.bmp2 x1 y1 x2 y2 x1’ y1’ x2’ y2’
因为我们准备的正样本基本都是目标,因此只需在文件名后增加1 0 0 width height即可。
注意:
1若正样本图像是不同尺寸的,一方面可以使用ImageResize或matlab将图像统一成同一尺寸在生成posdata.txt,或程序ImageToTxt直接生成具有不同尺寸图像的正样本描述文件。在此阶段不归一化的话,后续生成.vec文件的时候在程序中自动归一化。
2样本描述文件与图像要一致,可以存在图像但没有写在描述文件中,即有多余的图像,但千万不要在描述文件中写不存在的图像。
问题:
?????? 归一化尺寸的方法是否对训练结果有影响??opencv_createsamples?采用
显示全部