Die Codierung, auf die ich mich konzentriere, ist die Kodierung von Fishern, da ich gezeigt habe, dass sie die besten Ergebnisse mit meiner Arbeit erzielt. Ich möchte also die Kodierung von Fisher auf meinen extrahierten (SIFT) Features testen und die Leistung des Systems mit oder ohne Kodierung testen.Die Codierung der extrahierten Funktionen verstehen
Statt frischen Start fand ich, dass vl_feat eine in der Bibliothek für Fischer Codierung gebaut hat, und sie haben ein Tutorial für das auch here verknüpft
Nun habe ich bereits getan das meiste, was erforderlich ist, aber was tatsächlich erhalten hat codiert ist verwirrend ich, zum Beispiel des Tutorial macht es deutlich, dass Fischer-Codierung durchgeführt wird, unter Verwendung der von GMM so erhaltenen Parametern wie [means, covariances, priors]
und die SIFT extrahierten Merkmale werden verwendet, gemäß der Anleitung in GMM hier zu:
die Die Fisher-Codierung verwendet GMM, um ein visuelles Wörterbuch zu erstellen. Um beispielhaften Aufbau eines GMM, betrachten Sie eine Anzahl von 2-dimensionalen Daten Punkte. In der Praxis wären diese Punkte eine Sammlung von SIFT- oder anderen lokalen Bildmerkmalen. set
numFeatures = 5000 ;
dimension = 2 ;
data = rand(dimension,numFeatures) ;
numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Dann, wenn ich diesen Schritt durchgeführt haben, ich bin eine andere Daten zu codieren? Das verwirrt mich. Ich habe bereits meine extrahierten SIFT-Funktionen verwendet, um die Parameter für GMM zu generieren.
Als Nächstes erstellen wir einen weiteren zufälligen Satz von Vektoren, die die Fisher-Vektordarstellung verwendet und das GMM nur erhalten codiert werden sollte:
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Also hier encoded
das Endergebnis ist, aber was hat es codiert? Ich möchte, dass meine SIFT-Funktionen, die ich aus meinen Bildern extrahiert habe, codiert werden, aber wenn ich dem Tutorial folge, das in GMM verwendet wird. Wenn das der Fall ist, was ist datatoBeEncoded
? Soll ich die SIFT-Talente hier wieder benutzen?
Danke
aktualisieren:
@Shai
Danke, aber ich glaube ich falsch, etwas zu tun sein. Ich verstehe nicht ganz, was Sie mit "Bilder vergleichen mit sich selbst" meinen. Ich habe 4 Klassen, von jeder Klasse 1000 Bilder. So habe ich die ersten 600 Bilder von der Klasse 1 die GMM-Parameter zu erfahren, und dann diese Parameter verwenden, um codieren die Fisher Vektoren
numClusters = 128 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
so jede means, covariances
sind der Größe 128 x 128
und priors der Größe 1 x 128
nun, wenn ich diese mit dem Fischer-Vektor auf den 400 Bilder codieren, mit der Funktion
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
die Größe der Codierung ist sehr unterschiedlich, etwas in der Größe von 12000 x 1
. Diese können nicht mit den generierten Modellen verglichen werden.
Ich hatte bereits ein System, das an der nicht kodierten Version des Datensatzes arbeitete und es funktionierte gut, aber ich wollte sehen, wie Kodierung einen Unterschied machen wird, theoretisch sollten die Ergebnisse verbessert werden.
Ich kann den Code hier bei Bedarf hinzufügen, aber es ist für UBM-GMM und der Grund, warum ich verwirrt bin, ist, weil die Trainingsmethode, die Sie erwähnten, ist, was ich für UBM verwende.
Wenn ich nur die Testbilder kodiere, kann ich sie wegen der Größenabweichung nicht im Klassifikator verwenden.
Vielleicht wähle ich das nicht richtig oder mache einen dummen Fehler, wäre es möglich, ein einfaches Beispiel zu bekommen, durch das ich die Arbeit verstehen kann.
Vielen Dank
Vielen Dank für Ihre Antwort. Also, wenn ich 1000 Bilder habe und 600 für Training und den Rest zum Testen verwende, wie vergleiche ich dann die beiden? Ich meine, in diesem Fall wird das Training in Bezug auf die "gmm" -Parameter durchgeführt, während der Test in Form von "fisher vectors" durchgeführt wird, wobei ein Klassifikator verwendet wird, wie werden sie verglichen? Ist das nicht so, als würde man einen Feature-Typ (Training) mit einem anderen Feature-Typ (Test) vergleichen? Tut mir leid, vielleicht verstehe ich deine Erklärung nicht richtig, wenn möglich kannst du bitte ein Beispiel dafür geben, wie das funktionieren würde? Vielen Dank – StuckInPhD
@FarazKhan Sie sollen nicht gegen das Trainingssatz vergleichen - das wäre "Betrug". Sie können 600 Fotos zum Lernen des Modells verwenden und dann die Fischervektoren der 400 Bilder mit sich selbst vergleichen: ähnliche Bilder finden usw. Sie können zum Beispiel ein Bild (von 400) auswählen und nach den 10 Bildern mit dem nächsten suchen Vektor - das ist die Suche nach den 10 ähnlichsten Bildern. – Shai
es war zu viel, um hier zu schreiben, also habe ich meine ursprüngliche Frage aktualisiert, können Sie bitte einen Blick darauf werfen. Vielen Dank – StuckInPhD