HALCON高级篇:常用分类器及其特点

分类是对一组类别中单个实例对象划分的技术术语。对象,还有现有的类别,是用特定的特征来描述的,例如像素的颜色或者区域的形状。为了定义类别,特征必须被指定,例如通过已知对象的类别。在训练之后,分类器将对象的特征与有关类别的特征做比较,并返回最大匹配的类别。根据所选的分类器,类别的可能性或者分类的可行度等可能额外的信息将被给出。

一般来说,可以区分两种对图像数据的分类方法。一种方法是基于单纯的像素分类,并且基于颜色或者纹理去分割图像。另一种方法则更广泛,分类任意特征,例如你可以基于区域特征去分类区域,如形状,大小,或者颜色。对于这里介绍的编程方法,找重点放在第一种方法上。需要注意的是,实际上HALCON提供的OCR及时一种广义的分类方法,其具有特定的算子。

HALCON提供了不同的分类器,最重要的分类器识神经网络(多层感知机或者MLP)分类器,支持向量机(SVM)分类器,高斯混合模型(GMM)分类器,和K最近邻(KNN)分类器。另外,盒分类器也是可行的,但是由于GMM分类会引起可比性的结果且也更稳定,这里仅仅去描述GMM分类器。再者,更“简单”的分类器也能用于图像的分割,这些分类器中包含了2维像素分类class_2dim_sup或者class_ndim_norm,其可以被用来仅仅欧式分类,但这些方法的不灵活的,所以重点还是放在MLP,SVM,GMM,和k-NN分类器。如果你想用“简单”分类器之一,请查看对应的例子即可。

对于特定任务,决定使用哪个分类器,且对于所选分类选择合适的参数则更具有挑战性,因为每个分类任务是不同的,因而需要不同的处理。HALCON提供了一些算子用于分类,在许多情况下,对于特定的任务和特定的训练数据,你必须尝试使用不同的分类器。除了所选用的方法,在几乎任何情况下,你必须去结合参数去得到一个满意的结果。允许额外的时间去测试,如果第一次测试没有立刻得到满意的结果,请不要灰心,分类是复杂的。

基本概念

分两类由下面几个基本步骤组成:

获取图像

当分类图像的实收,对于训练数据的产生和分类图像,必须被获取。

创建分类器

分类的第一步就是去创建一个新的分类器。这里,你必须决定哪个分类器应用于你特定的分类任务。4个分类器(假设参数有一个最优的调整)的主要优势和劣势如下:

多层感知机:MLP分类器会有一个好的识别率且分类速度更快。作为交换,其训练没有SVM分类快,尤其对于巨大量的训练集。如果分类是时间关键的,但训练可以连线应用的话,MLP方法是一个好的选择。一个拒绝类被返回,但是相比于GMM分类器,它可能会被利群点所影响,因而,推荐对拒绝类有一个额外精确的训练。除此之外,如果你想额外的训练样本,你不应该追加再一个训练,而是用老的和新的训练样本重复训练。支持向量机:相比于MLP分类器,SVM分类会取得稍微更好的识别率和更快的训练,尤其对于巨大量的训练集。另外,新的训练样本的训练可以被简单的添加到先前的训练。作为交换,其分类没有MLP方法快,且并不能自动的获取一个拒绝类。高斯混合模型:GMM分类的优势是,由参数设置来控制,不匹配训练类的特征向量将被分配到一个拒绝类。另外,你可以在第一次训练上应用第二次训练,例如为了添加新的训练样本。GMM分类器的缺点是识别率没有MLP或者SVM方法的好。还有,长度为15的特征向量是被建议的,然而对于MLP和SVM分类器,500维的特征向量也是可以的。K最近邻:k-NN分类器的优势之一是它具有很少且直观的参数,同时,k-NN分类器可以用很少的训练数据工作。原则上,每一类仅一个样本就足够得到合理的结果。K-NN分类器的训练时所有分类器中最快的,其让k-NN分类器对于自动特征选择和快速评估成为了首要选择。缺点就是分类是相对较慢的,且分类结果没有SVM和MLP分类器的好。根据所选的分类方法,你可用ceate_class_mlp,create_class_svm,create_class_gmm或者create_class_knn来创建分类器。

当创建了分类器,正确的参数设置对于后续分类的成功是至关重要的,对于不同的方法这些设置是很明确的。

训练分类器

训练由两个重要的步骤组成,首先,用算子add_sample_class_mlp,add_sample_class_svm, add_sample_class_gmm, 或者add_sample_class_knn将有代表性的训练样本,如每一类的一组特征向量,添加到分类器中。如果你想用像素分类,如你想分割图像为不同颜色或者纹理的区域,你可以用算子add_samples_image_class_mlp, add_samples_image_class_svm,add_samples_image_class_gmm, 或者add_samples_image_class_knn。然后,你可以立马插入一个单独的多通道图像,而不是许多特征向量(每个像素一个)。在第二步,分类器可以用train_class_mlp, train_class_svm, train_class_gmm, 或者train_class_knn训练。需要注意的是在训练阶段复杂的计算被执行,因此,根据训练样本的数量和一些特定方法的影响,例如用于MLP分类的MLP大小,训练可能花费数秒到几个小时不等。

分类数据

对于一般的分类,你可以用算子classify_class_mlp,classify_class_svm, classify_class_gmm或者classify_class_knn,它们采用训练好的分类器,返回要分类数据特征向量最有可能的类别。在大多数情况下,你仅仅需要最好的类。然后,你设置参数Num为1。在较少的情况下,

当用到覆盖类的时候,第二好的类也是需要的(Num=2)。

如对于像素分类中,对于添加样本到训练的步骤中,例如如果一张图像被分割成不同颜色或者纹理类的区域,特定的算子将被提供。对于图像分割,你可以用classify_image_class_mlp, classify_image_class_svm, classify_image_class_gmm或者classify_image_class_knn。,其中这些算子将图像作为输入,而不是每个像素的单个特征向量。需要注意的是,对于具有3通道最大值得图像,你可以用基于查找表(LUT加速分类)的分类去加速图像分割。

除了最有可能的类别,GMM, MLP 和k-NN分类器返回额外的值去评估结果。根据所用分类方法,K-NN返回了一个非常直观等级(例如,距离训练样本的最小距离)。GMM分类器返回时类别对应的概率,MLP分类器返回的是分类的可信度。需要注意的是,对于GMM分类的概率是相对精确的,然而对于MLP分类离群点的可信度是可能,因为MLP计算的方法。例如,当对对象的位置(行和列建立的特征向量)进行分类的时候,对于训练样本远的位置,可信度可能是高的,在覆盖类的情况下是低的。对于SVM分类而言,没有分类可行度或者返回类别概率的信息被给予。

销毁分类器

当你不再需要分类器的时候,依据所用的分类器,你可以用算子clear_class_mlp,clear_class_svm, clear_class_gmm, 或者clear_class_knn去销毁它。


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864