c++ - OpenCV Traincascade 返回垃圾

标签 c++ opencv image-processing machine-learning cascade

我正在尝试训练级联分类器来检测图像中的鹿。问题是我的分类器总是在输入图像的正中心恰好返回一个正命中。对于测试图像、来自正集的训练图像和来自负集的训练图像都是如此。

对于我的正向训练集,我使用的是来自 CIFAR-10 数据集 (http://www.cs.toronto.edu/~kriz/cifar.html) 的鹿图像集。这给了我 5000 个 32x32 彩色鹿图像。对于负训练集,我使用的是来自 Labelme12-50k 数据集 (http://www.ais.uni-bonn.de/download/datasets.html) 的图像,它提供了 39000 张随机图像。我将所有这些图像的大小调整为 32x32,以使大小与正训练集一致。

然后我使用以下命令创建了正 vector :

./opencv_createsamples -info posFiles.txt -w 32 -h 32 -num 5000 -vec posVector.vec

载体似乎已成功创建。然后,我使用以下命令训练级联分类器:

./opencv_traincascade -data /home/mitchell/ece492/Deerinator_Software/Deerinator_Software/trunk/Haar/data -vec posVector_5000.vec -bg negFiles.txt -numPos 4000 -numNeg 39000 -w 32 -h 32 -featureType LBP -numStages 18

级联分类器需要大约 5 个小时的训练时间,负拒绝率为 0.038 但是,每当我使用以下命令在图像上测试分类器时:

./c-example-facedect --cascade=cascade.xml img.png

我总是得到相同的结果:在图像中心点击一次。这发生在测试图像、来自正训练集的图像和来自负训练集的图像上。我不确定此时该做什么 - 在这一点上,我只是使用 opencv 示例可执行文件。我不确定这个过程是与我的输入训练集有关还是与我对分类器的使用有关。有人有什么建议吗?

最佳答案

我认为这失败了,因为图片样本太小了。我认为它们只是 32 x 32。如何将其用于阳性样本?如果我错了并且图片实际上更大,请教我如何打开它们,我打赌我可以让这个为你运行。

关于c++ - OpenCV Traincascade 返回垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285437/

相关文章:

C++ 字符串 vector

c++ - Homebrew 中没有用于 opencv 安装的选项

opencv - 从二进制图像中删除 Blob

image - 从多个较小的盒子构建外部边界框

c++ - 如何使用模板别名删除一个不必要的参数

c++ - g++ 编译错误

c++ - 如何使用模板生成常规参数列表并将其传递给运行时函数?

python - 为什么我使用 OpenCV 将 RGB 图像转换为灰度图像时得到绿色图像?

python - 旋转图像后获取(x,y)点(python,openCV)

c++ - 将 YCrCb 图像拆分为其强度 channel