opencv中的机器学习

  主要内容翻译自learning opencv 2.0

  机器学习的目的是把数据转换成信息。。。。通过从数据从提取规则或模式做到。这个过程叫做学习

  如果数据是已标记的叫监督学习,如果未标记叫做无监督学习。

  如果用一个名称来标记数据,我们要做的是分类。如果用一个数值来标记数据,我们要做的是回归。

  Supervised learning also comes in shades of gray:(这话翻译不来)

   监督学习可以是一对一的,也可以包含延迟学习(或者叫加强学习)--在一系列的数据后给一个奖励或惩罚标签。监督学习还有一些数据没有标签,叫做半监督学习,或者噪声标签(错误的标签)。

   相反的,聚簇算法是对未标记的数据自动分类。聚簇结果可以形成一个特征向量提交给高级的有监督的分类器。

   机器学习中常用的两个方法:聚簇和分类overlap with计算机视觉中的两个主要任务:识别和分割。

   似然方法在opencv中支持较少,因为这些方法比较新还在发展中,Opencv 倾向支持diccriminative算法而不是generative算法

  数据准备好后,你必须选择一种分类器。分类器的选择一般依据:计算量,数据,内存,如果实时性要求较高,最近邻,普通贝叶斯,决策树比较好。如果要考虑内存,boosting和随机树比较好,要求最好的性能,可以试下boosting或随机树。

  为了保证学习结果更加符合真实情况。交叉验证,bootstrapping,bootstrapping的效果比交叉验证好。

  另外两个有用的调整分类器性能的方法是描绘ROC(受试者工作特征)和制作confusion matrix(混淆矩阵)

2009-1-27今天学习下mlp,就是熟悉的bp网络。理论知识可以看神经网络设计中文版。learning opencv中关于mlp基本没介绍,但是可以看opencv手册。

但给出了一个c++的例子。

第一步是数据准备

第二步是创建或者说初始化一个mlp网络,

int layer_sz[] = { data->cols, 100, 100, class_count };//输入层的元素个数是data-cols,隐层1,隐层2分别是100,100,输出层是class-count,


 CvMat layer_sizes = cvMat( 1, (int)(sizeof(layer_sz)/sizeof(layer_sz[0])), CV_32S, layer_sz );//整理成mlp需要的格式
mlp.create( &layer_sizes );//创建

第3步是训练

mlp.train( &train_data, new_responses, 0, 0,
            CvANN_MLP_TrainParams(cvTermCriteria(CV_TERMCRIT_ITER,300,0.01),
            CvANN_MLP_TrainParams::RPROP,0.01));
        cvReleaseMat( &new_responses );

new_responses是网络的输出,这里是特征的标签。

第4步就是识别了。

mlp.predict( &sample, mlp_response ); 识别结果是各个可能值的概率。

所以要

cvMinMaxLoc( mlp_response, 0, 0, 0, &max_loc, 0 );

 

opencv的例子中,数据是来自mnist。

从以上数据来看,关键一点就是layer_sz是怎么确定的。

另外,就是训练时各个参数的含义了。

 

基本上看例子就能懂了。也可以看下下面的博客

http://blog.csdn.net/anders0821/archive/2009/05/04/4147230.aspx

 

我把这些方法全部用c#进行了封装。更加符合c#程序员的习惯。

在对旋转和倾斜字符进行识别时达到94%的识别率。不过训练集和测试集都是用我自己的程序生成的。应用到具体验证码上不知道识别率怎么样。主要是准备样本要花很多时间。等寒假结束再来做这个工作。  

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值