Bildklassifizierung mit SIFT-Funktionen und SVM


12

Ich hoffe, dass jemand erklären kann, wie mit dem Wortsackmodell eine Bildklassifizierung mithilfe von SIFT / SURF / ORB-Funktionen und einer Support-Vektor-Maschine durchgeführt werden kann.

Im Moment kann ich die SIFT-Merkmalsvektoren für ein Bild berechnen und habe eine SVM implementiert. Es fällt mir jedoch schwer, die Literatur darüber zu verstehen, wie man mit dem Wortsack-Modell die SIFT-Merkmale "vektorquantisiert" und Histogramme erstellt, die sich ergeben Vektoren mit fester Größe, mit denen die SVM trainiert und getestet werden kann.

Alle Links zu Tutorials oder Literatur zum Thema sind willkommen, danke

Antworten:


16

Wenn Sie eine SVM implementieren könnten, könnten Sie die Features quantisieren. :)

Typischerweise werden die Merkmale unter Verwendung von K-Mittelwert-Clustering quantisiert. Zuerst legen Sie fest, wie groß Ihr "Wortschatz" sein soll (sagen wir 200 "visuelle Wörter"), und dann führen Sie k-means-Clustering für diese Anzahl von Clustern aus (200). Die SIFT-Deskriptoren sind Vektoren von 128 Elementen, dh Punkten im 128-dimensionalen Raum. Sie können also versuchen, sie wie alle anderen Punkte zu gruppieren. Sie extrahieren SIFT-Deskriptoren aus einer großen Anzahl von Bildern, ähnlich denjenigen, die Sie mithilfe einer Fülle von Funktionen klassifizieren möchten. (Idealerweise sollte dies ein separater Satz von Bildern sein, in der Praxis erhalten die Benutzer jedoch häufig nur Funktionen aus ihrem Trainingsbildsatz.) Dann führen Sie k-means-Clustering für diesen großen Satz von SIFT-Deskriptoren aus, um ihn in 200 (oder was auch immer) Cluster zu unterteilen , dh jeden Deskriptor einem Cluster zuordnen. k-means gibt Ihnen 200 Clusterzentren,

Dann nehmen Sie jeden SIFT-Deskriptor in Ihr Bild und bestimmen, zu welchem ​​der 200 Cluster er gehört, indem Sie das Zentrum des Clusters ermitteln, das ihm am nächsten liegt. Dann zählen Sie einfach, wie viele Funktionen von jedem Cluster Sie haben. Somit haben Sie für jedes Bild mit einer beliebigen Anzahl von SIFT-Funktionen ein Histogramm von 200 Bins. Das ist Ihr Merkmalsvektor, den Sie der SVM geben. (Beachten Sie, dass der Begriff Features stark überladen ist).

Wie ich mich erinnere, gab es eine Menge Arbeit darüber, wie diese Histogramme normalisiert werden sollten. Ich könnte mich irren, aber ich erinnere mich an eine Arbeit, in der behauptet wurde, dass ein binärer Merkmalsvektor (dh 1, wenn mindestens 1 Merkmal aus diesem Cluster vorhanden ist, und 0, andernfalls) besser funktioniert als ein Histogramm. Sie müssten die Literatur für Details überprüfen, und die Details sind wichtig.

Bearbeiten: Die Computer Vision System Toolbox für MATLAB bietet jetzt zahlreiche Funktionen .


Hallo Dima, danke für deine Antwort, ich hatte nur eine Frage, wenn du sagst "dann führe k-means Clustering für diese Anzahl von Clustern aus", worauf führe du das k-mean Clustering aus? ps Ich bin fast versucht, diese Antwort für Ihren Kommentar zu dem Begriff "Feature" zu akzeptieren, der stark überladen ist. Ich bin für die Bildverarbeitung relevant neu und kann nicht mehr zustimmen
Jono Brogan,

@JonoBrogan: Du solltest meine Antwort akzeptieren, weil sie richtig ist. :) Ich habe die Antwort bearbeitet, um zu versuchen, k-means zu klären.
Dima

Macht es jetzt Sinn?
Dima

Ja, danke. Ich habe die Antwort akzeptiert, obwohl ich mich nur frage, ob Sie wissen, wie Sie entscheiden, wie viele "visuelle Wörter" verwendet werden sollen?
Jono Brogan

3
Das größte Problem ist jedoch, dass der Kmeans-Algorithmus nicht immer das gleiche Ergebnis liefert. Es ist stark randomisiert.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.