2013-01-17 8 views
8

Ich möchte Fahrzeuge (Autos, Fahrräder etc.) von einem statischen Bild erkennen. Ich dachte an mit SURF mir nützlich keypoints erhalten und Deskriptoren und dann mit dem Zug ein MLP (Multi Layer Perceptron) Neural Network. Allerdings weiß ich nicht, was die Eingabe in das Neuronale Netzwerk sein wird und was es ausgegeben wird, so dass ich identifizieren kann, in welchem ​​Teil des Bildes sich ein Fahrzeug befindet (Wahrscheinlich ein Rechteck um es herum gezeichnet). Ich weiß, dass SURF nützliche Keypoints im Bild zusammen mit ihren Deskriptoren zurückgeben kann (ich habe dies getan). Die Schlüsselpunkte haben Winkel und jeder Schlüsselpunkt entspricht einem 64 oder 128 langen Vektor als Deskriptor. Was ich nicht weiß ist, was genau diese Schlüsselpunkte sind und wie sie als Input für das Neuronale Netzwerk verwendet werden könnten.OpenCV Combining SURF mit Neural Network

Ich verwende OpenCV mit Python.

Ich bin neu in der Verwendung von SURF und anderen Feature Extraction-Methoden. Jede diesbezügliche Hilfe wird sehr gut sein.

Antwort

8

Wenn Sie surfen Funktionen zu verwenden, bedeutet das ist ein Schwimmer aufrechnen Vektor [128] oder [64] abhängig von Ihnen Surf-Konfiguration Sie das neuronale Netz eingestellt werden als

-Create eine Datenbank mit Modellen wie folgt vor:

-bikes 
-cars 
-autobus 
-truck 

-Take diferents Fotos von jeder Art von Objekten wie 10 Fotos von diferents Modellen aus Autos, 10 Fotos von diferents Modell off-Bikes 10 Fotos von differents Modell aus LKWS ... etc, zu jedem Foto aus jedem Objekt Klasse extrahiert seine Surf-Feature-Vektoren.

- Jeder Objekttyp repräsentiert eine Klasse von Objekten im neuronalen Netz wie diese;

-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 

-Jedes Bit in binärer repesentacion wird auf ein Neuron in der Ausgabeschicht des Netzwerks und stellen eine Klasse von Objekt entsprechen werden zu erkennenden

Nun wird die Konfiguration des neuronalen Netzwerks wird auf dem basieren, Größe des Feature-Vektors und Anzahl der Objekttypen, die Sie auf diese Weise erkennen möchten;

Die Anzahl der nuerons in der Eingangsschicht; 64 oder 128 der Größe abhängig off Vektor surf Funktion, die Sie konfiguriert und verwendet

Die Anzahl der nuerons in der Ausgangsschicht in dem neuronalen Netz wird die Anzahl der Klassen von Objekten, die Sie in diesem Beispiel erkennen möchten 4

