对OpenCV来说很陌生,并尝试训练一个可以从侧面检测狗的图像的haar分类器。我使用this教程作为指导。作者建议使用数量惊人的样本图像训练相对有效的分类器。根据他的指示,我收集了40个正面和600个负面,然后使用提供的脚本以.vec文件的形式生成更多样本。 训练花了大约一个半星期到20个阶段,具有以下参数:
<?xml version="1.0"?>
<opencv_storage>
<params>
<stageType>BOOST</stageType>
<featureType>HAAR</featureType>
<height>64</height>
<width>80</width>
<stageParams>
<boostType>GAB</boostType>
<minHitRate>9.9900001287460327e-01</minHitRate>
<maxFalseAlarm>5.0000000000000000e-01</maxFalseAlarm>
<weightTrimRate>9.4999999999999996e-01</weightTrimRate>
<maxDepth>1</maxDepth>
<maxWeakCount>100</maxWeakCount></stageParams>
<featureParams>
<maxCatCount>0</maxCatCount>
<featSize>1</featSize>
<mode>ALL</mode></featureParams></params>
</opencv_storage>
在最后阶段,Neg计数接受率降至0.000579 - 我认为这意味着0.0579%的阴性样本被错误地归类为阳性,即当他们没有时将其中有狗。换句话说,99.942%的样本被正确识别。这对我来说似乎是非常好的数字,但是当我将分类器.xml文件插入到面部检测程序中时,结果非常糟糕。
这是用于分析完全黑色图像的分类器的照片(设备的相机平放在工作台上以防止任何光线进入):
(想象一个黑色的屏幕,其中有几个绿色矩形边框随机定位,有些重叠。可悲的是,似乎我没有必要的声誉来发布真实的东西......)< / EM>
我对修正分类器的最佳猜测是,我需要重新培训更多的负面和正面样本池。
我真正想知道的是:为什么验收比率和分类器的真实性能如此不同?我误解了接受率的含义吗?如果我对比率的理解是正确的,我应该期待什么样的数字会给我一个有效的分类器?
非常感谢任何帮助。
答案 0 :(得分:1)
当测试接受率远低于列车接受率时,有两种可能性:
您可以检查两种可能性。我建议你测试其他功能提取方法,如HOG和LBP。为此,您只需将featureType更改为 HOG 或 LBP 。
正样本和负样本的数量取决于样本的多样性。这意味着如果您的外观有很大变化的对象(在测试图像中),您需要增加正样本数(> 500)以涵盖所有可能的外观(负样本相同)。
不要忘记更改用于测试图像的输入参数(min-neighbor,scale,minSize和maxSize)。