从图像创建Haar级联显示错误

时间:2019-11-06 12:42:23

标签: python opencv haar-classifier

我想创建自己的车牌级联。我已经找到了一个称为Cascade-Trainer-GUI的GUI。我正在使用Windows 10。 您可以从此处下载gui:

http://amin-ahmadi.com/cascade-trainer-gui/

我有两个带有正负图像的文件夹。大约有650张正像和570张负像。

当我运行程序时,它会在几秒钟内完成,但是我没有得到cascade.xml文件。 我得到了.txt文件,在该txt文件的末尾说:

OpenCV Error: Insufficient memory (Failed to allocate 1357715212 bytes) in cv::OutOfMemoryError, file D:\cv\opencv_3.2.0\sources_withTextModule\modules\core\src\alloc.cpp, line 52

我已经按照文档进行操作,并且已经在youtube上观看了一些视频,但是我不知道自己在做什么错。

这些是我尝试训练级联时PC的性能:

enter image description here

我试图清理磁盘空间并关闭所有其他程序,以便可以增加RAM内存,但仍然遇到相同的错误。

我试图将缓冲区大小从1024减小到256。在那种情况下,它开始工作,但是5-6个样本(10分钟)后显示错误Insufficient Count of Samples,我试图减小参数max的值。功能从100%增至70%,但在相同时间后出现相同错误。

您可以从此处下载图像,我将它们分为正面和负面:

https://www.sendspace.com/file/uo18pu

您知道我做错了什么,该怎么办才能解决? 我应该在此GUI中选择哪些参数?

此外,是否存在某种可以在线创建haar级联的应用程序?

1 个答案:

答案 0 :(得分:0)

我相信您的问题是由于用于训练的图像补丁的大小所致。在原始的Violaj-Jones论文中,他们使用了20x20像素的色块,从而产生了18万多个功能。为了在级联的每个阶段中找到最佳的特征集,增强算法必须在每次迭代中找到最佳的特征/阈值组合(弱分类器是感知器)。这涉及计算具有M个可能阈值的N个特征的熵,其中M与训练图像的数量一致。然后,在每个提升迭代中需要MxN个存储空间。假设此程序在内部使用浮点精度,则每次提升迭代大约需要MxNx4字节的内存。在您的情况下,对于20x20图像补丁程序,这仅是180000x(119 + 114)x4 = 167,760,000字节,即大约0.16 GB,但是如果训练补丁程序的大小较大或一组训练补丁程序的大小可能更大。您使用的基本特征大于原始的Violaj-Jones论文(在本文中,基本特征集为4,但是还有另一套称为haar-like)。然后,我相信您需要配置训练图像补丁的大小。