AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Neuronales Netz - Wie kann es sich mehrere Dinge merken?
Thema durchsuchen
Ansicht
Themen-Optionen

Neuronales Netz - Wie kann es sich mehrere Dinge merken?

Ein Thema von Flips · begonnen am 2. Okt 2007 · letzter Beitrag vom 1. Nov 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von brinkee
brinkee

Registriert seit: 27. Aug 2004
60 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 3. Okt 2007, 18:29
Hi Flips,

wenn Du die Infos doch aus meinem Post und von meiner Seite hast, wieso fragst Du dann nicht einfach mich, wie ich das realisiert habe. Die Facharbeit ist übrigens nicht von mir, sondern ich habe sie wegen des passenden Themas nur auf meiner Homepage zur Verfügung gestellt.

Damit Du nicht nachher ein funktionierendes NN hast, was Du niemandem erklären kannst:

1.) Wichtig dabei ist, dass man eine Input-Schicht, eine Output-Schicht (eventuell auch Zwischenschichten) und die Verknüpfungen dazwischen erzeugen muss.
2.) Die Input-Schicht besteht aus deinen 8x8 (oder bei mir 10x10, oder auch beliebig vielen) Eingabe-Pixeln.
3.) Die Ausgabe-Schicht kann entweder aus allen möglichen Werten bestehen, die das Netz erkennen soll, oder in beliebiger Art codiert auch anders
4.) Die Synapsen stellen die Verbindung her. Sie verbinden jedes Neuron der Input- mit jedem Neuron der Output-Schicht
5.) Damit man es richtig implementiert, dürfen die Neuronen der Output-Schicht in keiner Art und Weise ein "Kennt-Beziehung" o.Ä. zur Inpu-Schicht haben. Der Informationsdurchsatz in der Abfrage Phase (also nicht im Training) darf nur von Input zu Output stattfinden.
6.) Das Ergebnis der Abfrage wird erreicht, indem die Synapsen, die von aktivierten Input-Neuronen ausgehen, erregt werden. Das heißt, dass ihr "Gewicht", was aus dem Training herrührt, an die Output-Neuronen weitergereicht wird. Das Nuron mit dem größten Wert hat dann so zu sagen gewonnen.

Ich weiß, dass meine Implementierung eine Minimalversion darstellt, und noch nicht alle mathematischen Vorraussetzungen erfüllt. Allerdings ist sie objektorientiert implementiert und kann beliebig angepasst werden.

Hoffe, dass ich ein wenig zum Verständnis beigetragen habe,

Markus
Markus Brinkmann
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#12

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 3. Okt 2007, 18:35
Ja das hast du, ich bin sicher dein Post hätte mir gestern noch geholfen^^
Was ich allerdings merke ist, dass dein Programm fast genauso aufgebaut ist wie deins, und bis jetzt sehr viel weniger Code hat (was ja nichts heißen soll)

Ich arbeite noch ein paar Fehler aus und kommentiere den Quelltext, dann stelle ich es mal online.
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von brinkee
brinkee

Registriert seit: 27. Aug 2004
60 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 3. Okt 2007, 18:55
Hi Kollege,
na, es kann sein, dass du weniger Code hast und das Programm das gleiche leistet. Jedoch - ein endgültiges Urteil werde ich mir erst erlauben, wenn ich deinen Code gesehen habe - habe ich Wert darauf gelegt, dass das Netz an sich sauber objektorientiert implementiert ist. Da kann es schonmal sein, dass man etwas "quellcodeseitig" umständlicher erarbeitet - für den Speicheraufwand nachher ist das aber entscheidend.
Ausserdem habe ich die Klassen so entworfen, dass man sie universell einsetzen kann, nicht nur für ein Projekt.
Das Testprogramm an sich ist nur eine "quick-and-dirty"-Strickerei, die zeigen soll, wie die Klassen funktionieren.
Was man nämlich nachher mit ihnen anstellen kann geht weit über das Erkennen von Zahlen hinaus. Zur Zeit arbeite ich an der Erkennung von Geldscheinen, einer Erkennung für geometrische Figuren auf dem Bild einer Webcam und ich versuche mich an der erkennung biometrischer Merkmale an den Umrissen von den Blättern zweikeimblättriger Pflanzen - alles mit den selben Units.

Also: wenn ich Dir mit dieser kleinen Belehrung über objektoriertes Programmieren auf die Füße getreten sein sollte - sorry!
Ansonsten erzähle ich dir gerne mehr.

Lieber Gruß,
Markus

(edit) P.S.: Vielleicht hängt es bei Dir ja auch irgendwann einmal an der Unterscheidung einer 8 und einer 3 Man kann da schon länger dranhängen, sage ich Dir

(edit) Sorry für die ganzen edits: Für alle, die den Thread bei OpenSource nicht gelesen haben und mein Programm nicht kennen - markusbrinkmann.net
Markus Brinkmann
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#14

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 3. Okt 2007, 20:04
Hi.

