我有两个数据集:第一个是340张图片,尺寸为440x200,每张图片上的对象都是9x10 px和25x15 px之间的对象。而且我对570x 440x200图像尺寸设置了负值。
我使用以下参数进行训练:
-numPos 250 -numNeg 22000 -w 10 -h 10 -numStages 24 -minHitRate 0.995 -maxFalseAlarm -maxDepth 20 -maxWeakCount 600 -mode ALL
我是根据预先标记的图片创建的。
我还尝试了-numPos 320和300。第一次,它在4个阶段(-numPos 320)出现错误“正样本计数不足”。我使用-numPos 300在同一级联上重新运行训练。它给了我又一个阶段,并因相同的错误而摔倒。
第三次,我选择-numPos 250,它落在2个阶段,而FalseAlarmRate在1个阶段为0!但是在第二阶段0.028。
因此,我很高兴听到关于此的任何建议,但我的问题是:
用这些小的阳性样本集训练级联是不可能的吗?
但是即使在开始阶段,它也给我很小的FalseAlarmRate。因此它可以是一个很好的分类器?
最佳答案
对于第一个问题:
目前尚不清楚确切需要多少种每种图像。这实际上还取决于您要检测的对象,它到底有多复杂。不过,以这个网站实验http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html为例,有可能使用40个阳性样本和600个阴性样本。
但是,对象越复杂,我认为您将需要训练更多的正面和负面形象。如果我没记错的话,我大约3到4年前做过一个手部检测项目,需要大约800张以上的正像,几乎是负像的2倍,然后我和我的 friend 对检测率感到满意。
基本上,您训练的图像越多,目标检测就越准确。
您的第二个问题:
您必须注意的一件事是,分类器的误报率至少与检测率一样重要。通常,当不严格控制一对一的误报率时,整个分类器将无法使用。
还应注意,在大多数情况下,虚假错误率大于检测错误率,这使虚警率成为设计分类器时很难将其最小化的标准。
尝试通过以下方式了解这一点:-http://www.uic.edu/classes/idsc/ids572cna/Model%20evaluation.pdf
另一个更容易理解和学习如何使用更多文本来训练分类器:
http://note.sonots.com/SciSoftware/haartraining.html
因此,当您问:“即使在开始阶段,它也给我很小的FalseAlarmRate。那么它可以是一个很好的分类器吗?”,我的答案将是为什么不呢?
另外,如果可能,请尝试将负像增加到正像的两倍。这是我一直在做的。
希望我的回答对您有所帮助。祝好运。如果有的话,请随时发表评论。
关于opencv - 我的训练集需要有关opencv_traincascade参数的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19312017/