gpt4 book ai didi

opencv - Haarcascade 分类器训练

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:32 25 4
gpt4 key购买 nike

我正在尝试使用我用相机拍摄的样本创建一个 xml 文件。这是一次试运行,我将相机放在 window 上,让它每隔 30 秒拍一张过往车辆的照片,持续一段时间。我现在有大约 200 张图片(只是为了一个小测试),但我不能再进一步了。

我制作了一个选择工具来挑选图片(边界框)上的汽车,如果没有则将图片标记为底片。以下是应用程序外观的 2 个示例:

enter image description here enter image description here

然后应用程序将标记的对象保存在 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
...

负片图片简单保存到negative.txt文件如下:

/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...

最后,我尝试使用 /usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 运行 haar 训练算法-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

有人知道这是什么意思吗?为什么样本大小有错误,不管是什么...我也尝试用绝对路径替换相对路径,但我得到了同样的错误。我正在尝试做的事情实际上是正确的,我还没有找到任何关于如何从现有和标记的图片创建分类器的明确示例。

最佳答案

事实证明,.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

它创建了 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

此时的性能简直糟透了,它能识别除汽车以外的所有内容。 This article说应该使用 1000 张正面图像和 2000 张负面图像之类的东西来开始接受一些东西。它还针对 -nstages 选项说:

It’s useless to set many stage, if you have small number of positive, negative samples

关于opencv - Haarcascade 分类器训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com