1

一个星期以来,我们一直被困在 haar 级联训练的一个问题上。实际上,我们正在按照本教程http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html创建级联 xml 文件。但是在最后一个命令

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt
-numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 45
-numNeg 45 -w 90 -h 100 -mode ALL -precalcValBufSize 1024
-precalcIdxBufSize 1024

我们得到一个错误:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std:: bad_alloc
Aborted (core dumped)

图像规格为:45 张正片和 45 张负片(尺寸均为 90 X 100)。我已确保 samples.vec 存在于同一文件夹中,并且还尝试将 2048 用于 precalcValBufSize 参数。请帮助我们!

4

1 回答 1

5

你的内存用完了。你有几个选择:

  • 使用内存更大的 64 位计算机
  • 使用较小尺寸的正面训练图像。24x24 或 32x32 是典型的。64x64 被认为是大的。
  • 使用 LBP 或 HOG 特征而不是 Haar。Haar 特征比其他特征占用更多数量级的内存。

顺便说一句,您的负面图像不应与您的正面图像大小相同。负图像应该是包含通常与您感兴趣的对象相关联的背景的大型场景。opencv_traincascade自动扫描它们以寻找有用的负样本。

于 2014-12-10T15:49:39.470 回答