OPENCV ADABOOST人脸检测训练程序阅读笔记(LBP特征)

合集下载

人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIBOpenCV人脸检测方法及对比)

人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIBOpenCV人脸检测方法及对比)

⼈脸检测学习笔记(数据集-DLIB⼈脸检测原理-DLIBOpenCV⼈脸检测⽅法及对⽐)1.Easily Create High Quality Object Detectors with Deep Learning2016/10/11dlib中的MMOD实现使⽤HOG特征提取,然后使⽤单个线性过滤器。

这意味着它⽆法学习检测出具有复杂姿势变化的物体。

HOG:⽅向梯度直⽅图(Histogram of oriented gradient)是在计算机视觉和图像处理领域⽤于⽬标检测的特征描述器。

⼈脸检测基准FDDB有两种模式:10倍交叉验证和不受限制。

两者都在同⼀数据集上进⾏测试,但在10倍交叉验证模式下,您只能对FDDB 数据集中的数据进⾏训练。

在⽆限制模式下,您可以训练您喜欢的任何数据,只要它不包含来⾃FDDB的图像。

FDDB站点:⼈脸数据集:FDDB、ImageNet、AFLW、Pascal VOC、VGG、WIDER 、Ibug(https:///resources/facial-point-annotations/)、facescrub()等。

2.dlib-models(1)mmod_human_face_detector是在这个数据集上训练的:http:///files/data/dlib_face_detection_dataset-2016-09-30.tar.gz。

作者通过在许多公开可⽤的图像数据集(不包括FDDB数据集)中查找⼈脸图像来创建数据集。

特别是,有来⾃ImageNet,AFLW,Pascal VOC,VGG数据集,WIDER和facescrub的图像。

数据集中的所有注释都是由作者使⽤dlib的imglab⼯具创建的。

mmod_human_face_detector 包含两种模式。

不能⼈脸识别。

(2)shape_predictor_68_face_landmarks.dat.bz2这是在ibug 300-W数据集上训练的()。

openCV的图像处理计算机视觉学习笔记-人脸检测

openCV的图像处理计算机视觉学习笔记-人脸检测

In [1]:from imutils import*In [2]:image = imread('face.png')show(image)1. image:输入图像2. scaleFactor=1.1:这个是每次缩小图像的比例,默认是1.13. minNeighbors=3:匹配成功所需要的周围矩形框的数目,每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在的时候,才认为是匹配成功,比如人脸,这个默认值是3。

4. minSize:匹配人脸的最小范围5. flags=0:可以取如下这些值:CASCADE_DO_CANNY_PRUNING=1, 利用canny边缘检测来排除一些边缘很少或者很多的图像区域CASCADE_SCALE_IMAGE=2, 正常比例检测CASCADE_FIND_BIGGEST_OBJECT=4, 只检测最大的物体CASCADE_DO_ROUGH_SEARCH=8 初略的检测In [3]:# 级联分类器detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=2, minSize=(10, 10), flags=cv for (x,y,w,h) in rects:# 画矩形框cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)show(image)In [4]:def facedetect(image):image = imread(image)# 级联分类器detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")rects = detector.detectMultiScale(image, scaleFactor=1.1, minNeighbors=2, minSize=(10, 10), flag for (x,y,w,h) in rects:# 画矩形框cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)show(image)In [5]:facedetect('Solvay.jpg')In [ ]:。

OpenCV学习笔记人脸检测的代码分析

OpenCV学习笔记人脸检测的代码分析

OpenCV学习笔记人脸检测的代码分析一、预备知识:1、动态内存存储及操作函数CvMemStoragetypedef struct CvMemStorage{struct CvMemBlock* bottom;/* first allocated block */struct CvMemBlock* top; /* the current memory block - top of the stack */struct CvMemStorage* parent; /* borrows new blocks from */int block_size; /* block size */int free_space; /* free space in the top block (in bytes) */} CvMemStorage;内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据结构的底层结构。

它是由一系列以同等大小的内存块构成,呈列表型---bottom 域指的是列首,top 域指的是当前指向的块但未必是列尾.在bottom和top之间所有的块(包括bottom, 不包括top)被完全占据了空间;在top和列尾之间所有的块(包括块尾,不包括top)则是空的;而top 块本身则被占据了部分空间-- free_space 指的是top块剩余的空字节数。

新分配的内存缓冲区(或显示的通过cvMemStorageAlloc 函数分配,或隐示的通过cvSeqPush, cvGraphAddEdge等高级函数分配)总是起始于当前块(即top块)的剩余那部分,如果剩余那部分能满足要求(够分配的大小)。

分配后,free_space 就减少了新分配的那部分内存大小,外加一些用来保存适当列型的附加大小。

当top块的剩余空间无法满足被分配的块(缓冲区)大小时,top块的下一个存储块被置为当前块(新的top块)-- free_space 被置为先前分配的整个块的大小。

LBP特征ADABOOST分类器

LBP特征ADABOOST分类器
第四章 特征级图像融合
本章首先介绍了特征级融合的现状。基于特征级融合的流程一般基于图像识别的预分 割、特征提取、分类器三层次框架,随后本文从特征提取和分类器两方面进行了介绍。随后 基于SAR图像特点,重点介绍了本文针对SAR图像特点采用的基于Meanshift初分割;马尔 可夫随机场特征和LBP特征,以及AdaBoost分类器的特征级融合方案。
∑ (a) 归一化权重ωt,i ←
ωt ,i ωn
j t,j
h(x)
=
⎧⎪1 ⎨ ⎪⎩0
∑ ∑ α h T t=1 t t
(x)

1 2
α T
t=1 t
otherwise
(b) 对每一个特征 j 训练一个分类器 hj ,hj 由一个特征产生。误差与ωt 有关,
∑ 为 ε j = iωi hj (xi ) − yi
种关系。
目前基于特征融合的算法还比较分散,没有形成较为统一的理论框架。其中
Datcu及其研究小组的工作较为引人注明[48][49][50][51][52]。他们基于特征学
47F
48F
49F
50FLeabharlann 51F习和聚类研究,提出了基于多源遥感图像融合的数据挖掘研究框架。该框架基于
马尔可夫场理论对各类图像进行特征提取工作,随后基于K均值等算法,在特征
在此近似的条件下,MPL 参数估计就是使得伪似然概率 p({xs}) 最大或对数 伪似然概率 log p({xs}) 最大的 θ 值,即:
91
θ
=
arg
max θ
log

({xs})
(4.8)
定义2. GMRF参数估计: 用局部概率的乘积代替联合概率分布,得到伪似 然方程:

LBP算法(人脸识别特征提取)

LBP算法(人脸识别特征提取)

LBP算法(人脸识别特征提取)LBP(Local Binary Patterns)算法是一种用于人脸识别中的特征提取算法。

该算法能够有效地描述图像局部纹理特征,通过将图像划分为不同的区域,并计算每个区域的局部二值模式(Local Binary Pattern),从而提取出图像的纹理特征。

本文将介绍LBP算法的原理、应用以及算法的优缺点。

LBP算法的原理是基于图像局部纹理的分布统计。

算法首先将图像划分为若干个重叠的圆形区域,然后选取每个区域的中心像素点作为参考点,根据参考点和周围像素的灰度值大小关系,将周围像素的灰度值二值化。

具体而言,如果周围像素的灰度值大于或等于参考点的灰度值,则将其对应位置的二值设置为1,否则设置为0。

这样,就得到了一个局部二值模式。

对于每个局部二值模式,在其周围像素形成的二进制数中,可以计算出一个十进制的值,该值即为对应的LBP值。

然后,可以统计整个图像中不同LBP值的出现次数,以得到该图像的纹理特征向量。

为了保持LBP特征的旋转不变性,通常将计算得到的纹理特征向量进行旋转不变模式(Rotation-Invariant Patterns)的处理。

LBP算法在人脸识别中的应用非常广泛。

通过提取图像的纹理特征,LBP算法能够有效地区分人脸图像中不同的区域,从而实现人脸检测、人脸识别等任务。

与其他特征提取算法相比,LBP算法具有计算简单、计算效率高以及对光照变化、表情变化等具有较强的鲁棒性的优点。

然而,LBP算法也存在一些缺点。

首先,LBP算法提取的特征主要反映了图像的纹理信息,对于人脸的形状、结构等特征没有很好的表达能力。

其次,LBP算法对于像素点近邻选择的问题较为敏感,不同的近邻选择可能会导致特征的差异。

最后,LBP算法没有考虑像素点的空间关系,在一些图像中可能导致特征提取不准确。

为了克服这些缺点,研究人员对LBP算法进行了改进和扩展,提出了许多改进的LBP算法。

例如,Extended LBP(ELBP)算法结合了LBP算法和傅里叶描述子,融合了纹理和形状信息;Uniform LBP(ULBP)算法通过将LBP值分为不同的均匀模式,增强了特征的区分能力和鲁棒性;Multi-scale LBP(MLBP)算法在不同尺度下提取LBP特征,增强了特征的描述能力。

基于OpenCV人脸检测技术的研究及实现

基于OpenCV人脸检测技术的研究及实现

基于OpenCV人脸检测技术的研究及实现作者:王洋郑佳春来源:《物联网技术》2018年第03期摘要:为了在视频流中准确检测到人脸,文中基于OpenCV设计了一个人脸检测系统。

使用Haar和LBP两种算子提取特征,通过AdaBoost算法构造级联分类器,检测出人脸区域。

通过计算机仿真验证,发现采用LBP算子提取特征的正面检测率更高,达90%以上,且检测时间更短,平均检测时间降低1个数量级,取得了较好的效果。

该模块可移植性强,可扩展,为后续研究打下了良好的基础。

关键词:视频流;特征提取;局部二值模式;人脸检测中图分类号:TP39:U644.8 文献标识码:A 文章编号:2095-1302(2018)03-0081-03O引言随着计算机技术和数字成像技术的进步,机器视觉技术蓬勃发展。

人脸识别—直是计算机视觉和人工智能中的重要问题。

人脸识别技术因无需与用户进行肢体接触,使用简单、安全,经过几十年的研究和发展,已成为一项热门的研究课题,受到越来越多研究者的重视。

该技术可广泛应用于公共场所人口统计及视频监控,安全驾驶提醒,门禁管理系统等相关领域。

因此找到一个高效明了的算子提取特征描述人脸和分类器至关重要。

研究者为此提出了主成分分析法(PCA)、线性判别式分析(LDA)等全局描述方法和Haar特征与LBP特征等局部描述的特征等。

局部特征在不同的光照及姿态和复杂环境下,具有较强的鲁棒性,得到了广泛应用。

本文利用Visual Studio 2013和开源计算机视觉平台OpenCV搭建了一个人脸识别模块,利用Haar和LBP两种算子提取特征,进行视频流的人脸识别。

该模块搭建方便,可移植性强,在Windows,Android和iOS系统上均可实现。

1人脸识别模块1.1 Haar特征Haar特征是以图像灰度分布为基础并反映图像灰度值变化的一种特征,主要是由黑白矩阵像素组合而成的不同模板,包含边缘特征、线性特征、中心环绕特征。

opencv adaboost人脸检测训练程序阅读笔记(LBP特征)

opencv adaboost人脸检测训练程序阅读笔记(LBP特征)

1、训练程序整体流程(1)读输入参数并打印相关信息(2)进入训练程序最外层入口classifier.train1)读正负样本,将正负样本放入imgLiast中,先读正样本,后读负样本2)load( dirName )判断之前是否有已训练好的xml文件,若有,不在重新训练该stage的xml文件,没有返回false,初始化参数3)计算requiredLeafFARate = pow(maxFalseAlarm,numStages)/max_depth,该参数是stage停止条件(利用训练样本集来计算tempLeafFARate,若tempLeafFARate小于这一参数,则退出stage训练循环);4)Stage训练循环5)更新训练样本集,计算tempLeafFARate(负样本被预测为正样本的个数除以读取负样本的次数,第一次没有训练之前,这个比值为1,因为没训练之前,所有负样本都被预测成了正样本,当第一层训练好以后,负样本采集时会先用第一层的分类器预测一次,若能分类,则不选用,选用负样本的数目是固定的,但选用这么多负样本总共要选的次数会随着层数的增多而加大,因为层数越大,分类器的分类能力也要求越大,说需要的样本就是前面分类器所不恩呢该识别的,故在采集时也比较困难。

)6)判断stage是否退出训练,若tempLeafFARate<requiredLeafFARate则退出stage训练,否则继续;7)强训练器训练入口tempStage->train()a.建立训练数据data = new CvCascadeBoostTrainData(主要是一些参数的设置,还有特征值的计算)b.初始化样本权重update_weights( 0 );c.弱分类器训练循环i)tree->train—》do_trainai) 根节点的初始root = data->subsample_data( _subsample_idx );(主要是对根节点的一些参数进行初始化,parent 0,count 1,split 0,value 0,class_idx 0,maxlr 0,left = right = 0,等等)bi) CV_CALL( try_split_node(root)),根据根节点计算整颗数的各节点的参数配置aii) calc_node_value( node );计算节点的回归值,类似于分类投票值sum(w*class_lable),正样本的class_lable取,负样本的class_lable取-1;计算节点的风险值node_risk,noderisk is the sum of squared errors: sum_i((Y_i -<node_value>)^2)bii) 判断节点是否可以分裂(判断依据:样本值和设计的节点最大深度);再利用node_risk与regression_accuracy,如果这个节点的所有训练样本的节点估计值的绝对差小于这个参数,节点不再进行分裂cii) 找出最佳分裂best_split = find_best_split(node);aiii) 定义DTreeBestSplitFinder finder( this, node );biii) parallel_reduce(cv::BlockedRange(0, data->var_count), finder);此时调用DTreeBestSplitFinder类的操作符DTreeBestSplitFinder::operator()(constBlockedRange& range)aiv) 遍历所有特征vi = vi1; vi< vi2; vi++biv) res = tree->find_split_cat_reg()得到特征为split->var_idx = vi的最佳分裂的质量split->quality(split->quality越大越好)av) 将特征为vi所有样本的特征值返回到cat_labelsbv) 计算每个特征值取值不权值和和响应和,例如特征值为,则将所有特征值列表中特征值为的样本权值相加,LBP的特征值范围是0~255,故有256个categorycv) 计算每个category的平均响应值,即将每个category的响应和除以每个category的样本权值和dv) icvSortDblPtr( sum_ptr, mi, 0 );把256个值进行升序排序,注意sum_ptr里存的是sum[i]的地址,这里排序的依据是特征值还是按照每个特征值的平均响应来排序???个人感觉是按特征值的平均响应来排序fv) 将每个特征值的平均响应值乘以该特征值的总权值得到每个特征值的总响应gv) 遍历subset_i = 0; subset_i< mi-1; subset_i++avi) 计算索引是subset_i在排序前的idxbvi) 获取索引idx对应的样本总权重cvi) 获取索引idx对应的样本总响应dvi) 以subset_i为分裂点,计算分裂质量(sumL*sumL)/ weightL +(sumR*sumR)/ weightRfvi) 若最佳分裂质量小于这个质量,则更新最佳分裂质量hv) 经过训练得到最佳分裂点和最佳分裂质量,将遍历得到的值更新到split结构体各参数。