Keine Angst, meins is auch OO, allerdings ziemlich sinnlos, da ich nicht wie du auf die Universelle Einsetzbarkeit hingearbeitet habe, sondern wie du bereits sagtest auf das spezielle Projekt.
Ich denke, ich werde versuchen es in mein Webcam-Überwachungsprojekt zu integrieren.
Ich bin sowieso davon überzeugt, dass dein Programm allgemein "besser" ist
Bin ja erst blutiger Anfänger in sachen NN-Programmierung
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von brinkee
brinkee

Registriert seit: 27. Aug 2004
60 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 3. Okt 2007, 22:59
Hehe,

das ist natürlich eine gesunde Einstellung. Bin gespannt auf Deinen Code. Was hast Du mit dem Netz vor? - Nur wenn ich fragen darf.

Lieber Gruß,
Markus
Markus Brinkmann
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#16

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 4. Okt 2007, 14:16
Nun ja, die Fähigkeit eines NN zu lernen, was wichtig ist un was nicht, wollte ich nutzen um meiner Webcam-Überwachung die nötige "Intelligenz" zu verleihen.
Bisher läuft es nach dem Motto
Code:
Wenn AbweichendePixel > Schwellenwert dann
  GibAlarm
Wenn das Bild wie bei meiner schlechten Webcam flimmert, dann ist das schon ein echtes Problem (Wobei ich einen Anti-Flimmer-Algorithmus entwickelt habe, allerdings nur SW un nicht das Gelbe vom Ei ).
Daher wäre so ein neuronales Netz, das lernt, dass im oberen rechten Ecken zu 99% immer nur Schwarz ist sehr praktisch, damit falls da mal ein heller Flimmer-Pixel hinkommt, kein Alarm ausgelöst wird, weil das Netz weiß : "Hier ist mal weiß, das interessiert aber nur wenig -> vernachlässigen"

Nur so als Beispiel, in dem Zusammenhang kann man das bestimmt noch weiter Ausführen.
Philipp F.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#17

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 4. Okt 2007, 14:49
Zitat von Flips:
Nun ja, die Fähigkeit eines NN zu lernen, was wichtig ist un was nicht, wollte ich nutzen um meiner Webcam-Überwachung die nötige "Intelligenz" zu verleihen.
Bisher läuft es nach dem Motto
Code:
Wenn AbweichendePixel > Schwellenwert dann
  GibAlarm
Wenn das Bild wie bei meiner schlechten Webcam flimmert, dann ist das schon ein echtes Problem (Wobei ich einen Anti-Flimmer-Algorithmus entwickelt habe, allerdings nur SW un nicht das Gelbe vom Ei :wink: ).
Daher wäre so ein neuronales Netz, das lernt, dass im oberen rechten Ecken zu 99% immer nur Schwarz ist sehr praktisch, damit falls da mal ein heller Flimmer-Pixel hinkommt, kein Alarm ausgelöst wird, weil das Netz weiß : "Hier ist mal weiß, das interessiert aber nur wenig -> vernachlässigen"

Nur so als Beispiel, in dem Zusammenhang kann man das bestimmt noch weiter Ausführen.
Hallo,

vorab, weil du ja in Pixeln sprichst: eine Kamera in VGA-Auflösung hat ca 300000 davon, ein entsprechendes NN also 300000 Eingangsneuronen... natürlich kann sich jeder soviel Hard- und Software installieren wie er meint, ich wollte nur drauf hinweisen.

Generell geht die Diskussion hier an Teilen des Problems vorbei. Das NN ist, selbst wenn es steht, längst nicht alles, es muss ja erst was lernen, und dabei ist es NICHT damit getan, dem NN perfekte Ziffern von 0 - 9 zu präsentieren, sondern es müssen alle vorkommenden Ausformungen dabei sein und natürlich auch fehlerhafte Bilder jeder Art. Wenn man nicht auf reale Datenbestände zurückgreifen kann (z.B. die Fingerabdrucksammlung des BKA für eine entsprechendes Erkennungssystem) wird die Erstellung der Lerndaten sehr aufwendig.

Im Beipiel Webcam bräuchte man also eine Sammlung von "harmlosen" und "gefährlichen" Bildern jeder denkbaren Zusammensetzung - woher nehmen??

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von brinkee
brinkee

Registriert seit: 27. Aug 2004
60 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 4. Okt 2007, 14:52
Ja, richtig. Man muss ich immer genau darüber im klaren sein, was ein NN so kann und was nicht. Die richtigen Vorraussetzungen für die Arbeit des Netzes zu schaffen ist wichtig. Deshalb muss man aus Bildern, vor allem aus denen von Webcams, erstenmal die wichtigsten Daten exrapolieren.

