От твоего вопроса я бы сказал, что ты совсем сбит с толку.Техника дерева словаря основана на использовании иерархической кластеризации k-средних и весовой схемы TF-IDF для листовых узлов.
В двух словах, алгоритм кластеризации, используемый для построения дерева слов, запускает k-средних один раз.по всем d-dimensional
данным (d=128
для случая SIFT), а затем снова запускает k-means для каждого из полученных кластеров до некоторого уровня глубины.Следовательно, два основных параметра для построения словарного дерева - это коэффициент ветвления k
и глубина дерева L
.Некоторые улучшения учитывают только коэффициент ветвления, в то время как глубина автоматически определяется путем обрезки дерева для выполнения минимального показателя отклонения.
Что касается реализации, cv::BOWTrainer
из OpenCV является хорошей отправной точкой, хотя и не очень хорошообобщено для случая иерархической схемы BoW, поскольку она навязывает центры для хранения в простом cv::Mat
, в то время как дерево словаря, как правило, не сбалансировано, и отображение его на матрицу по уровням может быть неэффективным с точки зрения использования памятизрения, когда число узлов намного меньше теоретического числа узлов в сбалансированном дереве с глубиной L
и коэффициентом ветвления k
, то есть:
n << (1-k^L)/(1-k)