Haar+AdaBoost分类器训练总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Page 4
准备阶段---样本准备
截取后的正样本要做两个改动: 1、正样本要缩放为统一size,可以使用Image resizer工具 2、截取后的默认格式为.png,使用批量重命名工具修改样本名为所需的名称和格式 建立保存正样本的文件夹(如:pos),并在pos目录下建立posdata.dat描述文件, 到这里与负样本的准备是一致的。不同之处在于正样本的描述中需要指出目标在图像 中的数量和位置 比如1.bmp中包含一辆汽车,它的描述应写成1.bmp 1 x1 y1 x2 y2 其中(x1,y1,x2,y2)指出这个目标所在的矩形框
Haar+AdaBoost分类器训练总结
目录
Page 2
准备阶段---样本收集
正样本: 工具:Image Clipper---可以很方便地从视频或图像文件夹中读取当前帧或当前图像, 并截取和保存所需的样本图像 负样本: 所有不包含待检测目标的图像都可以作为负样本
一般正负样本需要几千上万张图像,所以正样本收集过程耗时比较长
Page 9
可能遇到的问题
3. 内存不足
该提示指出有参数超出范围在cvAlloc中,可以修改-mem参数,检查是否有足 够的内存空间,建议关闭不需要的程序和进程释放内存。 4. 负样本描述文件有误 有可能会出现找不到负样本的情况,negdata.dat描述的路径找不到响应文件。 正样本因为存储在.vec文件中很少出现这种情况
由于所有正样本都是统一size,只要在记事本中编辑描述文件将bmp替换成bmp 1 0 0 width height 即可,width和height是图像的宽和高
Page 5
准备阶段---样本准备
正样本还需要根据描述文件和样本图像生成.vec文件才是最后的正样本数据 生成程序为OpenCV1.0/bin/CreateSamples.exe(在后期版本OpenCV中需自行编译) 可以使用批处理文件或命令行调用CreateSamples.exe 参数设置:-info posdata.dat 正样本描述文件 -vec pos.vec 生成的.vec文件名 -num 5323 正样本的数量 -w 50 样本的宽度 -h 50 样本的高度 运行后,出现Done.Created 5323 samples 表明生成5323个样本成功
Page 6
准备阶段---训练准备
训练可以使用批处理文件或命令行调用haartraining.exe 参数设置:-data 生成的分类器名称和路径,包括级联文件夹和.xml文件两部分, 二者是相同的; -vec 正样本的.vec文件路径 -bg 负样本的描述文件路径 -npos 正样本数量 -nneg 负样本数量 -nstages 级联分类器的层数 -mem 分配的内存空间,越大训练过程越快 -sym 目标是否对称 -minhitrate 要达成的检测率 -maxfalsealarm 要达成的虚警率 -mode 选取的特征模式 -w 正样本宽度 -h 正样本高度 当级数达到nstages或者检测率、虚警率同时满足时,训练结束,程序退出
工具:
Page 12
结束
Thank You ! 谢谢 !
Page 13
Page 8
可能遇到的问题
1. 负样本收集 负样本的数量理论上是无穷大,因而收集负样本时应注意样本的数量和多样性 如果数量太少或者多样性不好,很容易陷入训练过程中无法继续下去。 解决办法:增加负样本数量,可以不必局限于背景图像作为负样本。训练中止,增 加负样本后,程序将从已经训练过的stage处为节点继续训练过程,并不会浪费 很多时间 2. 正样本收集 正样本收集中应当尽量密集,尽管两个时刻的目标之间看不出什么差异,但是 最后可能在有样本的地方能够检测到,而在没有样本的地方出现漏检 如下图:
Page 3
准备阶段---样本准备
负样本可以是任意大小,只Leabharlann Baidu不包括待检测目标即可。 简洁的方式是从视频或图像背景中直接划分出负样本,也可以利用现有的图像库,或 者可以从网上的图像素材库中下载 建立保存负样本的文件夹(如:neg),并在neg目录下建立negdata.dat描述文件 Negdata.dat的内容如下: 1.bmp 2.bmp 3.bmp … 生成描述文件的方法:在命令行窗口中,变更到当前文件夹路径(…\neg),输入 dir /b >negdata.dat就会在neg下生成描述文件,去掉其中对描述文件自身的描述 negdata.dat即可 如果negdata.dat保存在neg外面,在每一行前面添加相对路径或绝对路径来指出样本 所在位置即可
Page 10
经验总结
1. 分类器训练过程时间比较长,尤其正样本的增加对时间增加的贡献率大于负样 本 2. 训练过程中可以中止训练,替换或者增加、删除样本都是可以的(Ctrl+C退出训 练过程),重新开始后将读取级联文件夹中的当前分类器然后继续训练 3. Performance.exe检验分类器效果不是很一目了然,最好在窗口中显示检测结果 来检验 4. 负样本的选择很关键,最好在size、内容、来源上体现出多样,同时以实际应用 中的背景为负样本主要部分。另外size的变化有助于解决前面提到的可能遇到的 问题1 5. 训练机器的内存空间尽量大,举例:两次样本数量相差不多(<200/6000)的训 练过程中分别分配空间为10G和800M,时间相差大概三倍左右 6. 分类器训练是一个工程性的工作,在样本准备上花费多一些时间是值得的,实 际上优化分类器就是优化样本空间的过程
Page 11
相关资料
推荐: http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html 原理分析 http://blog.csdn.net/carson2005/article/details/8171571 操作指导 http://note.sonots.com/SciSoftware/haartraining.html#x15ebd98 官方指导
Page 7
准备阶段---结果检测
样本数量越多,训练时间也就越长。最终将生成一个级联分类器的文件夹和一个.xml 文件,通过OpenCV中提供的convert_cascade.exe(OpenCV\samples\c目录下)可以 将文件夹转换成.xml文件 分类器检测 编写程序使用cvHaarDetectObjects()函数或者通过批处理文件/命令行调用 performance.exe(与haartraining.exe同路径)来检测分类器效果如何 如果使用performance.exe,还需要准备测试集,与负样本的准备相同,对size没有限 制,不同之处是要再文件描述中添加类似正样本描述中的目标位置信息。如果一个测 试图像中有两个目标,可以这样描述:1.bmp 2 x1 y1 x2 y2 x1’ y1’ x2’ y2’ 其中(x1,y1,x2,y2)(x1’,y1’,x2’,y2’)分别是两个目标的位置,当有更多目标时往后罗列 即可。 Performance.exe中会对检测到的候选目标作如下判断: If(候选矩形框与真实目标矩形框中心的距离< width * maxPosDiff && width / maxSizeDiff<候选矩形框宽度< width * maxSizeDiff) e.g:width是真实目标框 宽度 如果满足,计一个hit,否则为falsealarm,最后根据hit计算出Missed。
准备阶段---样本准备
截取后的正样本要做两个改动: 1、正样本要缩放为统一size,可以使用Image resizer工具 2、截取后的默认格式为.png,使用批量重命名工具修改样本名为所需的名称和格式 建立保存正样本的文件夹(如:pos),并在pos目录下建立posdata.dat描述文件, 到这里与负样本的准备是一致的。不同之处在于正样本的描述中需要指出目标在图像 中的数量和位置 比如1.bmp中包含一辆汽车,它的描述应写成1.bmp 1 x1 y1 x2 y2 其中(x1,y1,x2,y2)指出这个目标所在的矩形框
Haar+AdaBoost分类器训练总结
目录
Page 2
准备阶段---样本收集
正样本: 工具:Image Clipper---可以很方便地从视频或图像文件夹中读取当前帧或当前图像, 并截取和保存所需的样本图像 负样本: 所有不包含待检测目标的图像都可以作为负样本
一般正负样本需要几千上万张图像,所以正样本收集过程耗时比较长
Page 9
可能遇到的问题
3. 内存不足
该提示指出有参数超出范围在cvAlloc中,可以修改-mem参数,检查是否有足 够的内存空间,建议关闭不需要的程序和进程释放内存。 4. 负样本描述文件有误 有可能会出现找不到负样本的情况,negdata.dat描述的路径找不到响应文件。 正样本因为存储在.vec文件中很少出现这种情况
由于所有正样本都是统一size,只要在记事本中编辑描述文件将bmp替换成bmp 1 0 0 width height 即可,width和height是图像的宽和高
Page 5
准备阶段---样本准备
正样本还需要根据描述文件和样本图像生成.vec文件才是最后的正样本数据 生成程序为OpenCV1.0/bin/CreateSamples.exe(在后期版本OpenCV中需自行编译) 可以使用批处理文件或命令行调用CreateSamples.exe 参数设置:-info posdata.dat 正样本描述文件 -vec pos.vec 生成的.vec文件名 -num 5323 正样本的数量 -w 50 样本的宽度 -h 50 样本的高度 运行后,出现Done.Created 5323 samples 表明生成5323个样本成功
Page 6
准备阶段---训练准备
训练可以使用批处理文件或命令行调用haartraining.exe 参数设置:-data 生成的分类器名称和路径,包括级联文件夹和.xml文件两部分, 二者是相同的; -vec 正样本的.vec文件路径 -bg 负样本的描述文件路径 -npos 正样本数量 -nneg 负样本数量 -nstages 级联分类器的层数 -mem 分配的内存空间,越大训练过程越快 -sym 目标是否对称 -minhitrate 要达成的检测率 -maxfalsealarm 要达成的虚警率 -mode 选取的特征模式 -w 正样本宽度 -h 正样本高度 当级数达到nstages或者检测率、虚警率同时满足时,训练结束,程序退出
工具:
Page 12
结束
Thank You ! 谢谢 !
Page 13
Page 8
可能遇到的问题
1. 负样本收集 负样本的数量理论上是无穷大,因而收集负样本时应注意样本的数量和多样性 如果数量太少或者多样性不好,很容易陷入训练过程中无法继续下去。 解决办法:增加负样本数量,可以不必局限于背景图像作为负样本。训练中止,增 加负样本后,程序将从已经训练过的stage处为节点继续训练过程,并不会浪费 很多时间 2. 正样本收集 正样本收集中应当尽量密集,尽管两个时刻的目标之间看不出什么差异,但是 最后可能在有样本的地方能够检测到,而在没有样本的地方出现漏检 如下图:
Page 3
准备阶段---样本准备
负样本可以是任意大小,只Leabharlann Baidu不包括待检测目标即可。 简洁的方式是从视频或图像背景中直接划分出负样本,也可以利用现有的图像库,或 者可以从网上的图像素材库中下载 建立保存负样本的文件夹(如:neg),并在neg目录下建立negdata.dat描述文件 Negdata.dat的内容如下: 1.bmp 2.bmp 3.bmp … 生成描述文件的方法:在命令行窗口中,变更到当前文件夹路径(…\neg),输入 dir /b >negdata.dat就会在neg下生成描述文件,去掉其中对描述文件自身的描述 negdata.dat即可 如果negdata.dat保存在neg外面,在每一行前面添加相对路径或绝对路径来指出样本 所在位置即可
Page 10
经验总结
1. 分类器训练过程时间比较长,尤其正样本的增加对时间增加的贡献率大于负样 本 2. 训练过程中可以中止训练,替换或者增加、删除样本都是可以的(Ctrl+C退出训 练过程),重新开始后将读取级联文件夹中的当前分类器然后继续训练 3. Performance.exe检验分类器效果不是很一目了然,最好在窗口中显示检测结果 来检验 4. 负样本的选择很关键,最好在size、内容、来源上体现出多样,同时以实际应用 中的背景为负样本主要部分。另外size的变化有助于解决前面提到的可能遇到的 问题1 5. 训练机器的内存空间尽量大,举例:两次样本数量相差不多(<200/6000)的训 练过程中分别分配空间为10G和800M,时间相差大概三倍左右 6. 分类器训练是一个工程性的工作,在样本准备上花费多一些时间是值得的,实 际上优化分类器就是优化样本空间的过程
Page 11
相关资料
推荐: http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html 原理分析 http://blog.csdn.net/carson2005/article/details/8171571 操作指导 http://note.sonots.com/SciSoftware/haartraining.html#x15ebd98 官方指导
Page 7
准备阶段---结果检测
样本数量越多,训练时间也就越长。最终将生成一个级联分类器的文件夹和一个.xml 文件,通过OpenCV中提供的convert_cascade.exe(OpenCV\samples\c目录下)可以 将文件夹转换成.xml文件 分类器检测 编写程序使用cvHaarDetectObjects()函数或者通过批处理文件/命令行调用 performance.exe(与haartraining.exe同路径)来检测分类器效果如何 如果使用performance.exe,还需要准备测试集,与负样本的准备相同,对size没有限 制,不同之处是要再文件描述中添加类似正样本描述中的目标位置信息。如果一个测 试图像中有两个目标,可以这样描述:1.bmp 2 x1 y1 x2 y2 x1’ y1’ x2’ y2’ 其中(x1,y1,x2,y2)(x1’,y1’,x2’,y2’)分别是两个目标的位置,当有更多目标时往后罗列 即可。 Performance.exe中会对检测到的候选目标作如下判断: If(候选矩形框与真实目标矩形框中心的距离< width * maxPosDiff && width / maxSizeDiff<候选矩形框宽度< width * maxSizeDiff) e.g:width是真实目标框 宽度 如果满足,计一个hit,否则为falsealarm,最后根据hit计算出Missed。