Forum: Mikrocontroller und Digitale Elektronik Ist diese Aufgabe mit kuenstlichen NNs zu bewaeltigen?


von joern (Gast)


Lesenswert?

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

von 2918 (Gast)


Lesenswert?

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.

von joern (Gast)


Lesenswert?

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

von I_ H. (i_h)


Lesenswert?

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.

von joern (Gast)


Lesenswert?

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

von I_ H. (i_h)


Lesenswert?

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.

von 2918 (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.