Strömende Tensoren – Teil 4

Dies ist der vierte Teil der Artikelserie Strömende Tensoren.

Der Snap-Button wird mit Leben gefüllt, das Training des Netzes soll im Hintergrund geschehen und jetzt nicht nur Koordinaten sondern einen Bildbereich liefern und der Fortschritt des Trainings soll in einem Diagramm dargestellt werden.

Im Bild soll man den entsprechenden Bereich angezeigt bekommen und verändern können. Die Daten sollen auch in die Liste zurück übertragen werden können (Button „Change Data”) und die Liste der Bilder soll wieder in eine Datei auf Platte geschrieben werden können.

Bisher wurde beim Klick auf „Train” eine fest eingestellte Anzahl an Iterationen das Netz trainiert. In dieser Zeit war das Programm blockiert und wenn man danach weiter trainieren wollte musste man erneut auf den Knopf drücken.
Um eine längere Zeit zu trainieren, hatte ich bisher die Anzahl der Iterationen im Programm umgestellt, was nicht sonderlich komfortabel ist.

Der entsprechende Knopf (QButton) ist jetzt schaltbar. Wenn man ihn einschaltet wird das Training des Netzes im Hintergrund gestartet. Schaltet man ihn wieder aus, so wird dem QThread ein Abbruchsignal geschickt und der Knopf inaktiv gesetzt. Ist der Thread angehalten, so wird der Knopf wieder ausgeschaltet und aktiv gesetzt.

Das Hinzufügen der Bilder ist erstaunlich einfach: Über das Kommando raspistill kann eine Aufnahme auf dem Raspberry-PI angestoßen werden. Die Parameter -o - geben an, daß die Ausgabe auf der Standardausgabe erfolgen soll. So kann dieses Kommando über ssh natürlich auch auf einem entfernten Rechner gestartet werden.

Das Kommando mit Parametern landet auch in der Konfiguration und kann damit unabhängig eingestellt werden. Die gesamte Kommandozeile lautet bei mir: ssh user@raspi raspistill -o -. Dabei habe ich mir mit ssh_keygen die Möglichkeit geschaffen ohne die Eingabe eines Passwortes eine Verbindung zu dem Raspberry-PI aufzubauen.

Da die Aufnahme eine gewisse Zeit benötigt und die Oberfläche in der Zeit nicht tot sein soll, geschieht die Aufnahme asynchron in einem Thread.

In dem Thread wird das entsprechende Aufnahmekommando über QProcess gestartet und die Daten aus dem Kommando über die Standardausgabe des Prozesses in einer Datei gespeichert.

Nachdem die Übertragung des Bildes fertig ist, bekommt die Oberfläche ein entsprechendes Signal geschickt, damit das Bild in die Liste eingebunden wird und angezeigt wird.

Die Bilder werden jetzt im Unterverzeichnis Images gespeichert, das Diagramm ist über ein QChartView eingebaut und es existiert jetzt die Möglichkeit die Sprache umzuschalten.

Hier das aktuelle Aussehen:
Screenshot

Leider habe ich irgendwie das Layout etwas kaputt gemacht. Beim Vergrößern des Fensters bleiben Bild und Diagramm klein und der Dialogteil auf der rechten Seite bekommt den zusätzlichen Platz. Bild und Diagramm teilen sich den vertikalen Platz gleichmäßig auf. Eigentlich sollte in der Breite das Bild und das Diagramm möglichst viel Platz bekommen und in der Höhe sollte dem Bild ca. doppelt soviel Platz zugeteilt werden.

Als nächstes muß ich mich mal wieder um das neuronale Netz kümmern:
Der Menüpunkt zum Zurücksetzen des Netzes soll aktiviert werden. Bisher geht das nur, indem man die Dateien aus dem Verzeichnis löscht, in welches das Netz von TensorFlow automatisch gespeichert wird.
Beim Initialisieren des Netzes scheint es noch ein kleines Problem mit den Startwerten zu geben. Relativ häufig liefert das Netz für einen oder mehrere der vier Werte eine Null zurück. Diese ändert sich dann auch nicht mehr, egal wie lange ich das Netz trainieren lasse.
Bei der Bewertung der bisherigen Lernleistung wird der selbe Datensatz verwendet wie zum Trainieren. Hier sollen einige Bilder aus dem Training entfernt werden und mit diesen Bilder die Lernleistung überprüft werden.
Und zu guter Letzt sollte ich mal die Kamera provisorisch aufbauen und viele Bilder mit dieser Kamera schießen und das Netz mit den entsprechenden Bildern trainieren. Der bisher verwendete Datensatz von 152 Bildern ist etwas knapp bemessen um das Netz sinnvoll zu trainieren.

Links zu weiterführenden Informationen dieser Artikelserie:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.