ETS2Autopilot icon indicating copy to clipboard operation
ETS2Autopilot copied to clipboard

Frage zu Loss

Open Kawo83 opened this issue 7 years ago • 20 comments

Hallo,

ich habe es endlich geschafft alles ans laufen zu bekommen, vielen Dank für dieses tolle Projekt!

Ich habe eine Frage zu dem Loss wenn ich Training laufen lasse:

Ich habe ca. 30.000 Bilder gesammelt, beim Training erreiche ich aber nach den 30 Epochen nur einen Wert von 0,7. Wie schaffst du es denn 0,2 - 0,25 zu erreichen? Sind meine Fahrsituationen zu schlecht? Ich habe es aufgeteilt in ca. 70% Autobahn, 20% Freeway und 10% City.

Macht es Sinn immer mehr Bilder zu machen und irgendwann mit 100k+ das Training laufen zu lassen, oder wird das Ergebnis mit mehr Bildern eher schlechter?

Oder soll ich alle löschen und von vorne anfangen?

Der Autopilot löst zur Zeit manche Situationen sehr gut, die allermeisten aber sehr schlecht. Ich kann nicht mal auf der Autobahn den Autopiloten über 10s alleine laufen lassen.

Danke für die Hilfe

Kawo83 avatar Aug 27 '17 09:08 Kawo83

Hi,

ich habe auch noch einmal von vorn begonnen, Daten zu sammeln und habe aktuell rund 21.000 Bilder zusammen. Hier erreiche ich einen Wert von 0,6. Bei meinem aktuellen Modell funktioniert der Autopilot auch noch relativ schlecht.

Du könntest probieren, noch mehr Bilder aufzunehmen und dann zu gucken, ob sich der Loss-Wert senkt. Ist dies nicht der Fall, musst du wohl oder übel noch einmal bei Null beginnen. Wenn es soweit ist, schreibe mich einfach noch einmal an. Da gebe ich dir ein Skript, welches alle Datensätze löscht, aber die Einstellungen beibehält.

Wichtig ist beim Recording, möglichst präzise zu fahren. Also Spurwechsel oder abbiegen ohne zu blinken zu vermeiden. Auch sollte die Aufnahme gestoppt werden, wenn man steht (zum Beispiel an einer Ampel). In der Statusleiste des Autopiloten steht im Recording-Modus immer, ob ein Blinker aktiv ist. Während des Trainings werden nämlich nur die Datensätze berücksichtigt, bei denen kein Blinker aktiv war.

BrunoTh avatar Aug 27 '17 09:08 BrunoTh

Super vielen Dank.

Sind die Datensätze auch gelöscht wenn ich im SQLLiteAdmin die Tabellen leere, außer den Settings Table? Ich würde gerne auch etwas versuchen zu optimieren, leider habe ich von Python gar keine Ahnung. Ich kann nur etwas C#.

Noch eine Frage hätte ich: In einer älteren Version gab es etwas mit der erfassten Geschwindigkeit, spielt das aktuell keine Rolle mehr?

Und werden die - correction Datensätze beim nächsten Training berücksichtigt? Wird Country und Roadtype ausgewertet? Ich müsste die dann fast überall noch setzen.

Im Anhang ist noch ein Bild, wofür ist dieses kleine Fenster? Ich versuche auch gerade rauszufinden wie ich mit GPU trainieren kann. Habe zwei GTX 770 SLI das würde sicher helfen :)

question

Kawo83 avatar Aug 27 '17 09:08 Kawo83

Nur die Tabellen zu leeren reicht nicht aus. Du musst auch noch den captured-Ordner im Autopilot-Verzeichnis löschen.

Die Geschwindigkeitserkennung habe ich erstmal wieder entfernt, da diese eher Quick-and-Dirty implementiert war und nicht bei jedem funktioniert. :D

Die Correction-Datensätze werden beim nächsten Training mit verwendet. In der aktuellen Version werden alle Datensätze (bei denen kein Blinker aktiv war) benutzt. Also ist Country und Road type erstmal irrelevant. Die Spalte Land habe ich angelegt, um später eventuell landspezifische Modelle zu erstellen, da die Straßenmarkierungen bei manchen Ländern (z.B. in Frankreich) anders aussehen. Aber das spielt erstmal noch keine Rolle. Ich muss erstmal ein wenig erforschen, inwieweit das alles den Autopiloten beeinflusst.

In dem kleinen Fenster sollte eigentlich mal das kleine Lenkrad zu sehen sein. Allerdings funktioniert das aus unbekannten Gründen nicht, sodass ich das erstmal auf die ToDo-Liste gepackt habe ^^