Die Aktivierungsfunktion für jedes Neuron ist die Sigmoid- oder Tanh-Funktion (http://www.learnartificialneuralnetworks.com/), da die Surf-Features durch Floats-Zahlen dargestellt werden, wenn Sie Freak Fetures verwenden oder ein anderer binärer lokaler Funktionsdeskriptor (Brisk, ORB, BRief), dann werden Sie eine binäre Aktivierungsfunktion für jedes Neuron wie die Stufenfunktion o sigm fun verwenden ction

Die algoritm verwenden, um das Netzwerk zu trainieren ist die Backpropagation

bevor Sie weiterhin festlegen müssen und bereitet die Daten festgelegt, das neuronale Netzwerk

-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 

dieses Beispiel Sie

Beispiel zu trainieren wird 4 Neuronen in der Ausgangsschicht und 128 0r 64 Neuronen in der Eingangsschicht haben.

-Der Ausgang des neuronalen Netzes im Recognition-Modus wird das Neuron sein, das den höchsten Wert dieser 4 Nuerons hat.

Es ist notwendig, Normalisierung im Intervall [0,1] zu allen Features im Datensatz vor Beginn der Trainingsphase zu verwenden, da der Ausgang des neuronalen Netzes die Wahrscheinlichkeit ist, dass der Eingangsvektor zu diesem gehört eine Klasse von Objekten in dem Datensatz.

die eingestellten Daten auf das Netzwerk zu trainieren, haben aufgeteilt wie folgt zu:

-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 

wenn das neuronale Netz trainiert, ist das Stoppkriterium recognittion Rate, wenn es in der Nähe zu 85-90% ist

Warum neuronale Netze und nicht SVM-Maschinen verwenden, Svm-Maschinen funktionieren gut, aber es kann nicht die beste Trennungsklasse Karte in keine lineare Klassifizierung Probleme wie dies oder wenn Sie viele verschiedene Objekte Klassen oder Arten von Objekten, diesen Mangel haben ist in der Recognition Phase Ergebnisse

apreciciate

ich recomended Sie einige über das neuronale Netz Theorie lesen, zu verstehen, wie sie

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

opencv haben maschinelles Lernen Klasse neuronale Netze mlp Modul

hoffen, dass diese Sie

helfen kann
+0

Danke, dass Sie mir erklärt haben, wie ich Neuronale Netze für die Objekterkennung nutzen kann. Allerdings muss in meinem Szenario möglicherweise mit ähnlichen Objekten zu tun haben, die nahe beieinander liegen (zB zwei benachbarte Taxis). Ich muss in der Lage sein, sie separat zu identifizieren. Gibt es eine Möglichkeit, dass Neural Networks mir dabei helfen können? Ich fühle, dass die Verwendung der Technik, die du erwähnt hast, es mir erlaubt, die Fahrzeuge zu erkennen, sie aber nicht einzeln zu trennen (wie ein Rechteck um die zwei Taxis zu ziehen) –

2

Mein Vorschlag ist, BOW statt neuronales Netzwerk zu beobachten. Sehen Sie hier ein Beispiel für die Verwendung von SURF mit dem Bag Of Words-Modell zur Objektklassifizierung (first part, second part). Um die Klassifizierungsleistung zu verbessern, könnten Sie versuchen, den Naive Bayes Classifier durch SVM zu ersetzen. Auch der Autor zur Verfügung gestellt gut source code example. Ich denke, es ist ein guter Anfang.

+0

Ich überprüfte die BOW-Technik, die Sie angegeben. Es scheint sehr vielversprechend, aber ich war auf der Suche nach einem Lernprozess, der gespeichert und von der Festplatte geladen werden kann (Lernen fortgesetzt), wie es bei Neuronalen Netzen der Fall ist. Ich habe es geschafft, die Features Deskriptoren mit Surf extrahieren, aber die Daten sind multidimensional ('N' Keypoints vs 128 Feature-Vektoren) meine neue Frage ist, wie kann ich mehrdimensionale Daten in ein Neuronales Netzwerk eingeben? –

2

Eine Arbeit Eine einfache Möglichkeit, das erkannte Objekt zu trennen, ist das Ausführen eines Konturdetektors im Eingangsbild wie that.

Nach dem Sie die x, y Koordinaten von jedem Schlüsselpunkte Mitarbeiter zu jedem Merkmalsvektor durch das neuronale Netzwerk erkannt verwenden können, und prüfen Sie, wie viele dieser Schlüsselpunkte in der Seiten jeweils Kontur jeder Objekte,

Gleichzeitig können Sie eine Schwelle setzen, um eine korrekte Autoerkennung zu bestätigen, zum Beispiel, wenn Sie 2 Taxis haben, 2 Kontur gehören zu jedem Auto und affter überprüfen, wie viele Schlüssel ponits in jeder Kontur sind;

  • Kontur gehören Taxi 1 20 Schlüssel ponits innerhalb
  • Kontur gehören Taxi 1 5 Schlüssel ponits haben innen

Sie als Taxi 1 o Auto geben kann 1 als Objekt

erkannt

On Wenn Sie das validate-Objekt erkannt haben und seine Kontur haben, können Sie die Bouding-Box berechnen, die das Objekt geschlossen hat.

Eine andere Möglichkeit ist das Training Bild extrahieren Sie seine Konturen gehören zu jedem Objekt, berechnen Sie seine Bounding-Box verwenden Sie diese wie reines Bild, um die Funktionen zu extrahieren und machen es zu einem Bild

Verwandte Themen