2017-01-09 15 views
0

Я читаю много бумаг о VLAD и Fisher Vectors (FV). В частности, в статье this (и, по существу, в каждой статье, посвященной теме) авторы используют PCA для уменьшения размеров SIFT, VLAD и FV.Как использовать PCA для векторов SIFT или VLAD?

Однако из того, что я понимаю, PCA включает в себя вычисление собственных значений ковариационной матрицы, и мы можем вычислить собственные значения только для квадратных матриц.

Теперь предположим, что мы хотим вычислить PCA для 1M SIFT векторов. Как мы можем вычислить PCA на матрице 1Mx128?

Мое понимание от this вопроса о том, что SVD является альтернативой, но я совершенно удивлен, потому что никто в каких-либо бумагах никогда не говорил о PCA! Я что-то пропустил?

ответ

1

Реализации VLAD и Fisher Vectors эффективно используют PCA для уменьшения размерности патчей изображения. В большинстве документов сообщается о типичных значениях: DIM = 64 и использование 1M патчей, что фактически затрудняет непосредственное применение SVD.

Я видел реализации PCA для SIFT, которые используют итеративный алгоритм, описанный здесь: https://en.wikipedia.org/wiki/Principal_component_analysis#Iterative_computation.

+0

Спасибо за ваш ответ. Вы предложили бы мне эффективную реализацию C++ pca для примерно 500 тыс. Слов? – justHelloWorld

+1

Реализация PCA для SIFT, которую мы использовали в моей предыдущей лаборатории, была проприетарной (к сожалению). 2 наиболее популярных реализации Fisher Vectors: 1) INRIA one (https://lear.inrialpes.fr/src/inria_fisher/) и 2) VLFeat one Oxford (http://www.vlfeat.org/overview/ encodings.html). В обоих случаях могут быть ссылки на VLAD. Возможно, это хорошее место, чтобы исследовать, как они относятся к СПС. – JARS