如何利用OpenCV自带的级联分类器训练程序训练分类器

如何利用OpenCV自带的级联分类器训练程序训练分类器,第1张

首先,需要说明的是,OpenCV自带的haar training提取的特征是haar特征 分类器是AdaBoost级联分类器(如需了解Adaboost算法, 。所谓的级联分类器,就是将若干的简单的分量分类器(可以理解为一般的普通分类器)依次串联起来,最终的检测分类结果,要依次通过所有的分量分类器才能算是一个有效的检测分类结果。否则,就认为当前检测区域内没有我们需要找的目标。

利用OpenCV自带的haar training程序训练一个分类器,需要经过以下几个步骤:

(1)收集训练样本

训练样本包括正样本和负样本。正样本,通俗点说,就是图片中只有你需要的目标。而负样本的图片只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。例如,你需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的图片,而负样本显然不能是一些包含天空的,海洋的,风景的图片。因为你最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的图片应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的图片。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。

另外,需要提醒的是,adaboost方法也是机器学习中的一个经典算法,而机器学习算法的前提条件是,测试样本和训练样本独立同分布。所谓的独立同分布,可以简单理解为:训练样本要和最终的应用场合非常接近或者一致。否则,基于机器学习的算法并不能保证算法的有效性。此外,足够的训练样本(至少得几千张正样本、几千张负样本)也是保证训练算法有效性的一个前提条件。

1.“与逻辑”线性分类器的设计与逻辑的真值表和逻辑值分布如下所示:

其中“o”表示逻辑0,“*”表示逻辑“1”。matlab程序如下:x=[0,0,1,10,1,0,1] t=[0,1,1,1][R,Q]=size(x)[S,Q]=size(t)M=20W=[-0.1 0.2]Wc=W'C=rands(S,1)Y=W*x+Cfor j=1:Mfor i=1:4if Y(1,i)>0F(1,i)=1else,F(1,i)=0endendif all(F==t)breakenddW=(t-F)*x'E=[0.010.010.010.01]W=W+dWWz(:,j)=WY=W*x+Cendplotpv(x,t)plotpc(W,C)grid onxlabel('x1')ylabel('x2')“与逻辑”线性可分的matlab仿真如下:

2.“或逻辑”线性分类器的设计或逻辑的真值表和逻辑值分布如下所示:

其中“o”表示逻辑0,“*”表示逻辑“1”。matlab程序如下:x=[0,0,1,10,1,0,1]t=[0,1,1,1][R,Q]=size(x)[S,Q]=size(t)M=20W=[-0.1 0.2]Wc=W'C=rands(S,1)Y=W*x+Cfor j=1:Mfor i=1:4if Y(1,i)>0F(1,i)=1else,F(1,i)=0endendif all(F==t)breakenddW=(t-F)*x'E=[0.010.010.010.01]W=W+dWWz(:,j)=WY=W*x+Cendplotpv(x,t)plotpc(W,C)grid onxlabel('x1')ylabel('x2')“与逻辑”线性可分的matlab仿真如下:

望采纳 谢谢


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10944452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存