资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,Page,#,单击此处编辑母版标题样式,Page,1,目录,准备与训练过程,可能遇到的问题,经验总结,Page,2,准备阶段,-,样本收集,正样本:,工具:,Image Clipper-,可以很方便地从视频或图像文件夹中读取当前帧或当前图像,,并截取和保存所需的样本图像,负样本:,所有不包含待检测目标的图像都可以作为负样本,一般正负样本需要几千上万张图像,所以正样本收集过程耗时比较长,Page,3,准备阶段,-,样本准备,负样本可以是任意大小,只要不包括待检测目标即可。,简洁的方式是从视频或图像背景中直接划分出负样本,也可以利用现有的图像库,或者可以从网上的图像素材库中下载,建立保存负样本的文件夹(如:,neg,),并在,neg,目录下建立,negdata.dat,描述文件,Negdata.dat,的内容如下:,1.bmp,2.bmp,3.bmp,生成描述文件的方法:在命令行窗口中,变更到当前文件夹路径,(neg),,输入,dir/b negdata.dat,就会在,neg,下生成描述文件,去掉其中对描述文件自身的描述,negdata.dat,即可,如果,negdata.dat,保存在,neg,外面,在每一行前面添加相对路径或绝对路径来指出样本所在位置即可,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),指出这个目标所在的矩形框,由于所有正样本都是统一,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,7,准备阶段,-,结果检测,样本数量越多,训练时间也就越长。最终将生成一个级联分类器的文件夹和一个,.xml,文件,通过,OpenCV,中提供的,convert_cascade.exe(OpenCVsamplesc,目录下,),可以将文件夹转换成,.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,。,Page,8,可能遇到的问题,负样本收集,负样本的数量理论上是无穷大,因而收集负样本时应注意样本的数量和多样性,如果数量太少或者多样性不好,很容易陷入训练过程中无法继续下去。,解决办法:增加负样本数量,可以不必局限于背景图像作为负样本。训练中止,增加负样本后,程序将从已经训练过的,stage,处为节点继续训练过程,并不会浪费很多时间,2.,正样本收集,正样本收集中应当尽量密集,尽管两个时刻的目标之间看不出什么差异,但是最后可能在有样本的地方能够检测到,而在没有样本的地方出现漏检,如下图:,Page,9,可能遇到的问题,3.,内存不足,该提示指出有参数超出范围在,cvAlloc,中,可以修改,-mem,参数,检查是否有足够的内存空间,建议关闭不需要的程序和进程释放内存。,4.,负样本描述文件有误,有可能会出现找不到负样本的情况,,negdata.dat,描述的路径找不到响应文件。,正样本因为存储在,.vec,文件中很少出现这种情况,Page,10,经验总结,分类器训练过程时间比较长,尤其正样本的增加对时间增加的贡献率大于负样本,训练过程中可以中止训练,替换或者增加、删除样本都是可以的(,Ctrl+C,退出训练过程),重新开始后将读取级联文件夹中的当前分类器然后继续训练,Performance.exe,检验分类器效果不是很一目了然,最好在窗口中显示检测结果来检验,负样本的选择很关键,最好在,size,、内容、来源上体现出多样,同时以实际应用中的背景为负样本主要部分。另外,size,的变化有助于解决前面提到的可能遇到的问题,1,训练机器的内存空间尽量大,举例:两次样本数量相差不多(,200/6000,)的训练过程中分别分配空间为,10G,和,800M,,时间相差大概三倍左右,分类器训练是一个工程性的工作,在样本准备上花费多一些时间是值得的,实际上优化分类器就是优化样本空间的过程,Page,11,相关资料,推荐:,You,!,谢谢!,
展开阅读全文