opencv Haartraining级联分类器 死循环

转自:http://blog.chinaunix.net/uid-7608308-id-2048365.html

最近在做人脸检测的Haartraining训练分类器,发现训练到最后误检率很低时分类器总是卡到某一层就不在继续进行,像是进入了死循环,程序代码与参数输入应该是没有任何问题的,所以我从网上找这方面的资料,最后在OpenCV的中文论坛看到一个帖,终于找到原因了。具体如下:
1、问题出现在取负样本的那个函数icvGetHaarTrainingDataFromBG中;
 当剩下所有的negtive样本在临时的cascade Classifier中evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环!
2、解决方法是,增大负样本数目,增大负样本之间的变化!
P.S. 因为负样本原则应该是无强大而且多样性越大越好,这在现实中是不可行的,所以我们采集的负样本一般无论从数量上还是多样性上都很难满足要求,所以出现上述问题就很正常了,不过此时的分类器已经完全额、可以使用,因为它的误检率已经很低,从实用性上时没有任何问题的。
另外,帖中还提到:
负样本不需要做成和正样本一样大小的,所以你搜集个几千张各种照片就够用了,比如网页素材库啊什么的,只要保证你的负样本里不包含检测目标就行了。另外训练的时候,负样本不要一下子都加进去,不够了再加,否则会在找负样本上耗费很多时间。
也就是说,训练的时候如果发现很慢了,就ctrl+c停下来,修改bg_data.list,提供新的bg图像。
呵呵,现在感觉Haartraining太工程化了,到最后有点重复操作,所以觉得没必要在很多问题上深究,会用就行了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源的计算机视觉库,它提了许多用于图像和视频处理的功能。其中之一就是级分类(Cascade Classifier),它是一种基于机学习的目标检测算法。 级分类是通过训练得到的,可以用于检测特定对象或特征。在OpenCV中,最常见的应用就是人脸检测。级分类通过使用Haar特征和AdaBoost算法来训练,可以在图像中快速准确地检测出人脸。 在Python中使用OpenCV的级分类,首先需要加载已经训练好的分类模型。OpenCV提供了一些预训练好的模型,可以直接使用。然后,将待检测的图像传入分类中进行检测,如果检测到目标对象,则返回目标的位置信息。 下面是使用OpenCV Python级分类的基本步骤: 1. 导入OpenCV库:`import cv2` 2. 加载分类模型:`face_cascade = cv2.CascadeClassifier('path/to/haarcascade_frontalface_default.xml')` 3. 读取待检测的图像:`img = cv2.imread('path/to/image.jpg')` 4. 将图像转换为灰度图像:`gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)` 5. 使用级分类进行检测:`faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))` 6. 遍历检测到的目标,绘制矩形框标记:`for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)` 7. 显示检测结果:`cv2.imshow('Detected Faces', img)` 8. 等待按键退出:`cv2.waitKey(0)` 以上是一个简单的人脸检测示例,你可以根据需要调整参数和模型路径。除了人脸检测,级分类还可以用于其他目标的检测,如眼睛、车辆等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值