训练样本的过程

转自http://htedsv.com/?p=137

 

目标:训练眼睛分类器
数据准备
正例:收集眼睛图像,图像大小一致(720*576共800张)
反例:不包含眼镜的图像,图像大小与正例图像一致(共80)
训练步骤:(OPencv2.0)
一、 数据预处理
每个正例数据,使用ObjectMarker在每个图像上画出眼镜区域, 那么在一幅图像上可以得到两个矩形框,ObjectMarker会自动生成一个info.txt文本用于后面的训练。ObjectMarker是基于 Opencv的图像处理工具,它只能打开bmp格式的图像,主要的功能是在图像上画出目标区域,会自动生成目标描述文本(info.txt)。每一个文本 行对应一个图片。每行的第一个元素是图片文件名,第二个元素是对象实体的个数。后面紧跟着的是与之匹配的矩形框(x, y, 宽度,高度)。内容如下:
rawdata/img1.bmp 2 211 205 60 27 345 215 51 28
rawdata/img10.bmp 2 194 204 61 27 329 216 58 31
rawdata/img101.bmp 2 206 265 56 19 340 276 51 22
rawdata/img102.bmp 2 211 263 49 20 340 278 58 20
rawdata/img103.bmp 2 211 263 54 22 339 277 54 19

用bg.txt文档描述反例数据:
negimg/bg1.bmp
negimg/bg2.bmp
negimg/bg3.bmp
negimg/bg4.bmp

二、创建样本
使用如下命令创建样本:
opencv_createsamplesd -info info.txt -num 300 -bg bg.txt -vec pos.vec -w 65 -h 30
opencv_createsamplesd是Opencv2.0提供用于创建样本命令。opencv_createsamplesd程序的命令行参数:
-vec 训练好的正样本的输出文件名。
-img源目标图片(例如:一个公司图标)
-bg背景描述文件。
-num要产生的正样本的数量,和正样本图片数目相同。
-bgcolor背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh参数来指定。则在bgcolor-bgthresh和bgcolor+bgthresh中间的像素被认为是透明的。
-bgthresh
-inv如果指定,颜色会反色
-randinv
如果指定,颜色会任意反色
-maxidev背景色最大的偏离度。
-maxangel
-maxangle
-maxzangle
最大旋转角度,以弧度为单位。
-show
如果指定,每个样本会被显示出来,按下”esc”会关闭这一开关,即不显示样本图片,而创建过程继续。这是个有用的debug选项。
-w
输出样本的宽度(以像素为单位)
-h
三、训练分类器
样本创建之后,接下来要训练分类器,这个过程是由haartraining程序来实现的。使用下面的命令进行训练:
opencv_haartrainingd -data f://data -vec vec_pos.vec -bg bg.txt -npos 300 -nneg 10 -w 65 -h 30
Haartraining的命令行参数如下:
-data存放训练好的分类器的路径名。
-vec正样本文件名
-bg背景描述文件。
-npos
-nneg
用来训练每一个分类器阶段的正/负样本。
-nstages训练的阶段数。
-nsplits决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier被使用。如果是2或者更多,则带有number_of_splits个内部节点的CART分类器被使用。(2比较好,1比较快)
-mem预先计算的以MB为单位的可用内存。内存越大则训练的速度越快。
-sym(default)
-nonsym指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate的number_of_stages次方。
-maxfalsealarm没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate的number_of_stages次方。
-weighttrimming指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
-eqw
-mode选择用来训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。
-w
-h训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同。
训练结束后,会在目录data下生成一些子目录,即为训练好的分类器。同时会生成data.xml(网络上一些资料说xml要用另外个程序生成,事实上这边已经可以生成了)。
在这个过程存在着几个问题,需要在进一步分析:
在完成这个训练过程后对得到的data.xml进行测试,得到的效果比较差。
在创建样本的过程中,需要输入检测窗口的大小作为参数,而每次从原图中截取的图像的大小都是不一样的,这个窗口时如何确定的?

你可能感兴趣的:(训练样本的过程)