opencv 2.1网上查的另一种资料
训练分类器成功,在此与大家分享。
参考英文资料网址: http://note.sonots.com/SciSoftware/haartraining.html#e134e74e
样本训练要求
1、杯子的背景要统一吗,因为有些背景是白色,有些是淡淡的背景色,还有些深色的背景色
答:背景色要统一
2、整个图的大小就是最外面一个框框起来那么大,
问题是:我需要在原图基础上截图吗,如:只把红框框起来的那部分截出来???
答:不用的
3、那图片是256色的还是彩色的呢?
答:灰度最佳
5、一般来说,训练分类器用的什么 图片 就用什么 图片作测试
即来源图片分别用于训练和测试
6、那正样本选择方面有没有要求,如玻璃杯
当然有要求。
最好各种形状的玻璃杯都有样本,每种玻璃杯从不同角度拍摄的样本都有
7、那网上截些有关玻璃杯的图可以吗?大小是要归一化的
可以的。网上的图像实际上也来源于生活或科研拍摄的
其实可以不是图片的归一化,还可以是特征的归一化
归一化的话可以根据缓需求,不同应用场合就有不同的归一化方法
8、那关于杯子这个正样本,我要弄大约多少张图片呀?
样本要多,当然并不是越多越好,而是每一张都有代表性,能反映一定意义
9、负样本最好含有正样本中的背景部分
训练失败的原因很多:
1、负样本数目太少,导致Adaboost算法汉有跳出死循环,
2、负样本之间重复部分过多,或正样本尺寸过大,导致训练分类器时内在溢出。
.vec文件里的东西是用二进制的形式表示的。
首先写的是样本的数量,然后是样本大小width*height,后面就是图片像素值。
在opencv下的cvsamples.cpp就能看的很清楚了。
本文现在正在做人头检测。视频中的人头尺寸,光照,角度都很不相同。
1. 请问haar训练中正样本是不是只能是在光照尺寸和角度都一致的情况下进行训练?
正樣本的光照可以是有變化的,正樣本應該保留一些樣本以外的背景,但不能過大,角度的話,人臉轉90度都還可以接受。
其實你正樣本的種類(不同角度.不同光照.不同人臉)越多,就需要更多的矩形特徵來作分類。
2.正负样本需要一样的大小么?
人臉建議使用20*20,大小要盡量統一,這樣在做Description txt file時,比較方便。人臉在圖片中的位置盡量也相同。
3.有人说正负样本数量比例最好是7:3,也有人说正负样本须一样多。这是怎么回事?
我怎麼聽說 正:負=1:3比較好。建議你可以先試試看1000:3000應該不用花太多時間訓練。
4.在训练中,本人发现了一种情况:如果正负样本差别较小,即负样本从待检测视频图像中的背景获取,并且与正样本一样大的话,训练就会在某一个节点上停下来,并且几天也过不了这个节点;而如果负样本与正样本差别很大(尺寸与取样上都差别很大)的话,训练结束比较快,但是用得到的xml文件去做检测的话,效果很不好。请问这是不是矛盾,该怎么解决?
正負樣本照理說應該不會差別不大,除非你是要偵測笑臉/非笑臉,另外可能是你負樣本太少,所以false alarm數值太高,所以haartraining 沒有正常terminate
5.参数stage一般设置多大?
我目前使用如下指令
opencv_haartraining.exe -data "d:\training0421\20s" -vec "d:\training0421\positive\positives.vec" -bg "d:\training0421\negative\negative.txt" -npos 1681 -nneg 3406 -nstages 20 -nsplits 2 -minhitrate 0.995 -maxfalsealarm 0.5 -mode ALL -mem 2000 -w 20 -h 20
使用profermance來測試原始訓練樣本(200*200p)可以有八成的hitrate,false大概幾十個。
整个过程分为两步:
1. 创建样本
2. 训练分类器
3、 利用训练好的分类器进行目标检测。
现在让我一一讲述。
1. 创建样本
◆ 样本分两种: 正样本与负样本(也有人翻译成:正例样本和反例样本),其中正样本是指待检目标样本(例如人脸,汽车,鼻子等),负样本指其它任意图片。
◆ 所有样本图片都应该有同一尺寸,如20 * 20,并放在相应文件目录下,
◆ 集合文件格式(collection file format)和描述文件格式(description file format)
集合文件格式(collection file format)就是如下形的描述文件:
[filename]
[filename]
[filename]
…
描述文件格式(description file format)就是如下形的描述文件:
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
[filename] [# of objects] [[x y width height] [... 2nd obje