Classificazione delle immagini utilizzando le funzionalità SIFT e SVM


12

Spero che qualcuno possa spiegare come utilizzare il modello bag of words per eseguire la classificazione delle immagini utilizzando le funzionalità SIFT / SURF / ORB e una macchina vettoriale di supporto?

Al momento sono in grado di calcolare i vettori delle funzionalità SIFT per un'immagine e ho implementato un SVM, tuttavia trovo difficile comprendere la letteratura su come utilizzare il modello bag of words per "quantizzare vettoriale" le funzionalità SIFT e creare istogrammi che forniscano vettori di dimensioni fisse, che possono essere utilizzati per addestrare e testare l'SVM.

Qualsiasi link a tutorial o letteratura sull'argomento è il benvenuto, grazie

Risposte:


16

Se è possibile implementare un SVM, è possibile quantizzare le funzionalità. :)

Tipicamente le caratteristiche sono quantizzate usando il clustering k-mean. Innanzitutto, decidi quale dovrebbe essere la tua "dimensione del vocabolario" (ad esempio 200 "parole visive"), quindi esegui il clustering k-mean per quel numero di cluster (200). I descrittori SIFT sono vettori di 128 elementi, cioè punti nello spazio 128-dimensionale. Quindi puoi provare a raggrupparli, come qualsiasi altro punto. Estrai i descrittori SIFT da un gran numero di immagini, simili a quelle che desideri classificare usando il bag-of-features. (Idealmente questo dovrebbe essere un insieme separato di immagini, ma in pratica le persone spesso ottengono solo funzioni dal loro set di immagini di addestramento.) Quindi si esegue il clustering k-means su questo ampio set di descrittori SIFT per dividerlo in 200 (o qualunque altro) cluster , ovvero assegnare ciascun descrittore a un cluster. k-means ti darà 200 centri di cluster,

Quindi prendi ciascun descrittore SIFT nell'immagine e decidi a quale dei 200 cluster appartiene, trovando il centro del cluster più vicino ad esso. Quindi conti semplicemente quante funzioni di ogni cluster hai. Pertanto, per qualsiasi immagine con un numero qualsiasi di funzioni SIFT hai un istogramma di 200 bin. Questo è il tuo vettore caratteristica che dai a SVM. (Nota, il termine caratteristiche è gravemente sovraccarico).

Ricordo che è stato fatto molto lavoro su come normalizzare questi istogrammi. Potrei sbagliarmi, ma mi sembra di ricordare un documento che affermava che un vettore di funzione binaria (cioè 1 se è presente almeno 1 caratteristica di questo cluster e 0 altrimenti) funzionava meglio di un istogramma. Dovresti controllare la letteratura per i dettagli e i dettagli sono importanti.

Modifica: la Casella degli strumenti del sistema di visione del computer per MATLAB ora offre il sacco di funzionalità funzionalità .


Ciao Dima, grazie per la tua risposta, ho avuto solo una domanda, quando dici "allora esegui il clustering k-mean per quel numero di cluster", su cosa stai eseguendo il clustering k-mean? ps Sono quasi tentato di accettare questa risposta perché il tuo commento sul termine funzione è gravemente sovraccarico, sono relativamente nuovo nell'elaborazione delle immagini e non potrei essere più d'accordo
Jono Brogan,

@JonoBrogan: dovresti accettare la mia risposta, perché è corretta. :) Ho modificato la risposta per cercare di chiarire k-medie.
Dima,

Ha senso adesso?
Dima,

Sì, grazie. Ho accettato la risposta, anche se mi chiedo solo come fai a decidere quante "parole visive" usare?
Jono Brogan,

3
Ma il problema più grande è che l'algoritmo di Kmeans non fornisce sempre lo stesso risultato. È molto randomizzato.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.