我正在实现一个使用词汇树的基线系统,即基于 HKM 的 BoF 模型,用于图像分类。目前,由于 HKM 导致的量化结构质量差,我正在获得低质量的识别。
我在深度为 6 和分支因子为 10 的树中的最终词汇表中获得了 100.000 个单词,其中理论单词数为 10^6 = 1'000.000
在几篇论文中,比如 Zisserman 的与大规模地标识别相关的论文,他们声称使用了 1'000.000 个单词的词汇,我发现这很难理解,因为这个数字是理论上的,而在实践中并不能保证获得它。
我理解错了吗?如果没有,尽管使用更多描述符来训练树,我应该怎么做才能增加词汇量?
PS:到目前为止,我唯一的提示是使用不同的播种算法进行集群初始化,例如 k-means++ 或 gonzales
谢谢,欢迎任何建议。
阅读@penelope 的回答后,我回来报告我的发现。我构建词汇树的实现配置是:深度 6,分支因子 10,最多 10 次迭代和随机播种。
解决一些问题:
早期阶段人口严重不足的集群:我检查了第一层的集群,它们分布均匀,例如第一个集群通常占整个集群的 10%。
K-means 终止标准:我正在运行聚类过程,直到收敛或达到 10 次迭代。我从 Neister 2006 的实验中获取了这个参数,在该实验中,性能不会提高超过 12 次迭代,而这样做可能会影响整个算法的持续时间。
特征空间的均匀覆盖:我正在使用随机选择播种中心,正如我在问题中所说,使用其他算法(如 k-means++ 或 gonzalez)将成为特征空间的更均匀覆盖。
训练特征的数量应该比预期的集群数量大得多:“预期的集群数量”我理解“预期的词数”,既然如此,这很可能是我的问题的根本原因。我正在使用 300 万个描述符训练一个 100 万个单词的词汇表,而 Zisserman 的实验使用来自 Oxford Buildings 数据集的约 1700 万个描述符,而 Marc Pollefeys 团队的实验使用来自 San Francisco Landmark 数据集的约 1600 万个描述符。
配对几个检测器和描述符:我有一个限制,就是将我使用二进制特征的方法与使用 DoG/MSER 和 SIFT 描述符的基线进行比较。在不久的将来,我计划使用其他检测器(如 AGAST)来评估性能,这些检测器会产生更多与 DoG 产生的质量相似的关键点。
HKM 终止条件:在@penelope 的回答中提到,获得预期大小的词汇树不是问题。我想知道这样的事情是否真的可能,并开始考虑 HKM 的终止条件。在我的实现中,它们是:
- 达到最后一层。
- 数据比集群少。
- 在聚类初始化时获得彼此太近的中心,因此它们很有可能代表同一个词,因此不是很独特。
前两个条件是足够和必要的,但第三个不是,我把它包括在内是因为词汇可能会导致更加独特,至少在理论上是这样。我从 OpenCV 中的分层 k-means 索引实现中借用了它。拆下来方便吗?