OpenCV3.1.0级联分类器训练与使用

OpenCV3.1.0级联分类器训练与使用
2018-04-04阅读 6850
OpenCV3.1.0级联分类器训练与使用
级联分类器第一次出现是由Viola-Jones在2001时候提出,其主要用来实现实时人脸检测,通过加载已经训练好的级联分类器数据,实现快速的级联分类器过滤,达到实时检测。这个过程可以表示如下:

其主要思想是首先通过一些简单的HAAR/LBP特征来快速过滤掉大多数非目标区域,然后通过迭代的方式不断添加特征数目从而达到高识别率,低拒绝率。在计算HAAR特征数据时候采用积分图像实现快速计算,最终实现整个过程的实时快速。在整个检测过程中训练好的级联分类器数据作用直接决定着对象检测率。

OpenCV中自带的HAAR/LBP级联检测器的数据多数都是关于人脸检测的,而在实际项目应用中,我们可能需要从不同的场景中检测某个相同对象,这种需求可以通过OpenCV中HAAR/LBP级联分类器训练工具来生成自己的级联分类器数据,然后通过程序实现自定义对象检测。而要想实现这个过程需要如下几步

一:样本数据准备
正样本

正样本要做到格式与大小一致,如果有背景的话,背景尽量统一,建议处理为黑色。正样本最少的集合在200张图片左右,然后必须有一个文本描述文件,总结起来如下图所示:

有了样本数据之后,可以通过OpenCV3.1.0中自带的工具opencv_createsamples.exe来生成正样本的.vec文件,通过命令行调用该工具即可,具体执行步骤如下:

负样本

负样本图像尽量要选取不同尺寸,不同背景的,但是里面不包含检测对象的图像,来源有两个 一是自己从网上获取,下载 二是从本地相册中选择,然后适当的裁剪 最终形成的负样本数据列表文本文件大致如下:

二:训练级联分类器
使用OpenCV3.1中自带的opencv_traincascade.exe工具输入适当的参数即可进行样本训练,在进行样本训练过程中会生成一些列的中间数据,格式均为XML,如果输入的参数适当,最终会完成样本训练得到cascade.xml文件,它就是级联分类器特征数据,通过程序加载它,然后调用OpenCV中级联分类器相关API即可实现对象分类检测。样本训练执行命令如下:

参数说明如下:

-numPos

表示每个Stage的正样本数目,必须小于总正样本数

-numNeg

表示每个Stage的负样本数目,可以大于等于总负样本数目

-featureType

表示特征类型,当前OpenCV3.x只支持HAAR与LBP

-numStages

表示多少个Stage,Stage的多少跟样本有直接关系。Stage数目过多,样本不足会导致训练无法继续进行。

-w

表示正样本的宽度,必须与创建vec文件时声明中保持一致

-h

表示正样本的高度,必须与创建vec文件时声明中保持一致

-minHitRate

表示最小命中率,用来衡量每层训练目标准确度

-maxFalseAlarmRate

最大虚警率(误检率),虚警过小可能导致特征过拟合,训练效果不好。默认是0.5

在正负样本1:1或者1:10的时候训练效果都不会太好,一般负数目应该是正样本数目的3~5倍左右。

三:常见错误分析
-Train dataset for temp stage can not be filled. Branch training terminated

出现这个错误的原因是正样本数据不够,而声明的Stage数目过多,解决这个问题一是增加样本数量,二是减小Stage数目。或者还有可能是负样本数据不足,或者样本数据的路径不正确。

-Traincascade Error: Bad argument (Can not get new positive sample. Themost possible reason is insufficient count of samples in given vec-file)

原因是训练时候-numPos 参数设置的正样本数目超过或者等于了总正样本数

四:使用训练数据的代码演示
小编采集了185个人脸图片,224个负样本图片,都来自互联网上。分别采用HAAR与LBP级联训练得到的级联分类器数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python对于OpenCV分类训练非常方便,可以通过几个简单的步骤,轻松地完成自己的XML文件训练。 第一步是准备训练数据集。训练集应该包括正面和负面的例子,正面的例子是要识别的目标,负面的例子则是不包含目标的图像。 第二步是进行数据预处理。这包括将图像转换为灰度图像,以及对其进行缩小和正规化。这样有助于提高分类的准确性和效率。 第三步是使用OpenCV提供的Cascade Trainer GUI工具进行分类训练。这个工具可以通过交互式界面来设置训练参数,例如正负样本的路径、级深度、检测窗口大小等等。训练完成后,级分类就会在指定的.xml文件中保存。 第四步是使用训练好的分类进行目标检测。可以使用OpenCV提供的Cascade Classifier类来加载分类文件,并应用于图像或视频数据。这个类可以方便地进行级分类的检测和识别。 总的来说,Python对于OpenCV分类训练和应用非常方便和灵活,可以应用于许多实际场景中,如人脸识别、车辆检测等。需要注意的是,训练过程需要耗费大量的计算资源和时间,因此应该选择适当的硬件设备和训练数据集,以获得更好的效果。 ### 回答2: Python对OpenCV的级分类训练可以实现自己的XML文件。级分类是一种基于机学习的图像识别技术,主要用于目标分类、物体检测等。OpenCV是一个开源的计算机视觉库,提供了丰富的图像和视频处理功能。Python是一种高级编程语言,通常用于数据分析和人工智能领域。 Python对OpenCV的级分类训练可以通过以下步骤实现: 1. 收集样本数据:首先需要收集足够多的正负样本数据,正样本用于训练模型,负样本用于补充训练,提高模型准确率。 2. 特征提取:使用OpenCV中的Haar特征进行图像特征提取,以此确定图像中是否存在目标物体。Haar特征是基于图像亮度和对比度变化的一种特征表示方法。 3. 训练模型:使用Python对OpenCV中的级分类进行训练,根据样本数据和特征提取结果,训练模型,并反复迭代优化。 4. 测试模型:完成模型训练后,需要对模型进行测试,验证其在测试数据集中的准确率。 5. 生成XML文件:当训练好了模型后,需要将其保存为XML文件。XML文件包含了训练好的模型参数,可以通过OpenCV的CascadeClassifier类进行加载和应用。 总的来说,Python对OpenCV的级分类训练可以帮助用户创建自己的图像识别模型,并将其保存为XML文件,以便后续应用。该技术具有广泛的应用场景,例如人脸识别、车牌识别、物体检测等。 ### 回答3: Python对OpenCV的级分类训练,可以通过利用分类训练工具Cascade Trainer GUI和HaarTraining.exe,在windows或者Linux/Mac OS系统下进行相关操作,实现自己的级分类训练,生成属于自己的xml文件。 通过一系列的步骤操作,可以在OpenCV中准确地训练一个线性分类。首先,需要进行正样本的收集,这些正样本应该是需要被检测的目标,比如人脸等等。其次,需要进行负样本的收集,这些负样本应该是和目标无关的固定的图像。然后,需要根据正负样本进行训练,选择合适的参数和特征,应用级分类,并进行训练,最终训练出一个能够准确判断图像中是否包含目标的级分类。最后,生成与自己训练的级分类相匹配的XML文件,该XML文件中包含了训练好的特征和参数,可以被导入到其他项目中进行相似的目标检测。 利用级分类进行图像检测,可以帮助我们提高检测的准确度和效率。它在训练时,能够自动选择极具区分性的特征来提高处置速度,达到更好的检测效果。 总之,Python对OpenCV的级分类训练,可以根据需要的检测目标,利用相应的工具和步骤,进行训练和生成相应的XML文件。这种方法能够有效地解决图像目标检测的问题,提高识别的准确度和效率,并具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值