我有两个数据集:第一个包含340张尺寸为440×200的图像,每张图像上的对象尺寸在9×10像素到25×15像素之间。另一个是包含570张尺寸为440×200的负样本图像。我使用以下参数进行训练:-numPos 250 -numNeg 22000 -w 10 -h 10 –numStages 24 –minHitRate 0.995 -maxFalseAlarm -maxDepth 20 -maxWeakCount 600 -mode ALL
我的数据集是从之前标记好的图像中创建的。
我还尝试了-numPos 320和300。第一次使用-numPos 320时,在第4阶段以“正样本数量不足”的错误结束。我重新运行了相同的级联,使用-numPos 300。它又多了一个阶段,但还是以同样的错误结束。第三次我选择了-numPos 250,它在第2阶段失败了,第1阶段的误报率为0!但在第二阶段为0.028。
因此,我很乐意听到任何建议,但我的问题是:使用这么少的正样本训练级联是不可能的吗?但即使在前几个阶段,它也给我非常低的误报率。所以它可以成为一个好的分类器吗?
回答:
关于你的第一个问题:
实际上并不清楚每种图像需要多少。还真的取决于你想要检测的对象,它到底有多复杂。不过,这是可能的,例如,在这个网站的实验中使用了40个正样本和600个负样本,http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html。
然而,对象越复杂,我认为你需要训练更多的正负图像。如果我没记错的话,大约三到四年前我做的一个手部检测项目,需要大约800多个正图像和几乎两倍的负图像,我的朋友和我才对检测率感到满意。
基本上,训练的图像越多,你的对象检测就越准确。
你的第二个问题:
你必须注意的是,分类器的误报率至少与检测率一样重要。通常,当一对一的误报率没有严格控制时,整个分类器将无法使用。
还要注意,在大多数情况下,误报错误率大于检测错误率,这使得误报率在设计分类器时成为一个难以最小化的标准。
尝试通过以下方式理解这一点:http://www.uic.edu/classes/idsc/ids572cna/Model%20evaluation.pdf,还有另一个更容易理解和学习如何训练分类器的文本:http://note.sonots.com/SciSoftware/haartraining.html
所以当你问:“它在前几个阶段就给我非常低的误报率。所以它可以成为一个好的分类器吗?”我的回答是,为什么不呢?
另外,如果可能的话,尝试将负图像增加到正图像的两倍。这是我的常规做法。
希望我的回答对你有帮助。祝你好运。如果有任何问题,请随时评论。