2016-04-08 9 views
1

Ich verstehe, wie Klassifizierungsprobleme zu tun und Faltungsnetzwerke zu verstehen beginnen, die ich denke, ist die Antwort in gewissem Maße. Ich bin ein wenig verwirrt darüber, wie man ein Netzwerk einrichtet, um mir die Ausgabeposition zu geben.Wie kann man ein neurales Netz positionieren?

Nehmen wir an, Sie haben die Position des Endpunktes von Nasen für einen Datensatz mit Gesichtern. Um den Endpunkt zu finden, machst du einfach ein "Klassifikations" -Typ-Problem, bei dem deine Ausgabeschicht etwa 64x64 = 4096 Punkte ist. Aber wenn die Nase an Punkt 43 und Spalte 20 deines Rasters ist, stellst du die Ausgabe einfach auf Null für at-Element 43 * 64 + 20 = 2772, wo Sie es gleich 1 setzen? Dann ordne es einfach auf deine Bildmaße zurück.

Ich kann nicht viele Informationen darüber finden, wie dieser Teil der Identifizierung funktioniert und das ist meine beste Schätzung. Ich arbeite mit dieser Methode an einem zweiten Projekt, aber es wird eine Menge Arbeit sein und ich möchte wissen, ob ich zumindest auf dem richtigen Weg bin. Dies scheint ein gelöstes Problem zu sein, aber ich kann einfach nicht finden, wie die Leute das machen.

Antwort

1

Obwohl das, was Sie beschreiben, in der Praxis funktionieren könnte, werden im Allgemeinen neuronale Netze (konvolutionell und anderweitig) nicht verwendet, um die Position eines Merkmals in einem Bild zu bestimmen. Insbesondere sind Convolutional Neural Networks (CNNs) speziell so konzipiert, dass sie translationsinvariant sind, so dass sie unabhängig von ihrer Position im Eingabebild Features erkennen können - dies ist eine Art umgekehrtes Verhalten.

Eine übliche und effektive Lösung für die Art von Problem, die Sie beschreiben, ist ein Kaskadenklassifizierer. Sie haben einige Einschränkungen, aber für die Art von Anwendung, die Sie beschreiben, würde es wahrscheinlich ziemlich gut funktionieren. Insbesondere Kaskadenklassifizierer sind dafür ausgelegt, eine gute Leistung zu liefern, aufgrund der abgestuften Vorgehensweise, bei der die meisten Abschnitte des Eingangsbildes sehr schnell durch die ersten Koppelstufen gelöscht werden.

Versteh mich nicht falsch, es könnte interessant sein, mit dem von dir beschriebenen Ansatz zu experimentieren; Seien Sie sich jedoch bewusst, dass es sich als schwierig erweisen wird, es gut skalieren zu lassen.

+1

Meine Lektüre scheint zu zeigen, dass sie Regressions-basierte Methoden verwenden, nachdem sie mehr untersucht haben. Im Wesentlichen muss das neuronale Netzwerk die Positionen berechnen und Faltungsnetze für nichtlineare Effekte auf die Berechnung verwenden. Ich wollte Gesichtswahrzeichen Erkennung versuchen und es gibt eine Menge Arbeit in diesem Bereich, wo sie ziemlich verdammt gute Ergebnisse mit nur neuronalen Netzen bekommen und sind etwas weniger heikel als Kaskadenklassifikatoren. Ich betrachte Kaskaden-Klassifikatoren auf jeden Fall auch und denke dabei an einen zweistufigen Angriff mit ihnen und neuronale Netze. – user2927848

+1

Ein zweistufiger Ansatz funktioniert nach meiner Erfahrung ziemlich gut. Im Grunde benutze ich einen Kaskadenklassifikator, um zuerst mögliche Orte des Zielmerkmals zu identifizieren, dann benutze ich die teurere neurale Netzinterferenz, um Vertrauen in einen dieser identifizierten Orte zu gewinnen. Und allgemein verwende ich für das neuronale Netz CNNs, da die Faltungsschichten eine bequeme Möglichkeit bieten, wichtige Merkmale aus dem Bild ohne zu viel manuelle Vorverarbeitung zu extrahieren. – Aenimated1

+1

Mein Problem mit Kaskaden-Klassifikatoren ist, dass sie von denen in opencv sehr knifflig scheinen. Ist es möglich, einige zu trainieren, die nicht rotierend sind und aus mehreren Winkeln arbeiten? Oder müssen Sie mehrere Durchgänge mit vielen Klassifizierern für mehrere Winkel ausführen, um sicherzustellen, dass Sie die Gesichter erfassen? – user2927848

Verwandte Themen