openCV训练分类器是一些错误及解决办法

      昨天看了一天的opencv训练分类器的资料,想自己试试。经过昨天一天的折腾终于成功的训练出了自己的分类器,虽然效果不好,但是是个好的开端。在整个过程中我遇到了很多问题,在这里和大家分享一下,希望对你有帮助。

      1.正样本的创建过程基本上按照以下步骤:

      1) 制作一个正样本描述文件,用于描述正样本文件名(包括绝对路径或相对路径),正样本数目以及各正样本在图片中的位置和大小。典型的正样本描述文件如下:
      face_100/face00001.bmp 1 0 0 20 20
      face_100/face00002.bmp 1 0 0 20 20
      face_100/face00003.bmp 1 0 0 20 20

可采用Dos命令结合EditPlus软件生成样本描述文件。具体方法是在Dos下的恰当目录敲入dir face_100 /b > samples.dat,则会生成一个samples.dat,里面包含所有正样本文件名列表,但没有相对路径名和正样本位置信息。在samples.dat文件各行行首增加“face _100/”的方法是使用EditPlus,先选中所有行,然后按Tab键为每行增加一个制表位,然后将制表位全部替换为“face _100/”即可。通过将“bmp”替换为“bmp 1 0 0 20 20”即可在每行添加“1 0 0 20 20”。


2) 运行CreateSamples程序。如果直接在VC环境下运行,可以在Project\Settings\Debug属性页的Program arguments栏设置运行参数。下面是一个运行参数示例:
-info F:\FaceDetect\samples.dat -vec F:\FaceDetect\samples.vec -num 200 -w 20 -h 20
表示有200个样本,样本宽20,高20,正样本描述文件为samples.dat,结果输出到samples.vec。


3) 运行完了会生成一个*.vec的文件。该文件包含正样本数目,宽高以及所有样本图像数据

需要注意:1、人脸的样本库如何获得,我选择的是ORL人脸样本库,这个可能使用的比较多,但是这个样本库人脸的大小是92*112,最好预先裁剪成20*20,可用PS的批处理操作完成,具体步骤找百度。

2、人脸样本大小最好是20*20~25*25,不要太大,否则计算量太大,容易内存不足

3、样本尽可能的多

4、编辑描述文件时软件的选择,我选择的是DOS+Notepad++,  Editplus没有找的纯净的版本,下了一个带病毒的,让我郁闷。


      2、负样本的创建过程

      过程基本上和正样本一样,但是

1,负样本不用像正样本一样创建.vec文件,只需要.dat文件就行。


2、负样本的描述文件不用有负样本的详细描述信息(如:1 0 0 20 20)只需要相对路径或绝对路径和图片文件名即可,这点切记,我在这吃了大亏。


3、图样本图片不能太大,这一点也要切记,还有虽然opencv中可以自动将负样本文件大小剪裁成与正样本大小一致,但是我们最好提前自己剪裁好,这样可以减少内存不足错误,并且增加训练速度。

      3、训练过程

       训练过程我遇到的困难最多,话费的时间最长,主要是正样本与负样本创建的不规范有关,训练过程错误提示主要遇到了三种,1)没有标识;2)无效的背景描述文件(如样本描述文件);3)内存不足。

       1、没有标识错误原因(没弄太清楚),个人认为是没有找到相应的图片文件,解决办法是检查你的Dos环境,运行opencv_haartraining.exe时,你的路径在哪,比如你的路径是E:\shiyan->,那么你的正样本和负样本描述文件里就是相对路径,反之亦然。2)参数-npos和-nneg值必须与描述文件一致。3)仔细检查命令有没有打错

       2、无效的背景描述文件解决方法1)opencv_haartraining.exe参数-w和-h值需要和负样本一致(强烈建议,正样本和负样本提前裁剪成一致大小,避免此处出错);2)前面提到的负样本描述文件里不需要样本的详细信息(这是我最后发现的一个问题,看资料要仔细呀)

       3、内存不足解决办法:1)正样本和负样本的大小不宜过大,一般为20*20,不宜超过25*25;2)负样本的数量不宜过多,负样本数量过多,增加计算量