一种改进的LBP特征的人脸识别方法

一种改进的LBP特征的人脸识别方法

表4 改进后的音频生命探测仪滤波范围设置
高频滤波器音频设定范围
1000Hz—1300Hz
低频滤波器音频设定范围
15Hz—850Hz
图3.1是用凯塞窗函数设计的FIR数字带通滤波器,通带
范围为1000Hz到1300Hz,阻带范围为15Hz到850Hz、1500Hz到
4500Hz,阻带波纹为0.01dB,通带波纹为0.05dB,信号采样频率
由于本文处理的图片是事先归一化好的,所以略去了人脸 检测和人眼定位这两部分,最后,本文利用matlab语言开发了一 个简单的识别系统,程序界面如图3:
这样,由20种不同大小的区域产生的特征总数为7141个。 相比传统的图像块划分的方法产生的几十个特征,这几千个特 征能够很详尽地、充分地对人脸的纹理信息进行描述。利用 AdaBoost算法根据阈值挑选出错误率最小的弱分类器(即特 征)。本文中弱分类器的定义如下:
2 LBP人脸特征的提取
通常在进行LBP特征提取前,需要对人脸图片进行大小归一 化,以保证利用LBP得到的直方图有相同的数量的LBP值。一般 都是利用两眼的坐标对图像进行归一化,使所比较的图片的大 小一致,并消除旋转,本文中归一化后图片的大小为120×110。
3 样本和特征的构造和挑选
对于120×110大小的图片由第1种矩形块生成的特征个数 是:
为19980Hz。
根据图3.2我们可以看出这种改进了滤波范围的窗函数法
能在很低的输入信噪比条件下,取得很好的去噪效果。这就说
明运用这种方法能有效地从地震现场的人声污染中找到所需
要的小孩的呼救声信号。
图3.1改进后的Kaiser窗
图3.2(b)输入信噪比SNR=-10时的改进滤波
4 结语
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、训练程序整体流程(1)读输入参数并打印相关信息(2)进入训练程序最外层入口classifier.train1)读正负样本,将正负样本放入imgLiast中,先读正样本,后读负样本2)load(dirName)判断之前是否有已训练好的xml文件,若有,不在重新训练该stage的xml文件,没有返回false,初始化参数3)计算requiredLeafFARate=pow(maxFalseAlarm,numStages)/max_depth,该参数是stage停止条件(利用训练样本集来计算tempLeafFARate,若tempLeafFARate小于这一参数,则退出stage训练循环);4)Stage训练循环5)更新训练样本集,计算tempLeafFARate(负样本被预测为正样本的个数除以读取负样本的次数,第一次没有训练之前,这个比值为1,因为没训练之前,所有负样本都被预测成了正样本,当第一层训练好以后,负样本采集时会先用第一层的分类器预测一次,若能分类,则不选用,选用负样本的数目是固定的,但选用这么多负样本总共要选的次数会随着层数的增多而加大,因为层数越大,分类器的分类能力也要求越大,说需要的样本就是前面分类器所不恩呢该识别的,故在采集时也比较困难。

)6)判断stage是否退出训练,若tempLeafFARate<requiredLeafFARate则退出stage训练,否则继续;7)强训练器训练入口tempStage->train()a.建立训练数据data=new CvCascadeBoostTrainData(主要是一些参数的设置,还有特征值的计算)b.初始化样本权重update_weights(0);c.弱分类器训练循环i)tree->train—》do_trainai)根节点的初始root=data->subsample_data(_subsample_idx);(主要是对根节点的一些参数进行初始化,parent0,count1,split0,value0,class_idx0,maxlr0,left=right=0,等等)bi)CV_CALL(try_split_node(root)),根据根节点计算整颗数的各节点的参数配置aii)calc_node_value(node);计算节点的回归值,类似于分类投票值sum(w*class_lable),正样本的class_lable取,负样本的class_lable取-1;计算节点的风险值node_risk,noderisk is the sum of squared errors:sum_i((Y_i-<node_value>)^2)bii)判断节点是否可以分裂(判断依据:样本值和设计的节点最大深度);再利用node_risk与regression_accuracy,如果这个节点的所有训练样本的节点估计值的绝对差小于这个参数,节点不再进行分裂cii)找出最佳分裂best_split=find_best_split(node);aiii)定义DTreeBestSplitFinder finder(this,node);biii)parallel_reduce(cv::BlockedRange(0,data->var_count),finder);此时调用DTreeBestSplitFinder类的操作符DTreeBestSplitFinder::operator()(constBlockedRange&range)aiv)遍历所有特征vi=vi1;vi<vi2;vi++biv)res=tree->find_split_cat_reg()得到特征为split->var_idx=vi的最佳分裂的质量split->quality(split->quality越大越好)av)将特征为vi所有样本的特征值返回到cat_labelsbv)计算每个特征值取值不权值和和响应和,例如特征值为,则将所有特征值列表中特征值为的样本权值相加,LBP的特征值范围是0~255,故有256个categorycv)计算每个category的平均响应值,即将每个category的响应和除以每个category的样本权值和dv)icvSortDblPtr(sum_ptr,mi,0);把256个值进行升序排序,注意sum_ptr里存的是sum[i]的地址,这里排序的依据是特征值还是按照每个特征值的平均响应来排序???个人感觉是按特征值的平均响应来排序fv)将每个特征值的平均响应值乘以该特征值的总权值得到每个特征值的总响应gv)遍历subset_i=0;subset_i<mi-1;subset_i++avi)计算索引是subset_i在排序前的idxbvi)获取索引idx对应的样本总权重cvi)获取索引idx对应的样本总响应dvi)以subset_i为分裂点,计算分裂质量(sumL*sumL)/weightL+(sumR*sumR)/weightRfvi)若最佳分裂质量小于这个质量,则更新最佳分裂质量hv)经过训练得到最佳分裂点和最佳分裂质量,将遍历得到的值更新到split结构体各参数。

