Sol*_*oid 2 opencv haar-classifier
我正在尝试使用我用相机拍摄的样本创建一个xml文件.这是一个测试运行,我把相机对着窗户,让它每隔30秒拍一张照片,然后经过一段时间.我现在有大约200张照片(仅用于小型测试),但我无法再进一步了.
我做了一个选择工具来挑选图片上的汽车(边界框),如果没有,则将图片标记为底片.以下是应用程序的两个示例:

然后,应用程序将标记的对象保存在positive.txt文件中,如下所示,跳过未标记的图片或标记为否定的图片:
/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...
Run Code Online (Sandbox Code Playgroud)
负片图片只是保存到negative.txt文件中,如下所示:
/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...
Run Code Online (Sandbox Code Playgroud)
最后我尝试运行haar训练算法/usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL.
不介意设置,我只需要这个工作,然后我使用功能更强大的计算机对更多图片进行实际数据的实际培训.
为此,我得到以下输出和错误:
Data dir name: samples
Vec file name: positive.txt
BG file name: negative.txt, is a vecfile: no
Num pos: 99
Num neg: 20
Num stages: 5
Num splits: 1 (stump as weak classifier)
Mem: 128 MB
Symmetric: FALSE
Min hit rate: 0.999000
Max false alarm rate: 0.500000
Weight trimming: 0.950000
Equal weights: FALSE
Mode: ALL
Width: 24
Height: 24
Applied boosting algorithm: GAB
Error (valid only for Discrete and Real AdaBoost): misclass
Max number of splits in tree cascade: 0
Min number of positive samples per cluster: 500
Required leaf false alarm rate: 0.03125
Tree Classifier
Stage
+---+
| 0|
+---+
Number of features used : 261600
Parent node: NULL
*** 1 cluster ***
OpenCV Error: Unspecified error (Vec file sample size mismatch) in icvGetHaarTrainingDataFromVec, file /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp, line 1930
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp:1930: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec
Aborted
Run Code Online (Sandbox Code Playgroud)
有谁知道这意味着什么?为什么样本大小出现错误,无论是什么......我也试过用绝对路径替换相对路径,但是我得到了同样的错误.我正在尝试做的事情是正确的,我没有找到任何关于如何从现有和标记图片创建分类器的明确示例.
事实证明,.vec文件不仅仅是positive.txt文件,它必须使用生成opencv_createsamples.
所以首先training_24-24.vec使用以下命令创建文件(不仅仅是文本文件):
/usr/bin/opencv_createsamples -vec training_24-24.vec -info positive.txt -bg negative.txt -w 24 -h 24 -num 100
Run Code Online (Sandbox Code Playgroud)
它创建了该training_24-24.vec文件.与我原来的问题相比,我positive.txt用方形选择重新制作文件.然后我启动了分类器训练
/usr/bin/opencv_haartraining -data samples -vec training_24-24.vec -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL
Run Code Online (Sandbox Code Playgroud)
在这一点上表现简直太糟糕了,除了汽车外,它还能识别出一切.这篇文章说,应该使用1000个正面和2000个负面图像来开始接受一些东西.它也说-nstages选项:
如果您有少量正面,负面样本,那么设置很多阶段是没用的
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |