gpt4 book ai didi

opencv - 改进 Haar 训练结果的想法

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:56 25 4
gpt4 key购买 nike

请帮助获得更多关于我第一次 haar 训练结果的知识。所以我想训练 Haar 分类器来识别简单的笔,如下 Dileep Kumar’s文章。

我用手机拍了 14 幅钢笔画。这些图片尺寸很大:263x2814
然后收集底片,有的是从网上下载的,大小640x480,有的是用手机拍的,大小:1920x1080,5313x2388

其中一些负面图像确实很大。我总共有 158 张底片。
之后创建负面和正面图像列表并运行:createsamples 命令:

 perl createtrainsamples.pl positives.dat negatives.dat samples 250  "opencv_createsamples  -bgcolor 0 -bgthresh 0 -maxxangle 0.5 -maxyangle 0.5 maxzangle 0.5 -maxidev 40 -w 160 -h 20"

我不确定 160 的高度和 20 的高度是否合适?
然后在获得 samples.vec 文件后,我使用以下命令运行级联训练:

opencv_traincascade -data firstTry -vec samples.vec  -bg negatives.dat -numPos 250 -numNeg 99 -numStages 25 –featureType HAAR  -mode ALL -w 160  -h 20 -mem 2048

我使用了相同的宽度和高度,但不确定这是否正确。我从一些引用脚本中获取了宽度和高度值。获取 cascade.xml 文件后,我使用以下参数在我的图片上运行 detectMultiScale:

faces = faceCascade.detectMultiScale(   image,   scaleFactor=1.4,  minNeighbors=3,   minSize=(30, 30) )

检测效果不佳。它只是检测笔的某些部分,而不是整个笔。
此外,当我有一些将笔放在环境中的照片时,未检测到笔。

我想我需要调整所有正面和负面图像的大小并使它们大小相同,但不确定这一点。
您能否就我在这里做错了什么以及如何改进我的结果提供一些意见。

你可以找到我所有的文件here :

最佳答案

这些仅基于我自己的经验:

  1. 我认为 createsamples 在原始图像的宽度和高度相等时效果很好。这是因为当 createsamples 旋转你的图像时,如果宽度和高度不同,图像会被剪切(进入你的正文件夹并查看它创建的图像。你会看到。)所以我的建议是......如果这是如果您是第一次尝试 createsamples(并且不知道任何其他方法),请选择宽度和高度相等的圆形或方形对象。
  2. 你的负面和正面图片的数量非常非常少......应该有几千个。
  3. 正如我在 #1 中所说,您的 -w -h 应该相等(如果使用 createsamples)。并且不要永远对它们中的每一个使用超过 25 个(我建议 20 20 甚至 15 15)。因为我经历了非常非常长的训练时间,但在检测方面没有太大收获(实际上,我有一次经历了较低的检测率,训练时间可能是训练时间的 5 或 6 倍)。
  4. 在使用 createsamples(可能是 100x100)之前,将所有负片图像调整为相同大小。并将原始图片的宽度和高度调整为一半或更小(可能为 50x50)。
  5. 您可以在 traincascade 命令中更改一些重要的变量,这些变量可以使检测效果更好,但它们会使训练变得极其漫长:

    -minHitRate 0.999 -maxFalseAlarmRate 0.1 -maxWeakCount 1000

    警告:如果您要使用上述数字,您基本上必须使用 LBP 而不是 HAAR。 HAAR 具有更好的检测能力,但对于 LBP,您可以使用更好的值,因为它花费的时间更少(尽管使用这些数字和大量图像 (+10000) 可能仍需要几天时间,但将这些与 HAAR 一起使用,我可能 几个月后见)。以下是如何使其成为 LBP:-featureType LBP
    -minHitRate 越接近 1 越好。 -maxFalseAlarmRate 越低到 0 越好。而且 -maxWeakCount 越高越好。
    另请注意,您将这些设置得越好,您需要进行的阶段数就越少。您可能有一个 25 级级联,其性能比具有良好设置的 6 级级联差。另请注意,当您使用这些数字时,您的 traincascade 似乎一直停留在获取负面图像上(不过没关系)。

  6. 此外,照明在检测中也非常重要。使用光线充足的房间以获得更好的效果。

奇怪的是:为什么要检测笔时使用 faces = faceCascade.detectMultiScale:D 不要让计算机比它已经是伴侣的更加困惑。 :D

关于opencv - 改进 Haar 训练结果的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com