La codifica su cui mi sto concentrando è la codifica del pescatore, poiché ho dimostrato di avere i migliori risultati con il mio lavoro. Quindi voglio testare la codifica della pesca sulle mie funzionalità estratte (SIFT) e testare le prestazioni del sistema con o senza codifica.Comprensione della codifica delle funzioni estratte
Piuttosto che iniziare fresco ho scoperto che vl_feat è dotato di un libreria per la codifica di pescatori e hanno un tutorial per quello pure collegata here
Ora ho già fatto la maggior parte di ciò che è necessario, ma ciò che realmente ottenere codificata mi confonde, per esempio il tutorial chiarisce che codifica fisher viene eseguita utilizzando i parametri ottenuti da GMM come [means, covariances, priors]
e le caratteristiche SIFT estratti devono essere utilizzati qui in GMM secondo il tutorial:
l' La codifica di Fisher utilizza GMM per costruire un vocabolario visivo. Per esemplificare la costruzione di un GMM, si consideri un numero di dati bidimensionali punti. In pratica, questi punti sarebbero una raccolta di SIFT o altre caratteristiche dell'immagine locale.
numFeatures = 5000 ;
dimension = 2 ;
data = rand(dimension,numFeatures) ;
numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Poi una volta ho eseguito questo passaggio sono per codificare un altro set di dati? Questo è ciò che mi confonde. Ho già usato le mie funzionalità SIFT estratte per generare i parametri per GMM.
Successivamente, creare un altro insieme casuale di vettori, che dovrebbe essere codificato utilizzando la rappresentazione Fisher Vector e la GMM appena ottenuto:
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Così qui encoded
è il risultato finale, ma COSA ce l'ha codificato? Voglio che le mie caratteristiche SIFT che ho estratto dalle mie immagini siano codificate, ma se seguo il tutorial utilizzato in GMM. Se questo è il caso, allora cos'è datatoBeEncoded
? Devo usare le abilità SIFT qui di nuovo?
Grazie
Aggiornamento:
@Shai
Grazie, ma credo che devo fare qualcosa di sbagliato. Non capisco cosa intendi per "confrontare le immagini con se stessi". Ho 4 classi, da ogni classe 1000 immagini. Così ho usato i primi 600 immagini dalla classe 1 per imparare i parametri GMM e quindi utilizzare questi parametri per codificare il pescatore vettori
numClusters = 128 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Così ogni means, covariances
sono di dimensioni 128 x 128
e priori della dimensione 1 x 128
ora, quando io uso questi per codificare il vettore pescatore sulle 400 immagini utilizzando la funzione di
encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
la dimensione della codifica è molto diverso, qualcosa lungo la dimensione della 12000 x 1
. Questi non possono essere confrontati con i modelli generati.
Avevo già un sistema che stava lavorando alla versione non codificata del set di dati e funzionava bene, ma volevo vedere come la codifica farà la differenza, in teoria i risultati dovrebbero essere migliorati.
Posso aggiungere il codice qui se necessario, ma è per UBM-GMM e la ragione per cui sono confuso è perché il metodo di allenamento che hai menzionato è quello che sto usando per UBM.
Se ho appena codificato le immagini di prova, non posso usarle nel classificatore a causa della mancata corrispondenza delle dimensioni.
Forse non sto raccogliendo questo correttamente o facendo un errore stupido, sarebbe possibile ottenere un semplice esempio attraverso il quale posso capire il funzionamento.
Grazie mille
Grazie per la risposta. Quindi se ho 1000 immagini e uso 600 per la formazione e il resto per i test, come faccio a confrontare i due? Voglio dire, in questo caso, l'allenamento sarà in termini di parametri '' gmm'' mentre il test sarà in termini di '' vettori pescatori'', usando un classificatore come si confronteranno? Non sarà come confrontare un tipo di funzione (allenamento) con un altro tipo di funzione (test)? Scusa forse non sto capendo correttamente la tua spiegazione, se possibile puoi fornire un esempio di come funzionerebbe? Mille grazie – StuckInPhD
@FarazKhan non si suppone che si possa confrontare il set di allenamento con quello che sarebbe "barare". Puoi utilizzare 600 foto per apprendere il modello e confrontare a loro volta i vettori di pesca delle 400 immagini: trovare immagini simili, ecc. Ad esempio, puoi scegliere un'immagine (tra le 400) e cercare le 10 immagini con il più vicino vettore - che sta trovando le 10 immagini più simili. – Shai
c'era troppo da scrivere qui, quindi ho aggiornato la mia domanda originale, puoi darci un'occhiata. Molte grazie – StuckInPhD