2013-01-17 33 views
8

Desidero riconoscere i veicoli (automobili, biciclette ecc.) Da un'immagine statica. Stavo pensando di utilizzare SURF di farmi utili punti chiave e descrittori e poi treno una rete neurale MLP (Multi layer Perceptron). Tuttavia non so quale sarà l'input per la Rete Neurale e quale sarà l'output in modo da poter identificare quale parte dell'immagine è posizionata un veicolo (probabilmente un rettangolo disegnato attorno ad esso). So che il SURF può restituire dei punti chiave utili nell'immagine insieme ai loro descrittori (l'ho fatto io). I punti chiave hanno angoli e ciascun punto chiave corrisponde a 64 o 128 lungo Vettore come Descrittore. Quello che non so è esattamente cosa sono questi keypoints e come potrebbero essere usati come input per la Rete Neurale.OpenCV che combina SURF con rete neurale

Sto usando OpenCV con Python.

Sono nuovo ad usare i metodi SURF e altri Feature Extraction. Qualsiasi aiuto relativo a questo sarà molto buono.

risposta

8

Se si utilizzano le funzionalità di navigazione, questo è significano un galleggiante partì vettore [128] o [64] in funzione della configurazione si spuma verrà imposta la rete neurale come seguono

-Creare un database con i modelli:

-bikes 
-cars 
-autobus 
-truck 

-Take diferents foto di ogni tipo di oggetti come 10 foto di diferents modello off auto, 10 foto di diferents modello off bikes 10 foto di differenti modelli off camion ... ecc, per ogni foto off ogni oggetto classe estrarre i suoi vettori di funzionalità di navigazione.

-Ogni tipo di oggetto rappresenterà una classe off di oggetto nella rete neurale come questa;

-car ;object class 1 =binary representaation in 4 bits= 0 0 0 1 
-bikes ;obejct class 2 =binary representaation in 4 bits= 0 0 1 0 
-truck ;obejct class 3 =binary representaation in 4 bits= 0 0 1 1 
-ball ;obejct class 4 =binary representaation in 4 bits= 0 1 0 0 

bit -Ogni in repesentacion binari saranno corrisponde a un neurone nello strato di uscita della rete e rappresentano una classe dell'oggetto da riconoscere

Ora la configurazione della rete neurale sarà basata sulla dimensione del vettore funzione e il numero di tipi di oggetto che si desidera riconoscere in questo modo;

Il Numero di nuerons nell'input-strato, 64 o 128 a seconda delle dimensioni off spuma funzione vettoriale configurate e utilizzato

Il numero di nuerons nell'output strato nella rete neurale sarà il numero di classi di oggetti che vuoi riconoscere in questo esempio 4

