C++ OpenCV和C++;:Traincascade错误:一个实际问题

C++ OpenCV和C++;:Traincascade错误:一个实际问题,c++,opencv,classification,cascade,C++,Opencv,Classification,Cascade,在过去的几天里,我一直在研究createsamples和traincascade方法,以便生成汽车级联分类器。像我一样,许多人发现自己对如何克服所有错误和问题一无所知,因此在这篇文章中,我将尽可能地解释我的程序和推理,以及我的问题 为了提供更多的上下文,过去我自己实现了一个带有Haar特性的增强分类器,但是由于该方法不是级联的,所以速度非常慢。然而,我非常熟悉级联分类背后的方法 问题:图像上的车辆分类 我下载了一个数据集(图像集),该数据集提供550个正窗口(有车的100w x 40h图像)和5

在过去的几天里,我一直在研究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
: 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
到目前为止,samples.vec文件的生成没有问题

步骤3-训练级联分类器

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

: createsamples.exe -info path/positive.dat -vec samples.vec -bg negative.dat -w 100 -h 40 -num 550
: 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
参数说明:

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)
numStages(15):意味着我希望我的分类器将有15个决策阶段

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

特征类型(HAAR):使用HAAR特征进行分类。也可提供HOG和LBP

w(100):检测窗宽度

h(40):检测窗高度

bt(DAB):意味着我想使用离散Adaboost(而不是logitboost和其他)

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

-mode(ALL):我认为这意味着它将使用各种各样的haar特性

错误

当我运行命令时,程序立即崩溃,没有错误消息,因此我完全不知道我做错了什么。 我希望在这方面有经验的人能够发现我的程序存在的问题,因为这是许多试图使用此应用程序的人都面临的问题

问候

导入-编辑2:

CarData\TrainImages\NEG\neg-0.pgm

CarData\TrainImages\NEG\neg-1.pgm(and more 498 lines of this)
我尝试用弃用的应用程序haartraining来训练分类器,只是想看看是否可以获得更多信息,结果如下:


您使用的图像大小为100x40。(-w100-h40)显然OpenCV预先计算了所有可能的特性,这导致了错误的分配(我在系统上得到了错误的alloc)。试着缩小到25x10,看看这是否仍然发生。

您使用的是100x40大小的图像。(-w100-h40)显然OpenCV预先计算了所有可能的特性,这导致了错误的分配(我在系统上得到了错误的alloc)。尝试缩小到25x10,看看是否仍会出现这种情况。

按“重试”按建议进行调试后会发生什么情况?另一个对话框显示应用程序停止工作。我已尝试将进程附加到Visual Studio,然后按“重试”,只是想看看VS是否会显示崩溃的位置,但没有成功。请确保文件已打开/找到。刚才在这里解决了类似的问题-。按“重试”按建议进行调试后会发生什么?另一个对话框显示应用程序停止工作。我已尝试将进程附加到Visual Studio,然后按“重试”,只是想看看VS是否会显示崩溃的位置,但没有成功。请确保文件已打开/找到。刚刚在这里解决了类似的问题-。