Bei der Erkennung von Nummernschildern könnte das so aussehen:
1.) Man sucht sich im Bild ein (halbwegs) schwarz umrandetes weißes Viereck, bei dem ein bestimmtes Verhältnis von Breite zu Höhe vorliegt (innerhalb gewisser Toleranzen)
2.) Man sucht sich alles raus, was nicht zusammenhängt.
3.) Punkte wie die TÜV-Plakette raus
4.) Dann die Buchstaben und Zahlen Vektorisieren und dem Netz in schön normierter Form zu futtern geben

Es gibt 562 verschiedene Orte/Kreise, die die ersten 1-3 Buchstaben eines Kennzeichens ausmachen.
Weiter gibt es die Formate mit zwei Buchstaben und drei Ziffern und das mit 3 Buchstaben und zwei Ziffern. Kommunen fahren oftmals Kennzeichen mit bloß 4 Ziffern.


Macht also:

10^4 = 10.000 Möglichkeiten für die Kommunen
26^2 * 10^3 + 26^3 * 10^2 = 676.000+1.557.600 = 2.233.600 Möglichkeiten für Otto-Normal-Verbraucher
-------
562 * (10.000 + 2.233.600) = 1.260.903.200 Mögliche Autokennzeichen

Ich hoffe, ich habe jetzt auf die Schnelle keine groben und peinlichen Rechenfehler gemacht
Aber das sind schon ein paar Autos, die man da erkennen könnte. Ist zwar schon tausendmal gemacht worden, sowas. Aber naja, ähnlich ist es mit den Captchas ja auch.

Um auf den Einwand von Reinard einzugehen:
Sicherlich macht es null Sinn, das komplette Bild in ein NN zu "laden". Es käme mit der Flut aus unterschiedlichen Zuständen nicht klar. Aber wenn man das Bild schön monochrom macht, sich nur die Objekte rauspackt, die sich bewegen, dann kann man mit dem Netz schon beispielsweise zwei unterschiedliche Kuscheltiere oder ähnliches Unterscheiden. Wenn es dann die Barbie ist, kann man sie automatisch abschießen, oder was auch immer



LG, Markus
Markus Brinkmann
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#19

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 5. Okt 2007, 10:15
Nun ja, ist mir schon bewusst, dass das ne enorme Datenmenge wäre.
Allerdings geht es mir ja im Vorfeld darum, dass ein anderer Algorithmus (oder der Mensch, der das Programm bedient?) wichtige und unwichtige Stellen im Bild erkennt (markiert). Wenn man den Blick jetzt beispielsweise auf eine Tür fixiert, dann sind die Inputneuronen natürlich nur die Pixel,welche die Tür beschreiben, wobei man ja je nach Größe der Tür auch noch sagen wir 4*4 Pixel zu einem Neuron (oder eben 4*4 Inputs zu einer Hidden-Unit) zusammen fassen könnte. Jetzt nur mal als Beispiel.
Philipp F.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#20

Re: Neuronales Netz - Wie kann es sich mehrere Dinge merken?

  Alt 5. Okt 2007, 10:52
Vor einiger Zeit, irgendwann im Studium, habe ich mich auch mal mit neuronalen Netzwerken beschäftigt. Dabei hatte ich einen wunderschönen, ausführlichen Artikel über Gesichtserkennung mit neuronalen Netzwerken, der auf viele der in diesem Thread beschriebenen Probleme einging. Leider finde ich den Link dazu nicht.
Dieses System ging das gesamte Bild durch, indem es von winzigen bis riesigen Größen alle möglichen Rechtecke auf dem Bild durchging und dann dieses Rechteck als Eingabe für das neuronale Netz verwendete. Das neuronale Netz hatte als Ergebnis die Frage, ob in diesem Rechteck ein Gesicht liegt. Es war zwar nicht übermäßig performant, aber erreichte auf damaligen Rechnern eine Zeit von etwa sieben Sekunden für ein Webcam-Bild.
Irgendwo auf codeproject.com sollte auch noch ein Artikel dazu liegen (aber auch den konnte ich nicht auf Anhieb finden).
Um die Netzwerke wirklich effizient einzusetzen, sollte man jedenfalls in der Tat die Eingabedaten reduzieren und, ebenfalls wichtig, aufbereiten. Für eine Kennzeichenerkennung wäre es also beispielsweise hilfreich, die Buchstaben farblich sehr deutlich von ihrer Umgebung zu separieren. Auch eine Kantenerkennung kann hier hilfreich sein. Nicht sinnvoll wäre hingegen, vom Netz zu erwarten, dass es das gesamte Kennzeichen erkennt - eher kann ein Netz versuchen, das Kennzeichen als ganzes im Bild zu finden (ähnlich wie die Gesichtserkennung), und ein zweites Netz kann es dann Buchstabe für Buchstabe durchgehen und jeden Buchstaben erkennen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz