c++ - OpenCV 和 C++ : Error with Traincascade: A Practical Issue

标签 c++ opencv classification cascade

在过去的几天里,我一直在研究 createsamples 和 traincascade 方法以生成汽车级联分类器。很多人都像我一样,发现自己不知道如何克服所有错误和问题,所以在这篇文章中,我将尽可能解释我的程序和推理,以及我的问题。

为了提供更多背景信息,过去我自己实现了一个具有 Haar 特征的增强分类器,但由于该方法没有级联,所以速度非常慢。但是,我非常熟悉级联分类背后的方法。

问题:图像上的汽车分类

我下载了一个数据集(图像集),它提供 550 个正窗口(100w x 40h 有汽车的图像)和 500 个负窗口(100w x 40h 没有汽车的图像),我打算使用这些数据来训练级联分类器.

第 1 步 - 生成用于创建示例的 .dat 文件

createsamples 应用程序需要一个包含有关正样本和负样本信息的 .dat 文件。我生成了两个 .dat 文件,一个带有正窗口,另一个带有负窗口:

positive.dat 示例结构:

CarData\TrainImages\POS\pos-0.pgm 1 0 0 100 40

CarData\TrainImages\POS\pos-1.pgm 1 0 0 100 40 (and more 548 lines of this)

数字1表示整幅图像中只有一个物体,接下来的4个整数表示有物体的边界框(本例中为整幅图像)

negative.dat 示例结构:

CarData\TrainImages\NEG\neg-0.pgm

CarData\TrainImages\NEG\neg-1.pgm(and more 498 lines of this)

第 2 步 - 生成 .vec 文件

为此,我使用带有以下命令行的 createsamples.exe 应用程序:

: createsamples.exe -info path/positive.dat -vec samples.vec -bg negative.dat -w 100 -h 40 -num 550

到目前为止一切顺利,samples.vec 文件生成没有问题。

第 3 步 - 训练级联分类器

为此,我使用带有以下命令行的 traincascade 应用程序:

: traincascade.exe -data CarDetector -vec path/samples.vec -bg path/negative.dat -numStages 15 -stageType BOOST -featureType HAAR -w 100 -h 40 -bt DAB -maxDepth 2 -mode ALL

参数说明:

numStages(15):意味着我希望我的分类器有 15 个决策阶段。

stageType(BOOST): 每个阶段都是一个提升的分类器

featureType(HAAR):使用haar特征进行分类。还提供 HOG 和 LBP。

w(100): 检测窗口宽度

h(40): 检测窗口高度

bt(DAB):表示我想使用 Discrete Adaboost(而不是 logitboost 和其他)

maxDepth(2):表示每个弱分类器将使用3个特征进行分类

-mode(ALL):我认为这意味着它将使用各种 haar 功能。

错误

当我运行命令时,程序立即崩溃并且没有任何错误消息,所以我完全不知道我做错了什么。 我希望在这方面有经验的人能够确定我的程序中的问题,因为这是许多尝试使用此应用程序的人共有的问题。

problem

问候!

重要 - 编辑 2:

我尝试使用已弃用的应用程序 haartraining 训练分类器,只是想看看我是否可以获得更多信息,结果是这样的:

image description

最佳答案

您使用的图片尺寸为 100x40。 (-w 100 -h 40) 显然 OpenCV 预先计算了所有可能的特征,这导致了错误的分配(我在我的系统上得到了错误的分配)。尝试缩小到 25x10,看看是否仍然如此。

关于c++ - OpenCV 和 C++ : Error with Traincascade: A Practical Issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383068/

相关文章:

opencv - 使用opencv跟踪车辆轨迹

c++ - C++中无库分类SVM的实现

python - 在轴上绘制图形但在尝试基于 HoG 特征对图像进行分类时没有得到结果

c++ - Windows服务在C++中以一定的时间间隔运行一个方法

c++ - 在 QT5 中我需要创建至少 20 个 QThread

OpenCV distanceTransform 返回意外结果(空 Mat 或原始图像)

python - 如何在使用python检测边缘后将图像裁剪成碎片

c++ - 由于函数指针类型定义和具有正确 const 逻辑的分配函数不匹配而产生编译警告

c++ - 带有 shared_from_this 参数的 std::async 的未决 std::future get 阻止了 this 的破坏

r - 在 R 中进行 knn 分类后,如何获得每个测试用例的预测列表?