我正在致力于使用 3 种不同的功能(即 SIFT、HISTOGRAM 和 EGDE)来开发对象分类器。
然而,这 3 个特征具有不同的维度向量,例如SIFT = 128 维。历史记录 = 256。
现在,由于大小不同,这些特征无法连接成一个向量。我打算做的但我不确定这是否是正确的方法是:
对于每个特征,我分别训练分类器,然后分别对 3 个不同的特征应用分类,然后计算多数票,最后以多数票宣布图像。
您认为这是正确的方法吗?
有多种方法可以获得考虑多个特征的分类结果。您所建议的是一种可能性,即不组合特征,而是训练多个分类器并通过某种协议在它们之间达成共识。这通常属于以下领域集成方法。尝试在谷歌上搜索增强随机森林,了解有关如何组合分类器的更多详细信息。
但是,由于特征向量具有不同的维度,因此它们无法连接,这是不正确的。您仍然可以将这些特征连接在一起形成一个巨大的向量。例如,将 SIFT 和 HIST 特征结合在一起将为您提供 384 维的向量。根据您使用的分类器,您可能必须对向量的条目进行标准化,以便没有一个特征仅仅因为通过构造具有更大的值而占主导地位。
EDIT回复您的评论:
看来您的直方图是描述整个对象特征(例如颜色)的一些特征向量,而您的 SIFT 描述符是在该对象的局部兴趣关键点处提取的。由于 SIFT 描述符的数量可能因图像而异,因此您无法将它们直接传递给典型的分类器,因为它们通常会为您希望分类的每个样本获取一个特征向量。在这种情况下,您将必须构建一个codebook(也称为视觉词典)使用从许多图像中提取的 SIFT 描述符。然后,您将使用此代码本帮助您从每个图像中提取的许多 SIFT 描述符中导出单个特征向量。这就是所谓的“视觉词袋(BOW)“模型。现在您有了一个“总结”SIFT 描述符的向量,您可以将其与直方图连接起来形成一个更大的向量。这个单一向量现在总结了整个图像/(图像中的对象)。
有关如何构建词袋码本以及如何使用它从每个图像中提取的许多 SIFT 描述符导出单个特征向量的详细信息,请参阅这本书(可从作者网站免费下载)http://programmingcomputervision.com/ http://programmingcomputervision.com/在“搜索图像”一章下。它实际上比听起来简单得多。
粗略地说,只需运行 KMeans 来对许多图像中的 SIFT 描述符进行聚类,并将它们的质心(这是一个称为“视觉词”的向量)作为码本。例如。当 K = 1000 时,你有一个 1000 个视觉单词的密码本。然后,对于每个图像,创建一个与 K 大小相同的结果向量(在本例中为 1000)。该向量的每个元素对应于一个视觉词。然后,对于从图像中提取的每个 SIFT 描述符,在码本中找到其最接近的匹配向量,并增加结果向量中相应单元格中的计数。完成后,该结果向量实际上会计算不同视觉单词在图像中出现的频率。对于相同的视觉单词,相似的图像将具有相似的计数,因此该向量有效地代表了您的图像。您还需要“标准化”该向量,以确保具有不同数量 SIFT 描述符(以及总计数)的图像具有可比性。这可以像简单地将每个条目除以向量中的总计数一样简单,也可以通过更复杂的度量(例如书中描述的 tf/idf)。
我相信作者还在他的网站上提供了本书附带的 python 代码。如果您不确定,请查看或尝试一下。
组合特征的更复杂的方法包括多核学习(MKL)。在这种情况下,您计算不同的内核矩阵,每个内核矩阵使用一个特征。然后,您找到组合核矩阵的最佳权重,并使用组合核矩阵来训练 SVM。您可以在 Shogun 机器学习库中找到相关代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)