Haar分类器参数调整
Haar classifier parameters tuning
我正在尝试训练一个 haar 分类器来检测图像中的乐高积木人脸,但我真的很难调整参数。
我拍了 3 个乐高积木的照片(每个 50 张图片)并使用 opencv 我将它们的头部分离为 40x40 图像。
示例图片如下:
除此之外,我只取了 500 张空白背景图像作为数据集中的负片图像。
我创建了路径并生成了 samples.vec 文件,如 opencv 文档中所述。
之后,我尝试训练我的 haar 分类器。我使用了在另一个类似项目中找到的这些参数:
opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt\
-numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\
-numNeg 600 -w 40 -h 40 -mode ALL -precalcValBufSize 1024\
-precalcIdxBufSize 1024
结果真的很糟糕。分类器识别不存在的乐高积木,奇怪的是它不识别预期的乐高面孔。
我真的很难调优这个分类器,因为参数列表很大而且我不知道如何设置值来产生高效的分类器并且不需要很长时间来训练。
任何帮助将不胜感激,尤其是关于如何选择参数以及在 "average" 计算机中的预期训练时间是多少。感谢您的宝贵时间!
(p.s.: 训练时长为2小时,我觉得太快了,可能是表现不好的原因)。
在这里看看我的回答 - Generating good training data for haar cascades
如果您的训练集真的是您发布的那张图片的大小,那么 40x40 可能只是宽度和高度的过大方式。训练 2 小时是可以的,但在 0.999 时我不希望它很快达到 10 个阶段。
这是没有真正 "right" 答案的问题之一。不过我建议使用更高分辨率的图片。
评论问题的答案
第一条评论——在你将要使用的图像上训练你的分类器,所以如果它们是低分辨率的,那么就坚持使用低分辨率。这可能只是一个更难的问题。
第二条评论 - 如果您只在一个场景中进行训练,即如果您有一个具有不同背景的乐高照相亭,并且您只检测到 int 帽子,那么请使用除正面特征之外的所有特征。 IE。背景。它变成了一个更简单的 CV 问题,当我说负数是 "everything else" 时,我的意思是根据您要检测的内容。如果你想检测在伦敦街头走来走去的乐高人,那么你需要一个比他们都在同一背景下大得多的负片集。它甚至可能有助于使您的背景具有独特的颜色或其他东西,我不确定。
已解决的问题:
它需要更高分辨率的图像和更小的 maxFalseAlarmRate。
可能是低图像分辨率增加了很多噪音,误导了分类器。
对于面临类似问题的任何人,我建议重新评估并可能重建数据集。
我正在尝试训练一个 haar 分类器来检测图像中的乐高积木人脸,但我真的很难调整参数。
我拍了 3 个乐高积木的照片(每个 50 张图片)并使用 opencv 我将它们的头部分离为 40x40 图像。
示例图片如下:
除此之外,我只取了 500 张空白背景图像作为数据集中的负片图像。 我创建了路径并生成了 samples.vec 文件,如 opencv 文档中所述。
之后,我尝试训练我的 haar 分类器。我使用了在另一个类似项目中找到的这些参数:
opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt\
-numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000\
-numNeg 600 -w 40 -h 40 -mode ALL -precalcValBufSize 1024\
-precalcIdxBufSize 1024
结果真的很糟糕。分类器识别不存在的乐高积木,奇怪的是它不识别预期的乐高面孔。
我真的很难调优这个分类器,因为参数列表很大而且我不知道如何设置值来产生高效的分类器并且不需要很长时间来训练。
任何帮助将不胜感激,尤其是关于如何选择参数以及在 "average" 计算机中的预期训练时间是多少。感谢您的宝贵时间!
(p.s.: 训练时长为2小时,我觉得太快了,可能是表现不好的原因)。
在这里看看我的回答 - Generating good training data for haar cascades
如果您的训练集真的是您发布的那张图片的大小,那么 40x40 可能只是宽度和高度的过大方式。训练 2 小时是可以的,但在 0.999 时我不希望它很快达到 10 个阶段。
这是没有真正 "right" 答案的问题之一。不过我建议使用更高分辨率的图片。
评论问题的答案 第一条评论——在你将要使用的图像上训练你的分类器,所以如果它们是低分辨率的,那么就坚持使用低分辨率。这可能只是一个更难的问题。
第二条评论 - 如果您只在一个场景中进行训练,即如果您有一个具有不同背景的乐高照相亭,并且您只检测到 int 帽子,那么请使用除正面特征之外的所有特征。 IE。背景。它变成了一个更简单的 CV 问题,当我说负数是 "everything else" 时,我的意思是根据您要检测的内容。如果你想检测在伦敦街头走来走去的乐高人,那么你需要一个比他们都在同一背景下大得多的负片集。它甚至可能有助于使您的背景具有独特的颜色或其他东西,我不确定。
已解决的问题:
它需要更高分辨率的图像和更小的 maxFalseAlarmRate。
可能是低图像分辨率增加了很多噪音,误导了分类器。
对于面临类似问题的任何人,我建议重新评估并可能重建数据集。