Mit GPUs wird das Training auf jeden Fall beschleunigt. Auf der Tensorflow-Website gibt es auch eine kleine Anleitung dazu: https://www.tensorflow.org/install/install_windows#requirements_to_run_tensorflow_with_gpu_support Bei NVIDIA muss man sich allerdings einen kostenlosen Developer-Account anlegen, damit man an die CUDNN-Bibliothek kommt. Nachdem du das alles installiert hast und CUDNN in die Path-Variable bei Windows eingetragen hast, musst du noch tensorflow-gpu für python installieren. Dazu musst du im Autopilot-Ordner die Commandline (oder Powershell) öffnen und folgende Befehle eingeben: python\python.exe -m pip uninstall tensorflow python\python.exe -m pip install tensorflow-gpu

Wenn irgendwelche Probleme auftreten, schreib einfach :)

BrunoTh avatar Aug 27 '17 09:08 BrunoTh

Ok, es tauchen Probleme auf.

Ich habe es leider komplett zerschossen:

E:\Downloads\ETS2\ETS2Autopilot-master>python\python.exe start_gui.py Loading... Traceback (most recent call last): File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper return importlib.import_module(mname) File "importlib_init_.py", line 126, in import_module File "", line 986, in _gcd_import File "", line 969, in _find_and_load File "", line 958, in _find_and_load_unlocked File "", line 666, in _load_unlocked File "", line 577, in module_from_spec File "", line 914, in create_module File "", line 222, in _call_with_frames_removed ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in from tensorflow.python.pywrap_tensorflow_internal import * File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in _pywrap_tensorflow_internal = swig_import_helper() File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper return importlib.import_module('pywrap_tensorflow_internal') File "importlib_init.py", line 126, in import_module ImportError: No module named '_pywrap_tensorflow_internal'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "start_gui.py", line 5, in from UI.main import MainUI File "E:\Downloads\ETS2\ETS2Autopilot-master\UI\main.py", line 9, in from thread_autopilot import AutopilotThread File "E:\Downloads\ETS2\ETS2Autopilot-master\thread_autopilot.py", line 4, in import tensorflow as tf File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow_init_.py", line 24, in from tensorflow.python import * File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python_init_.py", line 49, in from tensorflow.python import pywrap_tensorflow File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 52, in raise ImportError(msg) ImportError: Traceback (most recent call last): File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 18, in swig_import_helper return importlib.import_module(mname) File "importlib_init_.py", line 126, in import_module File "", line 986, in _gcd_import File "", line 969, in _find_and_load File "", line 958, in _find_and_load_unlocked File "", line 666, in _load_unlocked File "", line 577, in module_from_spec File "", line 914, in create_module File "", line 222, in _call_with_frames_removed ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 41, in from tensorflow.python.pywrap_tensorflow_internal import * File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 21, in _pywrap_tensorflow_internal = swig_import_helper() File "E:\Downloads\ETS2\ETS2Autopilot-master\python\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 20, in swig_import_helper return importlib.import_module('pywrap_tensorflow_internal') File "importlib_init.py", line 126, in import_module ImportError: No module named '_pywrap_tensorflow_internal'

Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/install_sources#common_installation_problems

for some common reasons and solutions. Include the entire stack trace above this error message when asking for help.

E:\Downloads\ETS2\ETS2Autopilot-master>

