2016-06-22 6 views
1

Ich versuche, das Bag of Features-Modell zu implementieren.Bag of Feature: Wie erstellt man das Abfrage-Histogramm?

Gegeben ein Deskriptor-Matrixobjekt (das ein Bild darstellt), das zu dem ursprünglichen Datensatz gehört, berechnen Sie sein Histogramm einfach, da wir bereits wissen, zu welchem ​​Cluster jeder Deskriptorvektor von k-means gehört.

Aber was ist, wenn wir das Histogramm einer Abfrage-Matrix berechnen wollen? Die einzige Lösung, die mir in den Sinn kommt, ist die Berechnung der Entfernung zwischen jedem Vektordeskriptor zu jedem der k Clusterschwerpunkte.

Dies kann ineffizient sein: unter der Annahme, k=100 (also 100 Zentroide), dann haben wir ein Anfrage Bild durch 1000 SIFT-Deskriptoren, so eine Matrix 1000x100 dargestellt.

Was wir jetzt tun müssen, ist 1000 * 100 eucledian Entfernungen in 128 Dimensionen zu berechnen. Das scheint wirklich ineffizient zu sein.

Wie löst man dieses Problem?

HINWEIS: können Sie mir einige Implementierungen vorschlagen, in denen dieser Punkt erklärt wird?

HINWEIS: Ich weiß, LSH ist eine Lösung (da wir High-Dim-Vektoren verwenden), aber ich glaube nicht, dass die tatsächlichen Implementierungen es verwenden.

UPDATE:

Ich war mit einem Kollegen von mir sprechen: einen hierarchischen Cluster-Ansatz anstelle von klassischen k-Mitteln sollten so viel den Prozess beschleunigen! Ist es richtig zu sagen, dass, wenn wir k Zentroide haben, mit einem hierarchischen Cluster müssen wir nur log(k) Vergleiche zu tun, um den nächsten Schwerpunkt statt k Vergleiche zu finden?

+0

Sie haben Recht, für jede der '1000' Funktionen müssen Sie ihre entsprechenden Zentren finden, um das Histogramm zu erstellen. Das sind 1000 Nearest-Neighbor-Abfragen pro Abfragematrix. Umgang mit NN sind kd-Bäume, zufällige Wälder, Produktquantisierung und LSH um nur einige zu nennen. Jeder hat seine Stärken und Schwächen. – BeyelerStudios

+0

Danke für Ihre Kommentare. Ich denke, dass Sie Recht haben, und ich denke, dass der Hauptpunkt der von Ihnen vorgeschlagenen Lösungen die Vektordimensionalität und -geschwindigkeit ist. Zum Beispiel ist LSH für hohe Dimensionalität in einer schnellen (und ungefähren) Weise. Sind Sie einverstanden? Kennen Sie außerdem einige BoF-Implementierungen in großem Raum? – justHelloWorld

+1

Kd-Bäume und zufällige Wälder sind beide exakte Lösungen, während Produktquantisierung sein kann und LSH ist eine Annäherung. Diese Methoden werden normalerweise kombiniert (z.B. Produktquantisierung und kd-Baum), um Probleme wie Ihre zu lösen. Für Implementierungen folgen Sie den Recherchen, ich müsste googeln, genau wie Sie. – BeyelerStudios

Antwort

1

Für eine Tasche von Features Ansatz müssen Sie tatsächlich die Deskriptoren quantisieren. Ja, wenn Sie 10000 Features und 100 Features 10000 * 100 Distanzen haben (es sei denn, Sie verwenden hier einen Index). Vergleichen Sie dies, um jedes der 10000 Features mit jedem der 10000 Features jedes Bildes in Ihrer Datenbank zu vergleichen. Klingt es immer noch so schlecht?

+0

Danke für Ihre Antwort. Mit "quantisiere die Deskriptoren" denke ich, dass du meine Dimension reduzierst und den Matching-Vorgang beschleunigst. Soweit ich weiß, ist LSH die (einzige?) Lösung für diesen Ansatz. Wie auch immer, was meinst du mit "es sei denn, du benutzt hier einen Index?"Kennen Sie außerdem eine BoF-Implementierung für Vektoren mit hoher Dimension (wie SIFT), die Quantisierung ausnutzen? – justHelloWorld

+0

Könnten Sie bitte einen Blick darauf werfen (http://stackoverflow.com/questions/37987863/similar-images-bag-of-features-visual-word-or-matching-descriptors) Frage? – justHelloWorld

+0

Bitte schauen Sie sich den Abschnitt ** UPDATE ** an :) – justHelloWorld

Verwandte Themen