opencv自己训练人脸检测的分类器,没有检测出人脸,怎么回事?

时间:2022-07-03 15:41:54
目的:我想熟悉使用opencv的haar训练方法,用在其他的物体检测上。所以我先用了MITLAB的人脸库来进行训练,得到人脸检测的分类器,如果训练得到的分类器能准确的检测到人脸的话,说明我的训练过程正确,则完全可以将此训练过程用到其他物体上进行训练,从而得到其他物体的分类器;如果没有检测到人脸,说明我的训练过程某些地方还有问题。

现在好像就出问题了。我训练出来的xml分类器文件,用opencv没有检测到人脸。想提出来让各位帮我发现问题,共同解决。


问题描述如下:
MITLAB的人脸图像库,全部是bmp格式的,大小全为20*20,正样本5412张(posdata文件夹中),幅样本4381张(negdata文件夹中)。 
opencv自己训练人脸检测的分类器,没有检测出人脸,怎么回事?
我训练时完全按照http://wenku.baidu.com/view/dd2dc7eb998fcc22bcd10d15.html 中的方法一步一步来的,到最后得到一些data  opencv自己训练人脸检测的分类器,没有检测出人脸,怎么回事?
最后运用haarconv程序将这些数据转为xml格式的文件,即最终的分类器。但是我得到的xml文件只有72k(第二次只有52k),与opencv自带的人脸检测分类器(900K左右)相比太小了,然后用在人脸检测上,没有检测到人脸,不知是哪里出问题了?

Ps:训练时,需要一个问题:就是程序训练到 时,程序就不走了,界面一直停留在那里,等了一天也没有什么变化,最后叫我自己强行结束了次训练过程。然后将数据转化为xml的。 不知是哪个环节出问题了,请大家一起来探讨。

9 个解决方案

#1


opencv那本书上有现成的代码啊~

#2


引用 1 楼 dizuo 的回复:
opencv那本书上有现成的代码啊~
 
 我这样直接用exe训练哪里有错呢?

#3


ps: 当程序训练到 
Parent node: 8

*** 1 cluster ***
POS: 5200 5412 0.960828

时,程序就没反应了,界面一直停留在那里,等了一天也没有什么变化,最后叫我自己强行结束了次训练过程。然后将数据转化为xml的。 不知是哪个环节出问题了。

#4


其实···到现在 我也没弄清楚。。。训练的层数到底与什么有关。。。看了很多东东,但是,还是觉得 这个东西 蛮 随机 的。。。╮(╯▽╰)╭

嘿嘿,训练的级数还是太小 了,所以 xml文件太小了,所以找不到人脸也是正常的。。。

我那个训练到 十级 ,倒是 能找到,但是 太不准了。。。。哎

按理说,样本已经够多了吧。。。

这到底是为嘛涅。。。。

#5


没有大侠解答啊

#6


增加负样本

#7


是不是负样本训练出了问题呢

#8


尼玛 现在这种问题国内答案都不咋样?究竟是不知道还是不想告诉人呢?Google慢的要死!~~

#9


最近我也在用opencv的haar算法做人脸检测,也出现了同样的问题,就是训练出的xml文件人脸检测率不高,误检率太大,后来想了一下,应该是负样本的问题。人脸检测,负样本的差异性越大,好像最后的检测效果越好,专业一点,叫泛化能力好。训练到一个阶段不走了,是因为程序陷入了死循环,因为此时负样本都被正确的分类,下一级的分类器没有负样本可用,陷入死循环,所以要增加负样本。

#1


opencv那本书上有现成的代码啊~

#2


引用 1 楼 dizuo 的回复:
opencv那本书上有现成的代码啊~
 
 我这样直接用exe训练哪里有错呢?

#3


ps: 当程序训练到 
Parent node: 8

*** 1 cluster ***
POS: 5200 5412 0.960828

时,程序就没反应了,界面一直停留在那里,等了一天也没有什么变化,最后叫我自己强行结束了次训练过程。然后将数据转化为xml的。 不知是哪个环节出问题了。

#4


其实···到现在 我也没弄清楚。。。训练的层数到底与什么有关。。。看了很多东东,但是,还是觉得 这个东西 蛮 随机 的。。。╮(╯▽╰)╭

嘿嘿,训练的级数还是太小 了,所以 xml文件太小了,所以找不到人脸也是正常的。。。

我那个训练到 十级 ,倒是 能找到,但是 太不准了。。。。哎

按理说,样本已经够多了吧。。。

这到底是为嘛涅。。。。

#5


没有大侠解答啊

#6


增加负样本

#7


是不是负样本训练出了问题呢

#8


尼玛 现在这种问题国内答案都不咋样?究竟是不知道还是不想告诉人呢?Google慢的要死!~~

#9


最近我也在用opencv的haar算法做人脸检测,也出现了同样的问题,就是训练出的xml文件人脸检测率不高,误检率太大,后来想了一下,应该是负样本的问题。人脸检测,负样本的差异性越大,好像最后的检测效果越好,专业一点,叫泛化能力好。训练到一个阶段不走了,是因为程序陷入了死循环,因为此时负样本都被正确的分类,下一级的分类器没有负样本可用,陷入死循环,所以要增加负样本。