habe Cuda installiert und cuDNN in einem Ordner entpackt. Den Path hab ich so wie im Anhang zu sehen gesetzt. Jetzt weiß ich nicht mehr weiter :( question2 Habe den Path auch noch bei Systemvariablen unter Path hinzugefügt. Dies hilft auch nicht.

Kawo83 avatar Aug 27 '17 10:08 Kawo83

Ah. Ich glaube, ich sehe den Fehler. Im PATH darf glaube nicht die DLL direkt hinzugefügt werden, sondern nur das Verzeichnis, in dem diese liegt. Also bei dir E:\Downloads\ETS2...\cuda\bin

BrunoTh avatar Aug 27 '17 10:08 BrunoTh

Das dachte ich auch schon. Hat leider nicht geholfen :(

Kawo83 avatar Aug 27 '17 10:08 Kawo83

Ach! Ich sehe gerade, dass du das CUDA Toolkit v7.5 installiert hast. Die Anforderung sagt v8.0. Probiere das nochmal.

BrunoTh avatar Aug 27 '17 10:08 BrunoTh

Der Download braucht eine Stunde, ich melde mich danach ob es erfolgreich war :) Danke

Kawo83 avatar Aug 27 '17 11:08 Kawo83

Leider kein Erfolg, gleicher Fehler :(

Kawo83 avatar Aug 27 '17 11:08 Kawo83

Eins kannst du noch probieren: Lade cuDNN v5.1 herunter anstatt cuDNN 6.0 und füge dann dieses zur PATH-Variable hinzu.

BrunoTh avatar Aug 27 '17 12:08 BrunoTh

Auch diese Idee hatte ich schon, ohne Erfolg. Hmmmmm

Kawo83 avatar Aug 27 '17 12:08 Kawo83

Mist. Mehr fällt mir aktuell auch nicht ein. Mal schauen. Vielleicht kommt mir noch eine Idee. In der Zwischenzeit kannst du das erstmal wieder zurückstellen. Also wieder die Kommandozeile öffnen und diese Befehle eingeben: python\python.exe -m pip uninstall tensorflow-gpu python\python.exe -m pip install tensorflow

BrunoTh avatar Aug 27 '17 12:08 BrunoTh

Es läuft nun, frag mich bitte nicht wie ich das nun hinbekommen habe. Es war definitiv ein Problem der cuDNN Version. Danke für die tolle Hilfe.

Da ich gerne experimentiere, macht es Sinn in thread_training.py einen anderen Algorithmus zu versuchen? Ich kann zwar kein Python aber mit etwas lesen kriege ich es ja vielleicht hin. Oder mehr Epochen?

Kawo83 avatar Aug 27 '17 12:08 Kawo83

Es scheint auch zu rechnen, habe im Tensorboard geschaut: question3

Kawo83 avatar Aug 27 '17 12:08 Kawo83

Sehr gut!

Genau. In der thread_training.py kannst du etwas rum experimentieren. Python ist wirklich eine leicht zu erlernende Sprache, die auch richtig viel Spaß macht. Ich verwende eigentlich nur noch diese :D Du kannst die Anzahl der Epochen erhöhen. Hier muss man nur aufpassen, dass es nicht zum Overtraining kommt und das neuronale Netzwerk schlechter auf neue Daten reagiert.

In dem Script wird der Adam Optimizer verwendet. Dort könntest du die Parameter etwas anpassen oder einen anderen Algorithmus verwenden. Hier ist eine Liste: https://www.tensorflow.org/api_guides/python/train#Optimizers

BrunoTh avatar Aug 27 '17 13:08 BrunoTh

Hallo,

ich hätte noch eine Frage. Kann ich auch bei recording kurz Pause machen während Spurwechsel oder bei Bereichen die ich zur Zeit nicht trainieren will? Ich möchte erstmal versuchen den Autopiloten mit reiner Autobahn zu füttern

Kawo83 avatar Aug 29 '17 09:08 Kawo83

Beim Spurwechsel werden die Bilder beim Training nicht beachtet, wenn der Blinker gesetzt wird. In der Statusleiste des AP siehst du neben dem recording-Status auch den Blinker-Zustand. Also ob einer aktiv ist oder nicht. Wichtig hierbei ist, dass du den Blinker manuell wieder deaktivierst, damit das Ende des Manövers vom AP erkannt wird. Außerdem sollte man immer einen Blick auf diesen Zustand werfen, da eine Blinkerabschaltung nicht immer korrekt erkannt wird.

Im ETS2 gibt es in den Einstellungen die Option "automatische Blinkerabschaltung". Diese sollte am besten deaktiviert sein.

Wenn du Bereiche nicht aufzeichnen willst, musst du die Aufnahmesequenz stoppen. Beim erneuten Starten wird eine neue Sequenz angelegt.

Ich will noch eine Funktionalität einbauen, dass bei jedem Sequenzstart, das Land und der Straßentyp der vorherigen übernommen wird.

BrunoTh avatar Aug 29 '17 10:08 BrunoTh

Hey, danke für die Infos.

Ich bin auch fleißig am üben / basteln. Ich habe eine Funktion eingebaut mit der man die Verteilung besser anpassen/glätten kann. Habe dazu was im Internet gefunden und adaptiert.

question4

Bei Total Data ist die erste Zahl die gesamte Anzahl, die zweite Zahl ist die Anzahl der Bilder welche nach dem Glätten der Verteilungskurve noch über ist.

Hier noch zwei Histogramme die ich mit Python erzeugt habe: figure_1-2 figure_1-4

Kawo83 avatar Aug 29 '17 22:08 Kawo83

Schick! Und wie sind die Auswirkungen auf den AP?

BrunoTh avatar Aug 30 '17 07:08 BrunoTh

Sieht bis jetzt sehr gut aus, ich muss mal ein Modell mit und eins ohne meine Änderungen trainieren um es besser vergleichen zu können. Python macht wirklich Spaß, ist sehr einfach zu lernen wenn man etwas C# kann

Kawo83 avatar Sep 02 '17 15:09 Kawo83