以上就是我在训练自己的分类器时遇到的问题及解决办法,希望对你有用。其实还有一些问题没有弄清楚,待后续补充,也希望你有好的解决方法,及时回复,大家共同进步。

1.负样本的数量?看了很多资料负样本的数量一般都是大于等于正样本数量,能否小于呢?有待验证

2.分类器的级数怎么确定,原则是什么?

如果你知道答案,请回复,谢谢。

欢迎大家转载,但请标明出处,谢谢!




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV级联分类器快速训练工具是一个用于训练级联分类器的工具。级联分类器是一种用于目标检测的机器学习算法,它可以在图像中快速识别并定位出特定的目标物体。 这个工具提供了一个简单而高效的方法,可以通过输入一系列正样本和负样本图像来训练级联分类器。正样本图像是包含待检测目标的图像,而负样本则是不包含目标的图像。 训练过程分为多个阶段,每个阶段都会对图像进行一系列的特征提取和分类器训练的操作。在每个阶段,分类器会根据当前的分类准确度和错误率进行更新和优化,从而逐步提高检测的准确性和速度。 值得注意的是,由于级联分类器训练是一个复杂且计算密集的过程,所以这个工具使用了一些优化策略来提高训练的效率。例如,它会自动选择最佳的特征子集、采用图像金字塔的方法来处理不同尺度的目标物体等。 使用这个工具,我们可以快速地训练出一个高效的级联分类器,用于在图像中检测特定的目标物体。这个工具在计算机视觉领域有着广泛的应用,例如人脸检测、车牌识别、物体识别等。 ### 回答2: OpenCV级联分类器快速训练工具是一个用于训练级联分类器的工具,可以用于检测人脸、车辆、物体等。它是基于机器学习的技术,通过对大量正负样本的训练,自动生成一个分类器模型,用于在图像或视频中进行目标检测。 该工具提供了简单、快速且高效的训练流程。首先,需要准备一组正样本和一组负样本图像。正样本包含待检测目标,负样本则不包含目标。通过提取图像特征,例如Haar-like特征,计算每个样本的特征向量。 接下来,使用AdaBoost算法进行强分类器训练。该算法通过选择最佳的特征来构建强分类器,以尽可能减少误检率。AdaBoost还会对错误分类的样本进行加权,以便更好地处理难以分类的样本。 训练完成后,通过级联分类器的方式将强分类器级联,构成一个多层次的分类系统。级联分类器能够高效地过滤掉大量的负样本,从而减少了计算量,提高了检测速度。 使用该工具,可以根据不同的应用需求进行参数的调整和优化,例如调整级联的层数、每层分类器的阈值等。这样可以在保证检测准确率的前提下,进一步提高检测速度。 总的来说,OpenCV级联分类器快速训练工具是一个功能强大且易于使用的工具,可用于快速训练目标检测模型,广泛应用于人机交互、智能安防、自动驾驶等领域。 ### 回答3: OpenCV级联分类器快速训练工具是一种用于训练级联分类器的工具,用于检测和识别特定对象。级联分类器是一种基于机器学习的目标检测算法,通过组合多个弱分类器来实现高效率的对象检测。 该工具可以帮助用户快速训练自定义的级联分类器,以便对特定对象进行检测。训练过程主要分为两个步骤:正样本收集和训练训练。 在正样本收集阶段,用户需要准备一组正样本图像,这些图像包含待检测的对象。工具通过采集这些正样本图像中的对象特征,并根据这些特征构建级联分类器。 在训练训练阶段,工具利用正样本图像和一定数量的负样本图像,通过对这些图像进行分析和训练,逐步构建级联分类器模型。工具会根据正负样本之间的差异进行迭代训练,不断优化分类器的准确性和鲁棒性。 通过这个快速训练工具,用户可以有效地训练级联分类器,并应用于目标检测任务中。级联分类器在图像处理领域有广泛的应用,例如人脸检测、车辆检测等。它可以快速而准确地识别出感兴趣的对象,为图像分析和识别提供了有力支持。 总的来说,OpenCV级联分类器快速训练工具提供了一种方便、高效的方式,使用户能够自定义和训练级联分类器,从而实现对特定对象的快速检测和识别。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值