1

在过去的几天里,我一直在研究 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 个整数代表有物体的边界框(本例中为整幅图像)

负.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 功能。

错误

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

问题

问候!

重要 - 编辑 2:

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

图片说明

4

1 回答 1

1

您正在使用尺寸为 100x40 的图像。(-w 100 -h 40) 显然 OpenCV 会预先计算所有可能的特性,这会导致分配错误(我的系统分配错误)。尝试缩小到 25x10,看看是否仍然会发生这种情况。

于 2013-10-25T19:51:31.550 回答