0

我正在尝试 vlfeat,从图像数据库中获取大量特征,并且我正在使用基本事实测试平均精度 (MAp)。总的来说,我得到了大约 40%。我看到一些论文得到了更高的 MAp,同时使用了与我非常相似的技术;标准的词袋。

我目前正在寻找为标准词袋技术获得更高 MAp 的答案。虽然我看到还有其他实现,例如 SURF 等等,但让我们在这个问题中坚持标准的 Lowe's SIFT 和标准的词袋。

所以事情是这样的,我看到 vl_sift 得到了阈值,让你对特征选择更加严格。目前,我知道追求更高的阈值可能会使您获得更小、更有意义的“好”功能列表,并可能减少一些嘈杂的功能。“好”特征意味着,给定具有不同变化的相同图像,在其他图像上也会检测到非常相似的特征

但是,我们应该为这个阈值设置多高?有时,我看到图像根本没有返回具有更高阈值的特征。起初,我想继续调整阈值,直到我得到更好的 MAp。但同样,我认为继续调整只是为了找到各自数据库的最佳 MAp 是一个坏主意。所以我的问题是:

  1. 虽然调整阈值可能会减少特征数量,但增加阈值是否总是会返回更少但更好的特征?

  2. 有没有更好的方法来获得好的特征?

  3. 还有哪些其他因素可以提高获得良好特征的速度?

4

1 回答 1

2

看看近年来针对 Pascal 挑战而发表的一些论文。他们似乎给我的印象是标准的“特征检测”方法不适用于词袋技术。仔细想想,这是有道理的——BoW 的工作原理是将许多弱的、通常不相关的特征组合在一起。它不是检测特定对象,而是识别对象和场景的类别。因此,过分强调正常的“关键功能”可能弊大于利。

因此,我们看到人们使用密集网格甚至随机点作为他们的特征。根据经验,在 Harris 角、LoG、SIFT、MSER 或任何类似方法上使用其中一种方法对性能有很大的积极影响。

直接回答您的问题:

  1. 是的。来自SIFT api

    通过消除可能不稳定的关键点来进一步细化关键点,因为它们是在图像边缘附近而不是图像块附近选择的,或者是在低对比度的图像结构上找到的。过滤由以下控制:
    峰值阈值。这是接受关键点的最小对比度。它是通过 vl_sift_set_peak_thresh() 配置 SIFT 过滤器对象来设置的。
    边缘阈值。这是边缘拒绝阈值。它是通过 vl_sift_set_edge_thresh() 配置 SIFT 过滤器对象来设置的。

    您可以在此处的“检测器参数”部分中查看这两个阈值的示例。

  2. 研究表明,从场景中密集选择的特征比使用更“智能”方法(例如:SIFT、Harris、MSER)选择的特征产生更多的描述性“词”。使用 vl_feat 的DSIFT 或 PHOW实现尝试您的 Bag of Words 管道。您应该会看到性能有了很大的改进(假设您的“单词”选择和分类步骤调整得很好)。

  3. 在一组密集的特征点之后,该领域最大的突破似乎是“空间金字塔”方法。这增加了为图像生成的单词数量,但为特征提供了位置方面——这在 Bag of Words 中固有地缺乏。在那之后,确保你的参数得到了很好的调整(你正在使用哪个特征描述符(SIFT、HOG、SURF 等),你的词汇表中有多少单词,你正在使用什么分类器等等。)然后......你是在活跃的研究领域。享受 =)

于 2013-02-16T12:01:09.220 回答