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.分类器的级数怎么确定,原则是什么?

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

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



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 02:28:43

openCV训练分类器是一些错误及解决办法的相关文章

关于导入新项目的问题——项目文件有错,但是子文件没任何错误的解决办法

在我们学习和工作的时候,有时候将别人的 Project 导入到自己的开发工具时,总是会有莫名其妙的奇葩错误, 就是明明项目里面的代码和类都没错,但是项目文件夹上有一个红色的叉叉,今天我就给大家来说说关于这类错 误的解决办法,我就故意导致项目报这个异常,一步一步演示给大伙看,希望大家在以后遇到这类问题可以迎刃 而解 错误示例图: 我们可以看到上面截图,除了项目文件,其他都没任何错误,可是在console没有异常告诉我们,我们该怎么解 决呢?其实很简单,下面看我演示: 打开红色方框这个选项,里面就是

GDI+中发生一般性错误的解决办法(转载)

今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误"的异常.于是开始"摆渡",并寻找到了解决办法:赋予 NETWORK SERVICE 帐户以写权限. 以下为晚上寻找到的资料: 在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致"GDI+ 中发生一般性错误"的发生,通常有以下三种

SQL SERVER 报:由于数据移动,未能继续以 NOLOCK 方式扫描错误的解决办法。

比如在某个表中使用 select xxx from xxx with(nolock) where xxxx 查询. 提示出错:由于数据移动,未能继续以 NOLOCK 方式扫描. 它有可能某些条件出错,某些条件不出错. 原因是有可能该表在物理文件存储中某一块数据损坏了.或者该表中的索引和表的数据不一致了. 解决办法-如果是整个库出错可以使用: 1.快速修复DBCC CHECKDB ('数据库名', REPAIR_FAST)     2.重建索引并修复DBCC CHECKDB ('数据库名', RE

YUM安装提示PYCURL ERROR 6 - "Couldn't错误的解决办法

当编译PHP时出现如下错误时,找不到头绪 这时,打开DNS   vim /etc/resolv.conf   添加一行nameserver 192.168.1.1 完成上一步,则解决该问题 YUM安装提示PYCURL ERROR 6 - "Couldn't错误的解决办法

GCC编译uboot出现(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'错误的解决办法

/opt/arm-2010.09/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/libgcc.a(_bswapsi2.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0' make: *** [u-boot] Error 1 一旦编译uboot出现上述错误,请不要慌张!解决办法官网已经给出,主要解决办法如下: vim 打开./lib_arm/eabi_com

STM8S编译时内存溢出错误的解决办法

? 导致COSMIC报告"segment .ubsct overflow"错误的根本原因是内存溢出, 相关原因分析如下: ? 1.变量存储空间结构 ? STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 .在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share ? 可见, 当segment .ubsct overflow错误出

WCF中的错误及解决办法

一 .    HTTP 无法注册 URL http://+:8000/Users/.进程不具有此命名空间的访问权限今天按照网上的例子开始学习WCF程序,运行的时候却发现出如下问题:HTTP 无法注册 URL http://+:8000/Users/.进程不具有此命名空间的访问权限. 遇到这种问题,先不要慌,看一下错误内容:进程不具备此命名空间的访问权限,说明是访问权限的问题,所以我试着以管理员的身份重新打开了VS,结果就没报这个错 WCF中的错误及解决办法,布布扣,bubuko.com

Eclipse 报 "The builder launch configuration could not be found" 错误的解决办法

Eclipse 忽然报 "The builder launch configuration could not be found" 错误:        解决办法如下:        1. Package Explorer 视图下选中项目名        2. Eclipse 工具栏中选择 Project -> Properties        3. 弹出的 Properties 对话框中,点击 Builders  4. 将缺失的 builder 移除掉 -> 点击 OK

使用vMware workstation 10安装操作系统显示内部错误的解决办法

在打开vMware workstation 10以后,准备安装Solaris 10操作系统,但是当点击"创建新的虚拟机"的时候,弹出一个对话框,显示"内部错误". 百度了一下,说去程序和功能里面找到vMware workstation 10的安装程序,里面有个修复,修复它既可.可是我试了几遍,都未能成功. 后来才发现,服务项里的vMware有启动状态,有停止状态,把停止状态启动它就OK了. 重新启动vMware workstation 10,正常运行. 使用vMwa