2017-01-09 10 views
0

나는 VLADFisher Vectors (FV)에 관한 많은 논문을 읽었습니다. 특히 this 논문 (그리고 본질적으로 주제에 관한 모든 논문에서) 저자들은 SIFT, VLAD 및 FV 치수를 줄이기 위해 PCA를 사용합니다.SIFT 또는 VLAD 벡터에 PCA를 어떻게 사용할 수 있습니까?

그러나 PCA는 공분산 행렬의 고유 값 계산과 관련이 있으며, 정사각형 행렬에 대해서만 고유 값을 계산할 수 있습니다.

이제 우리는 1M SIFT 벡터에 대해 PCA를 계산한다고 가정합니다. 1Mx128 매트릭스에서 PCA를 계산하려면 어떻게해야합니까?

내 이해는 this입니다. SVD가 대안이지만 다른 어떤 논문의 아무도 PCA에 관해서 이야기 한적이 없기 때문에 나는 아주 놀랐습니다! 내가 뭐 놓친 거 없니?

답변

1

VLAD 및 피셔 벡터의 구현은 효과적으로 이미지 패치의 차원을 줄이기 위해 PCA를 사용하는 경향이 있습니다. 대부분의 논문은 일반적인 값이 DIM = 64이며 1M 패치를 사용하므로 SVD를 직접 적용하기가 어렵다는보고가 있습니다.

여기에보고 된 반복 알고리즘을 사용하는 SIFT 용 PCA 구현을 보았습니다 : https://en.wikipedia.org/wiki/Principal_component_analysis#Iterative_computation.

+0

답변 해 주셔서 감사합니다. 약 500k 단어에 대해 효율적인 C++ pca 구현을 제안 해 주시겠습니까? – justHelloWorld

+1

이전 실험실에서 사용한 SIFT 용 PCA 구현은 유감스럽게도 (유감스럽게도)있었습니다. 피셔 벡터의 가장 널리 사용되는 두 가지 구현은 다음과 같습니다. 1) INRIA (https://lear.inrialpes.fr/src/inria_fisher/) 및 2) Oxford의 VLFeat (http://www.vlfeat.org/overview/ encodings.html). VLAD에 대한 언급도있을 수 있습니다. 어쩌면 그들이 PCA를 다루는 지 조사 할 수있는 좋은 곳 일 수도 있습니다. – JARS