如何训练svm对英文字母图像进行分类

How to train a svm for classifying images of english alphabet?

本文关键字:分类 图像 英文字母 何训练 svm      更新时间:2023-10-16

我的目标是检测图像中的文本并识别它们。我已经实现了使用笔划宽度变换检测字符。如何识别它们?根据我的知识,我想通过检测特征点并从每张图像中提取特征向量,用我的不同字体的字母[图像]数据集来训练svm。[我使用了SIFT特征向量,使用kmean clustering等构建了字典]。

我以前检测过一个字符,我会提取这个字符的sift特征向量。我想把它输入到svm预测函数中。

我不知道如何使用svm进行识别。我很困惑!帮助我,纠正我在概念上的错误。。

我跟着这篇专栏文章认出了那个部分。这个turotial可以应用于识别字符吗。http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O

SVM是一个监督分类器。要使用它,您需要具有与您试图识别的对象类型相同的训练数据。

步骤1-准备培训数据

训练数据由成对的特征向量及其相应的类标签组成。在您的情况下,您似乎已经为检测到的字符提取了基于SIFT的"单词袋"(BOW)特征向量。因此,对于你的训练数据,你需要找到许多不同字符的例子,为每个字符提取这个特征向量,并将它们与一个标签(有时称为类标签,通常是一个整数)相关联,你可能会将其映射到文本描述(例如,数字0可以映射到字符"a",依此类推。)

步骤2-训练分类器

SVM分类器将特征向量的阵列/Mat(每行一个)及其相关标签作为输入。在单独的验证集上调整SVM的参数(即,正则化参数C,以及如果适用的话,内核的任何其他参数)。

步骤3-预测看不见的数据

在测试时,给定SVM在训练过程中看到的而非的样本,您计算样本的特征向量(基于SIFT的BOW向量)。将这个特征向量传递给SVM的预测函数,它将返回一个整数。还记得之前在准备训练数据时,您将一个整数与每个标签关联起来吗?这是SVM为该样本预测的标签。然后可以将此标签映射到角色。例如,如果您将0与"a"、1与"b"等关联,则可以使用向量/哈希映射将整数映射到其文本对应项。

其他注意事项

您可以在这里查看OpenCV的SVM教程以了解详细信息。

注意:通常,对于初学者来说,最困难的部分(在获得数据之后)是调整分类器。我的建议是首先尝试一个简单的分类器(例如,线性SVM),它几乎没有参数可调。一个不错的方法是线性SVM,它只需要调整一个参数C。一旦您设法获得了一些不错的结果(这可以保证代码的其余部分正常工作),您就可以使用更"复杂"的分类器。

最后,您提取的训练数据和特征向量非常重要。训练数据必须与您试图预测的测试数据"相似"。例如,如果你预测路标中的字符,这些字符具有不同的字体、照明条件和姿势差异,那么使用由报纸/书籍档案中的字符组成的训练数据可能不会给你带来好的结果。这是机器学习中域自适应的问题。