训练自己的分类器

       这个假期一直在准备一个比赛,要求要做一个细胞识别的软件,用到了opencv,用haar分类器来进行识别,

 现在讲训练的过程进行总结。


     第一步是收集样本,样本有正样本和负样本之分,正样本用来识别目标,负样本用来区别错误的识别。

     然后要用到两个程序createsamples.exe和haartraining.exe,我用的opencv2.4.4,、里面没有这个两个程序,

    找到了源代码,但是一直编译不了,索性就直接下载别人的了,另外这两个程序用到了opencv的DLL,分别是

    cv100.dll,cxcore100.dll,highgui100.dll,libguide40.dll

    把他们放在相同目录下就可以了。


     在使用haartraining.exe进行训练的时候是需要正样本的vec文件和负样本的描述文件。

     以下是正样本的描述文件格式

samples\001.jpg 1 0 0 32 32
samples\002.jpg 1 0 0 32 32
samples\003.jpg 1 0 0 32 32
samples\004.jpg 1 0 0 32 32
samples\005.jpg 1 0 0 32 32
samples\006.jpg 1 0 0 32 32
samples\007.jpg 1 0 0 32 32
 以下是负样本的描述文件格式

bg\3842.jpg
bg\3926.jpg
bg\4006.jpg
bg\4038.jpg
bg\4074.jpg
bg\4104.jpg
bg\4222.jpg
bg\4342.jpg
bg\4370.jpg
bg\4469.jpg
bg\4536.jpg
bg\4635.jpg
bg\4673.jpg
bg\4698.jpg

  生成正样本的vec文件时需要用到 createsamples.exe程序。

  运行程序代码如下:createsamples.exe -vec pos.vec -info pos.txt  -num 200 -w 32 -h 32 

  -vec 是生成vec文件的(路径)名称,-info 是正样本的描述文件(路径)名称 

  -num 是正样本的数量,-w -h 分别是正样本的宽和高。(注意:正样本的宽高必须统一,比如32*32)

  关于更多的参数列表:

命令行参数:

-vec <vec_file_name>
训练好的正样本的输出文件名。

-img<image_file_name>
源目标图片(例如:一个公司图标)

-bg<background_file_name>
背景描述文件。

-num<number_of_samples>
要产生的正样本的数量,和正样本图片数目相同。

-bgcolor<background_color>
背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh
参数来指定。则在bgcolor-bgthresh 和bgcolor+bgthresh 中间的像素被认为是透明的。

-bgthresh<background_color_threshold>
-inv
如果指定,颜色会反色

-randinv
如果指定,颜色会任意反色

-maxidev<max_intensity_deviation>
背景色最大的偏离度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋转角度,以弧度为单位。
-show
如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程
继续。这是个有用的debug 选项。

-w<sample_width>
输出样本的宽度(以像素为单位)

-h《sample_height》
输出样本的高度,以像素为单位。

注:正样本也可以从一个预先标记好的图像集合中获取。这个集合由一个文本文件来描述。每一个文本行对应一个图片。每行的第一个元素是图片文件名,第二个元素是对象实体的个数。后面紧跟着的是与之匹配的矩形框(x, y, 宽度,高度)。

在获得正样本的vec文件的时候就可以用 haartraining.exe程序进行样本训练了。

训练用到的文件有:正样本的vec文件、负样本的描述文件。

训练的代码如下:haartraining.exe -data pos -vec pos.vec -bg bg.txt -npos 200 -nneg 200 -w 32 -h 32 

 上面的代码参数 -data 是生成的xml文件的名称, -bg 是负样本的描述文件。

-npos 正样本的数量、-nneg 是负样本的数量、 -w和-h是正样本的宽和高。(注意:负样本的大小可以不统一,但是要比正样本的大。)

    关于haartraining.exe程序的参数如下:

Haartraining 的命令行参数如下:

-data<dir_name>
存放训练好的分类器的路径名。

-vec<vec_file_name>
正样本文件名(由trainingssamples 程序或者由其他的方法创建的)

-bg<background_file_name>
背景描述文件。

-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000

-nstages<number_of_stages>
训练的阶段数。

-nsplits<number_of_splits>
决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier 被使用。如果是2 或者更
多,则带有number_of_splits 个内部节点的CART 分类器被使用。

-mem<memory_in_MB>
预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。

-sym(default)
-nonsym
指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate《min_hit_rate》
每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate 的number_of_stages 次方。
-maxfalsealarm<max_false_alarm_rate>
没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate 的
number_of_stages 次方。
-weighttrimming<weight_trimming>
指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
-eqw
-mode<basic(default)|core|all>
选择用来训练的haar 特征集的种类。basic 仅仅使用垂直特征。all 使用垂直和45 度角旋转特征。

-w《sample_width》
-h《sample_height》
训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同


 生成xml文件后就可以直接进行识别,也可以先进行测试。


 以上就是我做细胞识别的时候训练分类器的过程,其中有很一些步骤没做。但是也达到了一定效果。



参考博客:http://blog.sina.com.cn/s/blog_75e063c10100ydob.html 

                              http://www.rosoo.net/a/201110/15223.html


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值