La funzione di attivazione necessaria a ciascun neurone è la funzione sigmoid o tanh (http://www.learnartificialneuralnetworks.com/), perché le funzioni di navigazione sono rappresentate da numeri float, se si utilizzano feakures anomali o un altro descrittore di funzioni locali binarie (Brisk, ORB, BRief) quindi verrà utilizzata una funzione di attivazione binaria per ogni funzione del gradino di un neurone o divertimento sigm ction

L'algoritmo utilizzato per addestrare la rete è la backpropagation

prima di continuare è necessario impostare e preparare il set di dati per addestrare la rete neurale

esempio

-all feature vector extracted from picture belong a car will be label or asociated to class 1    
-all feature vector extracted from picture belong a bike will be label or asociated to class 2 
-all feature vector extracted from picture belong a truk will be label or asociated to class 3 
-all feature vector extracted from picture belong a ball will be label or asociated to class 4 

a questo esempio si avrà 4 neuroni nello strato di uscita e 128 0r 64 di neuroni nello strato di input.

-L'uscita della rete neurale in modalità di riconoscimento sarà il neurone che ha il valore più alto di questi 4 nueroni.

il suo necesario usa la normalizzazione nell'intervallo [0,1] a tutte le funzionalità nel set di dati, prima di iniziare la fase di addestramento, perché l'uscita della rete neurale è la probabilità che il vettore di input appartenga a una classe di oggetti nel set di dati.

il set di dati per addestrare la rete devono essere diviso come segue:

-70% off the data used to train 
-15% off the data used to validate the network arquitecture (number of neurons in the hidden layyer) 
-15% off the data used to test the final network 

quando la formazione della rete neurale, il criterio di arresto è il tasso recognittion, quando il suo è vicina al 85-90%

perché usare le macchine neural net e non svm, le macchine svm funzionano bene, ma non può essere la migliore mappa di classe di separazione in nessun problema di classificazione lineare come questa o quando si hanno molte classi di oggetti o tipi di oggetti, questa mancanza è aprecciate nei risultati della fase di riconoscimento

Ho consigliato di leggere un po 'circa la teoria delle reti neurali per capire come funzionano

http://link.springer.com/chapter/10.1007%2F11578079_10

OpenCV avere classe di apprendimento automatico per le reti neurali modulo MLP

speranza questo può aiutare a

+0

Grazie per avermi spiegato come utilizzare le reti neurali per il riconoscimento degli oggetti. Tuttavia, nel mio scenario potrebbe avere a che fare con oggetti simili che sono vicini tra loro (ad esempio due taxi adiacenti l'uno all'altro). Devo essere in grado di identificarli separatamente. C'è un modo in cui Neural Networks può aiutarmi con questo? Sento che usare la tecnica che hai menzionato mi consentirà di riconoscere i veicoli ma non di separarli singolarmente (come disegnare un rettangolo attorno ai due taxi) –

2

Il mio suggerimento è di osservare l'ARCO anziché la rete neurale. Vedi qui un esempio di utilizzo di SURF con il modello Bag Of Words per la classificazione degli oggetti (first part, second part). Per migliorare le prestazioni di classificazione, è possibile provare a sostituire il classificatore Naive Bayes con SVM. Inoltre, l'autore ha fornito il buono source code example. Penso che sia un buon punto di partenza.

+0

Ho controllato la tecnica BOW che hai specificato. Sembra abbastanza promettente, tuttavia stavo cercando un processo di apprendimento che può essere salvato e caricato da disco (l'apprendimento continua) come nel caso di Neural Networks. Sono riuscito ad estrarre i descrittori di feature usando surf, i dati sono multi-dimensionali ('N' keypoints vs 128 feature vector) la mia nuova domanda è come posso inserire dati multidimensionali in una rete neurale? –

2

An Un modo semplice per separare l'oggetto rilevato è eseguire un rilevatore di contorni nell'immagine di input come that.

Dopo la sua è possibile utilizzare i x, coordinate y da ogni punti chiave associato a ciascun vettore di caratteristiche riconosciuto dalla rete neurale, e verificare quanti di questi punti chiave sono in parte ciascun contorno di ogni oggetto,

Allo stesso tempo, è possibile impostare una soglia per convalidare un rilevamento corretto della vettura, ad esempio se si dispone di 2 taxi, 2 contorni appartengono a ciascuna vettura e controllare quanti ponits chiave si trovano in ogni contorno;

  • contorno appartengono in taxi 1 ha 20 ponits chiave all'interno
  • contorno appartengono in taxi 1 hanno 5 ponits chiave all'interno

si può dare come taxi 1 o auto 1 come oggetto riconosciuto

On dopo aver riconosciuto l'oggetto valido e il suo contorno, è possibile calcolare il riquadro che ha chiuso l'oggetto

Un altro modo per farlo è quello di ogni allenamento l'immagine estrae i suoi contorni appartengono ad ogni oggetto, calcolano il suo riquadro di delimitazione, usa questa immagine come pura per estrarre le caratteristiche e renderle ad altezze e set.

Problemi correlati