热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用OpenCV进行目标检测的注意事项

前言前一篇文章已经介绍过了如何使用OpenCV自带的级联分类器进行目标检测,但是在实际操作过程中和后期的算法调优的过程中都需要有依据地进行调试,这样才

前言

前一篇文章已经介绍过了如何使用OpenCV自带的级联分类器进行目标检测,但是在实际操作过程中和后期的算法调优的过程中都需要有依据地进行调试,这样才能又快又好将算法调试到比较理想的状态,而不是像无头苍蝇一样乱撞。本篇文章多来自于网络上无私网友的分享,这里由衷感谢他们。

正样本数据

1 、正样本图片中的关照和背景的变化是否需要很大?
是的,而且这很重要。在正样本图片中,除了被检测目标,剩下的就是背景。应该尝试用随机噪声来填充背景,避免没有变化的背景。

负样本数据

1、应该使用什么样的负样本图片?
可是使用任何OpenCV支持的图片格式,而且其中不能包含被检测目标。负样本图片应该变化很大,多种多样。

2、负样本图片是否需要缩放到同样大小?
不需要,但是负样本图片不能小于使用createsamples工具生成vec文件时设定的-w -h参数。

3、通常需要使用多少正/负样本图片?
这往往根据你的需求来确定。例如,对cascades来说,需要有1000个正样本和2000个负样本。
比较好的比例关系是 positive : negative = 1:2,但这并不是硬性规定。我推荐先使用少量的样本来尝试产生cascades,然后再扩大负样本数量。这样可以提升速度防止死循环

haartraining.exe的使用

1、使用haartraining的示例(vec文件为samples.vec,负样本描述文件为negative.dat)。使用haartraining.exe的方法如下:

haartraining -data haarcascade -vec samples.vec -bg negatives.dat -nstages 20 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 1000 -nneg 2000 -w 20 -h 20 -nonsym -mem 1024-data haarcascade 生成的xml文件目录为haarcascade
-vec samples.vec vec文件为samples.vec
-bg negatives.dat 负样本描述文件为negatives.dat
-nstages 20 分类器的级联层数
-minhitrate 0.999 每一层的最低正确检测率99.9%
-maxfalsealarm 0.5 最大错误接受率50%
-npos 1000 -nneg 2000 正、负样本数
-w 20 -h 20 -w -h参数与生成vec文件时设置的数值相同

2、stage的falsealarm(错误接受率)和hitrate(正确检测率)是什么?
要了解这两个参数,需要查阅adaboost算法中关于强分类器的理论。stage就是强分类器。简单来说:
如果有1000个正样本,你希望检测系统能检测出其中的900个,期望的”正确检测率“就是900/1000 = 0.9。通常将minhitrate设置为0.999;
如果有1000个负样本,如果检测系统错误的将其中490当作了检测目标,”错误接受率“就是490/1000 = 0.49。通常false alram设置为0.5。

3、级联分类器应该被设定为多少层?
通常,14-25层就足够了。如果层数过多,分类器的false alarm就更小,但是产生级联分类器的时间更长;如果层数过多,分类器的hitrate就更小;如果层数过多,检测速度更慢;如果正、负样本较少,层数没必要设置很多。

4、 minpos、nsplits、nsplits、maxtreesplits选项是什么?
nsplits 树节点数的最小值
maxtreesplits 树节点数的最大值
minpos 训练过程中,节点可使用的正样本数目。正样本根据节点被分类,通常来说,minpos不小于npos / nsplits

5、训练过程中的错误!
①Error (valid only for Discrete and Real AdaBoost): misclass 这是警告而不是错误。D and R Adaboost算法有一些特别的选项。
②控制台上都是类似下面的提示 :| 1000 |25%|-|-1423.312590| 1.000000| 1.000000| 0.876272| 训练进入了循环,重新启动训练。正常情况下,第一列应小于100
③cvAlloc fails. Out of memory 负样本太多或者vec文件太大,所有的图片都加载到内存,导致内存不足。
④注意-w -h参数的值与生成vec文件时的值相同
⑤注意正、负样本数目与-npos 、-nneg参数设定值相同
⑥防止dat文件(描述文件)中的空行
⑦Required leaf false alarm rate achieved. Branch training terminated 负样本图片中可能包含了被检测目标。maxfalsealarm值应该设定到0.4 - 0.5之间。

REF


  1. 《FAQ:OpenCV Haartraining》——使用OpenCV训练Haar like+Adaboost分类器的常见问题:http://www.cnblogs.com/chensheng-zhou/p/5542887.html
  2. FAQ: OpenCV Haartraining : http://www.computer-vision-software.com/blog/2009/11/faq-opencv-haartraining/
  3. 利用Opencv中的Haartraining训练特征的经验谈: http://blog.sina.com.cn/s/blog_62e14ece0100yge7.html
  4. 经典的HaarTraining算法: https://yq.aliyun.com/articles/9312
  5. Adaboost+Haar+Opencv博客: http://blog.csdn.net/lsxpu/article/details/7976609?spm=5176.100239.blogcont9312.32.QZFgMq

推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)
    1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例。这是上次写的iOS第三方社交分享:http:www.cnblogs.comqingchep3727559.html ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
author-avatar
I技男
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有