如何训练 svm 对英文字母表的图像进行分类?
How to train a svm for classifying images of english alphabet?
我的 objective 是检测图像中的文本并识别它们。
我已经使用笔划宽度变换实现了检测字符。
如何识别它们?
据我所知,我想通过检测特征点并从每个图像中提取特征向量来用我的不同字体字母数据集 [图像] 训练支持向量机。[我使用了 SIFT 特征向量,并使用 kmean 构建了字典聚类和所有]。
我之前检测到一个字符,我将提取这个字符的sift特征向量。我想将其输入支持向量机预测函数。
不知道svm怎么识别。我很迷惑!帮助我并纠正我在概念上出错的地方..
我按照这个教程来识别部分。这个turotial能不能适用于识别字符。
http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O
SVM 是一个受监督的 classifier。要使用它,您需要拥有属于您要识别的对象类型的训练数据。
第 1 步 - 准备训练数据
训练数据由特征向量对及其对应的 class 标签组成。在您的情况下,您似乎已经为检测到的字符提取了基于 SIFT 的 "Bag-of-word" (BOW) 特征向量。因此,对于您的训练数据,您将需要找到许多不同字符的示例,为每个字符提取此特征向量,并将它们与标签相关联(有时称为 class 标签,通常是一个整数),您可能会将其映射到文本描述(例如,数字 0 可以映射到字符 'a',等等。)
第 2 步 - 训练 classifier
SVM classifier 将 array/Mat 特征向量(每行一个)及其相关标签作为输入。在单独的验证集上调整 SVM 的参数(即正则化参数 C,以及适用的内核的任何其他参数)。
第 3 步 - 预测未见数据
在测试时,给定 SVM 在训练期间 未 看到的样本,您计算样本的特征向量(基于 SIFT 的 BOW 向量)。将这个特征向量传递给 SVM 的预测函数,它将 return 你一个整数。还记得之前在准备训练数据时,每个标签都关联了一个整数吗?这是 SVM 为这个样本预测的标签。然后您可以将此标签映射到一个字符。例如,如果您将 0 与 'a'、1 与 'b' 等相关联,则可以使用 vector/hashmap 将整数映射到其对应的文本。
补充说明
您可以查看 OpenCV 的 SVM 教程here了解详情。
注意:通常,对于初学者来说,最困难的部分(在获取数据之后)是调整 classifier。我的建议是首先尝试一个简单的 classifier(例如,linear SVM),它几乎没有要调整的参数。 linear SVM 是一个不错的选择,它只需要你调整一个参数 C。一旦你设法获得了一些不错的结果(这可以保证你的代码的其余部分正在工作)你可以继续使用更多 "sophisticated" classifiers.
最后,你提取的训练数据和特征向量非常重要。训练数据必须 "similar" 到您要预测的测试数据。例如,如果您要预测在具有不同字体、光照条件和姿态差异的路标中发现的字符,则使用由 newspaper/book 档案 may[= 中的字符组成的训练数据41=]不会给你好的结果。这是机器学习中领域自适应的问题。
我的 objective 是检测图像中的文本并识别它们。 我已经使用笔划宽度变换实现了检测字符。 如何识别它们? 据我所知,我想通过检测特征点并从每个图像中提取特征向量来用我的不同字体字母数据集 [图像] 训练支持向量机。[我使用了 SIFT 特征向量,并使用 kmean 构建了字典聚类和所有]。
我之前检测到一个字符,我将提取这个字符的sift特征向量。我想将其输入支持向量机预测函数。
不知道svm怎么识别。我很迷惑!帮助我并纠正我在概念上出错的地方..
我按照这个教程来识别部分。这个turotial能不能适用于识别字符。 http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O
SVM 是一个受监督的 classifier。要使用它,您需要拥有属于您要识别的对象类型的训练数据。
第 1 步 - 准备训练数据
训练数据由特征向量对及其对应的 class 标签组成。在您的情况下,您似乎已经为检测到的字符提取了基于 SIFT 的 "Bag-of-word" (BOW) 特征向量。因此,对于您的训练数据,您将需要找到许多不同字符的示例,为每个字符提取此特征向量,并将它们与标签相关联(有时称为 class 标签,通常是一个整数),您可能会将其映射到文本描述(例如,数字 0 可以映射到字符 'a',等等。)
第 2 步 - 训练 classifier
SVM classifier 将 array/Mat 特征向量(每行一个)及其相关标签作为输入。在单独的验证集上调整 SVM 的参数(即正则化参数 C,以及适用的内核的任何其他参数)。
第 3 步 - 预测未见数据
在测试时,给定 SVM 在训练期间 未 看到的样本,您计算样本的特征向量(基于 SIFT 的 BOW 向量)。将这个特征向量传递给 SVM 的预测函数,它将 return 你一个整数。还记得之前在准备训练数据时,每个标签都关联了一个整数吗?这是 SVM 为这个样本预测的标签。然后您可以将此标签映射到一个字符。例如,如果您将 0 与 'a'、1 与 'b' 等相关联,则可以使用 vector/hashmap 将整数映射到其对应的文本。
补充说明
您可以查看 OpenCV 的 SVM 教程here了解详情。
注意:通常,对于初学者来说,最困难的部分(在获取数据之后)是调整 classifier。我的建议是首先尝试一个简单的 classifier(例如,linear SVM),它几乎没有要调整的参数。 linear SVM 是一个不错的选择,它只需要你调整一个参数 C。一旦你设法获得了一些不错的结果(这可以保证你的代码的其余部分正在工作)你可以继续使用更多 "sophisticated" classifiers.
最后,你提取的训练数据和特征向量非常重要。训练数据必须 "similar" 到您要预测的测试数据。例如,如果您要预测在具有不同字体、光照条件和姿态差异的路标中发现的字符,则使用由 newspaper/book 档案 may[= 中的字符组成的训练数据41=]不会给你好的结果。这是机器学习中领域自适应的问题。