Moin,
ich moechte folgendes Problem mit kuenstlichen neuronalen Netzen
bewaeltigen und braeuchte kurz mal eine Einschaetzung von jemandem, der
sich damit auskennt, bevor ich es morgen im Kurs als Projekt vorschlage:
Ich habe ein (spaeter verrauschtes) Bild in dem sich ein dunkler Punkt
auf hellem Grund befindet. Nun moechte ich dessen Koordinaten finden und
aus denen eine Winkelkonfiguration berechnen, die ein zwei
Gelenk-Armmodell in der Ebene einnehmen muesste, um dort hin zu langen.
Das Armmodell sollte am menschlichen Arm orientiert sein, man muss also
eine Winkelbeschraenkung beachten, hat aber wohl oft eine eindeutige
Loesung. Das ganze soll mit neuronalen Netzen bewaeltigt werden. Ist das
realistisch?
Und wo soll ich beginnen mich einzulesen? Das haette ich auch laengst
getan, aber der Arbeitsdruck hier ist relativ gross, so dass mir bisher
keine Zeit geblieben ist.
Danke und Gruss,
Joern
Joern,
neuronale Netze nimmt man unter folgenden Umstaenden :
-man hat sinnlos viel Rechenpower
-es ist ein akademisches Projekt, man moechte was publizieren
-man ist zu faul, oder weiss sonstwie nicht weiter
-man hat genuegend Zeit
Sorry. Ein dunkler Punk in einem Bild ist auch durch
Korrelation zu finden.
Haste recht, ich habe schon mal mit einfachen Schwellenwerten und
Schleifen dunkle Punkte in Bildern gefunden. Aber auch mit Punkt zwei
haste Recht und darum geht es eben: Es ist fuer einen Kurs an der Uni,
der obgleich er Advanced Topics in Control hiess, The Computational
Neurobiology of Reaching and Pointing behandelt. Ich habe also nicht die
Wahl, das mit einem Schwellwert und einfachen trigonometrischen
Gleichungen zu loesen.
Also zu meiner Frage: Ist das realistisch? Kann man es mit endlichem
Zeitaufwand loesen, wenn Sinn und Rechenzeit (solange sich letzteres in
Grenzen haelt, ersteres tut es bestimmt) keine Rolle spielen?
Gruss, Joern
Neuronale Netze kommen inzwischen recht häufig zum Einsatz, zB. zur
Texterkennung. Hat sich einfach erwiesen das man schneller ein gutes
Resultat hat bzw. ein besseres Resultat findet, wenn man was schreibt
was den Algorithmus ausknobelt, anstatt den selber auszuarbeiten.
Vom Prinzip her lässt sich deine Aufgabenstellung mit neuronalen Netzen
lösen, das Netz dürfte auch garnicht so kompliziert werden. Du musst
aber acht geben, dass du dem Netz nicht zuviel Rechenarbeit zumutest.
Zb. wär es unklug das Netz die Positionen der Gelenke direkt berechnen
zu lassen, besser du lässt es die Winkel der Gelenke berechnen und
errechnest im Program daraus die Position. Die Position vom Punkt sollte
auch relativ zum Arm angegeben werden.
Testen kannst du die Sache ja relativ einfach, wenn die Winkel für die
einzelnen Gelenke in bestimmten Tolleranzen sind berechnest du die
absolute Position vom Arm. Je näher die am Punkt ist, desto besser. Dann
lässt du das für ein paarhundert Individuen und Generationen
durchlaufen.
Das Netz selber dürfte garnet so kompliziert werden (überflüssige
Neuronen verlangsamen die Evolution), musst du mal ausprobieren. Aber
ein einfaches Feedforward mit 3 Ebenen dürfte reichen, insg. vll 20
Neuronen.
Vielen Dank, die Antwort hat mich weitergebracht!
Das Netz soll auch nur die Winkel berechnen, es geht um eine sehr simple
Simulation einer Einschaetzung der Armstellung auf Grundlage eines
visuell erfassten Ziels.
Kann ich Dir noch ein paar weitere bloede Fragen zumuten?:
Was genau meinst Du mit "relativ zum Arm"? Der soll ja eine gewisse
Ausdehnung haben. Relativ zur Hand (Ende des Armes) oder ist auch eine
Position relativ zum Schultergelenk machbar (wuerde ich vorziehen)?
Das ganze wuerde ich gern in Java oder MATLAB realisieren. Gaebe es
einen besonders guten Grund fuer MATLAB (ich wuerde Java vorziehen, aber
mein Gruppenkollege eben MATLAB)?
Und wo kann ich mich ueber das Trainieren von neuronalen Netzen belesen?
Bisher ist mir das noch ein grosses Raetsel.
Gruss, Joern
Relativ zum Arm meint, dass du dem Netz zB. nicht übergeben sollst
"Schulter auf 103;123 Ziel auf 345;678" sondern entsprechend "greife zu
202;555" wobei die Schulter immer auf 0;0 festgenagelt wird.
Ansonsten muss das Netz die Sache berechnen, und 2 einfache
Subtraktionen können in einem NN schon kompliziert werden... das Netz
soll ja genauso reagieren, wenn Schulter und Punkt irgendwo anders
liegen, aber relativ zueinander gleich.
Rotationen etc. vorher auch rausrechnen, also zB. so, dass 50;0 immer
"Arm senkrecht zum Körper" (zB. beim Menschen) bedeutet. Wenn du dir den
zugehörigen Menschen im Koordinatensystem vorstellst, würde der dann zB.
immer parallel zur Y-Achse stehen, welche genau durch die Schulter geht.
http://ai-junkie.com/ann/evolved/nnt1.html - hier hast du zB. ein
schönes Tutorial zu Neuronalen Netzen, sehr an der Praxis orientert.
Ach ja, mach die Sache in Java oder C/++. Auch bei kleinen NNs muss
schon einiges gerechnet werden um die NNs zu verbessern.
In deinem Fall kannst du zB. 100x100 Testfälle nehmen (Punkte
gleichmäßig über alle vorkommenden Koordinaten verteilt), jedes Netz auf
alle Testfälle loslassen, und die Fitnesswerte mitteln. Bei 100
Individuen und 1000 Generationen macht das 1Mrd Testrechnungen.
Wenn der evolutionäre Teil gut ist, hast du mitunter auch nach 100
Generationen schon sehr gute Ergebnisse.
Man trainiert das NN mit der Backpropagation. Dh man nimmt den Fehler,
soll-ist und rechnet den rueckwaerts. Anteilig zum Gewicht (in den
linien) wird der Fehler zurueck gerechnet. Durch das einzelne Neuron
hindurch. Die korrektur ist jeweilse nur 1%, oder so. Das macht man am
besten global einstellbar.