Iv)得到该特征对应的split->subset,for(i=0;i<=best_subset;i++)avi)计算索引是i在排序前的idxbvi)split->subset[idx>>5]|=1<<(idx&31);subset[8],每个数组里存放32位的整数,整数值由idx决定,idx也就是特征值大小civ)若bestSplit->quality<split->quality,将split拷贝到bestSplitciii)初始化一个bestSplit,将finder.bestSplit拷贝到bestSplit,并返回bestSplitdii)将bestSplit赋给node->spliteii)计算节点方向quality_scale=calc_node_dir(node);aiii)获取最佳特征的索引vibiii)遍历所有样本i=0;i<n;i++aiv)计算第i个样本的特征为vi的特征值idxbiv)获取第i个样本的权重wciv)d=idx>=0?CV_DTREE_CAT_DIR(idx,subset):0CV_DTREE_CAT_DIR(idx,subset)=(2*((subset[(idx)>>5]&(1<<((idx)&31)))==0)-1)(d=1或者d=-1)div)sum+=d*w;sum_abs+=(d&1)*wfiv)dir[i]=(char)d;ciii)R=(sum_abs+sum)*0.5;(取向正样本的所有权重和)diii)L=(sum_abs-sum)*0.5;;(取向负样本的所有权重和)fiii)node->maxlr=MAX(L,R);giii)返回node->split->quality/(L+R);fii)split_node_data(node);aiii)complete_node_dir(node);对每个样本的归类属性再一次定义,确保每个样本要么分到左边要么分到右边biii)遍历样本,得到左节点和右节点的样本数nl和nrciii)对左节点和右节点初始化diii)分别计算左节点和右节点的每个特征对应的分类样本数(这中间的代码不是很懂!!!)gii)try_split_node(node->left);Iii)try_split_node(node->right);ii)cvSeqPush(weak,&tree);将训练好的树添加到弱分类器重iii)update_weights(tree);更新样本权重ai)weak_eval[i]=f(x_i)in[-1,1]对应代码为weak_eval->data.db[i]*=-orig_response->data.i[i];i为0~n-1,n为样本数目bi)w_i*=exp(-y_i*f(x_i))iv)trim_weights();调整权重,但在程序中未看出调整,该函数是根据更新后的权重调整subsample_mask的数据,即利用阈值判断正样本被检测正确的将subsample_mask的数据赋值为1;v)强制退出循环判断cvCountNonZero(subsample_mask),若subsample_mask中数据全为0,则直接退出弱分类器循环,这种情况应该不会出现d.弱分类器训练循环终止条件判断while(!isErrDesired()&&(weak->total<params.weak_count));(isErrDesired()计算负样本的虚警率,若小于maxfalserat返回true,反之返回false;isErrDesired()还计算stage阈值,具体计算过程:对正样本进行预测,预测值放在eval向量中,对向量中的预测值排序(本人默认为升序),计算阈值索引int thresholdIdx= (int)((1.0F-minHitRate)*numPos);threshold=eval[thresholdIdx];这样在检测时,根据叶子节点的预测值小于这个阈值即认为是负样本)8)如果强分类器重弱分类器的个数大于0,返回ture,否则返回false9)返回ture时输出和打印相关信息,否则退出stage循环10)保存stage的xml文件(3)输出和打印相关信息。

相关文档
最新文档