我读这篇文章是为了创建一个自定义的xml文件haartraining
- 正负图像必须具有相同的尺寸(宽度x高度)?
- 正面图片必须与负面图片大小相同? 在createsample和openv_traincascade中的
- 我应该在参数-h和-w?
负样本可以是任意大小,训练将自动选择子窗口和子窗口的缩放版本(因为需要任何负样本)。对于每个底片图像,您需要在.txt文件中添加一行路径。如果你想使用完全适合检测器大小的"硬样本",你必须将负图像裁剪到相关区域并手动调整它们的大小以适合目标大小。
阳性样本可以是任何大小,但您必须准备一个.txt文件,其中包含图像中对象所在位置的信息。例如,如果图像是C:haartrainingpositivesimage00001.png
,并且单个对象位于roi位置(x,y,width,height)
,那么您的.txt文件必须包含行C:haartrainingpositivesimage00001.png 1 x y width height
。这个宽度/高度可以是任何大小(不必对每个图像都是相同的),它将在稍后通过opencv_createssamples缩放到目标大小。
对于haar训练,你需要一个。vec文件而不是那个。txt文件,你可以用opencv_createssamples二进制文件创建。vec文件。这个二进制文件至少有3种不同的模式来创建示例:
1. Just transform your positive images to a .vec file by scaling and formatting.
2. Create a lot of positive images by providing some background images, a single positive image and constraint about how the sample may be transformed/distorted.
3. Create Test images which can be used to test the training result, by placing positive images inside of some bigger scene background images.
我只有1.
的经验,所以我不能帮助其他的。您只需输入正面文本文件和目标窗口大小以及您拥有的正面图像的数量,opencv_createssamples创建使用opencv_trainingcascade进行训练所需的.vec文件。
在opencv_traincascade中,您必须注意为numPos和numNeg提供合适的数字,因为在每个阶段您都会"丢失"样本,如果没有经验,这可能会有点混乱。例如,如果你的vec文件包含8000个阳性图像,你不能告诉opencv_haartraining在每个阶段使用8000个阳性图像,因为minHitRate为0.995,在第一阶段之后可能只剩下7960个阳性样本(最坏的情况)。阴性样本也一样,但要知道你有效地拥有多少样本并不容易。
在createsample和traincascade中宽度和高度必须相同!它必须是训练后想要检测对象的最小尺寸,但它必须足够大以容纳相关信息。也许你需要测试一下,直到找到最佳尺寸。但不幸的是,由于训练期间的记忆问题,容量非常有限。例如,我不能训练大于大约。30 x30。Afaik人脸检测经过科学评估,无论在24x24无树裂情况下,还是在20x20有树裂情况下,都能产生良好的结果。
请告诉我这是否回答了你的问题。