Deep Learning – CNN Keras

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Hallo zusammen,

ich habe eine Frage zum CNN TensorFlow–Keras Modell.
Ich habe ein h5 Modell trainiert, bin aber auch noch dabei neue Bilder für das Modell zu sammeln um es stetig zu verbessern.

Wenn das Modell gut funktioniert und ich neue Bilder hinzufüge möchte, muss ich dann ein neues Modell erstellen oder kann ich auf der erzeugten h5 Datei aufsetzen?

Viele Grüße
Anja
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich vermute mal du machst eine supervised Klassifikation?
Mit wie vielen Bildern pro Klasse hast du denn dein Modell trainiert und wie viele neue Bilder pro Klasse hast du jetzt?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Hallo Thomas,

leider habe ich im Moment noch nicht so viele Bilder, erst ca. 200 pro Klasse. (3 Klassen - clean, not_clean und nichts)
Mein Projekt besteht darin zu erkennen, ob meine Katze mit oder ohne Beute im Maul vor der Katzenklappe steht. Da sie im Moment "Gott sei Dank" nicht so viel
mitbringt, bekomme ich nicht so viele Bilder für das "not_clean" Label.
Die Bilder die ich gesammelt habe, variieren immer nur leicht, da die Katze meist mit den gleichen Bewegungen durch den Tunnel kommt.

Ich habe die Eingangsbilder auf 200 X 200 umgestellt anstatt mit 64x64 ins Rennen zu gehen.
Zum erstellen des Models nutze ich dein Beispiel aus dem Beitrag im Forum :viewtopic.php?f=1&t=46904&p=356074&hilit=cnn#p356074

Ob das cnn Model der richtige Ansatz ist, weiß ich allerdings nicht?
Ein Vortrainiertes Modell kann ich für mein Vorhaben sicher nicht verwenden?


Viele Grüße
Anja
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Transfer-Learning greift ja auch auf vortrainierte Netze zurück, reduziert aber die Notwendigkeit des Weiteren Trainings.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

okay, ....
ich dachte das kann man nur nutzen, wenn man ähnliche Daten trainieren will?
Ich habe ja ein spezielles Vorhaben und will nicht nur eine Katze erkennen, deshalb dachte ich das ich vortrainierte Modelle nicht nutzen kann.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jein. Mit nur wenigen Hunderten Trainingsbildern wirst du von 0 an nicht weit kommen. Aber die ersten Schichten eines allgemein trainierten netztes vorverarbeiten dir das schon so, dass du eine Chance hast. Ob 🐕 🐈 🐁 ist dabei dann relativ egal.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Wie geht man da am besten vor?
Bisher habe ich nur mit meinen erstellen Bildern trainiert.

Was ich ich noch nicht ganz verstehe ist folgendes:
Ich habe ein h5 Modell erstellt Bildgrösse 200x200, wenn ich das Modell an Bildern teste, erhalte ich eine hohe Trefferquote.
Wenn ich das Modell an Video Dateien teste (aus den Video Dateien habe ich auch die Bilder fürs Training erstellt) ist die Trefferquote ebenfalls sehr gut.

Wenn ich das Modell mit der live Cam teste, funktioniert die Erkennung nicht gut bis gar nicht.
Wie gesagt, letztendlich stammen die Video Dateien und demzufolge auf die Fotos alle von der Live Cam. Die Bedingungen sind im Prinzip gleich. Deshalb verstehe ich die niedrige Trefferquote bei der Live Cam nicht. Muss man hier speziell etwas beim Training beachten?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde mal Tutorials zum Thema Transferlearning suchen und nachvollziehen.

Und was das Problem mit den Videos angeht: einen technischen Grund gibts nicht. Aber es kann natürlich zb over fitting sein, oder Beleuchtungsprobleme etc.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

ich habe noch ein grundsätzliche Frage zum prüfen von Video's oder auch Live Cam

Wenn ich die Prüfung des Frame aufrufe:
Training mit Bildergröße 224x224

Aufruf:
frame = 224x224

Code: Alles auswählen

preds = model.predict(np.expand_dims(frame, axis=0))[0]
 
die Video anzeige und auch live Cam anzeige ist verlangsamt.

Wenn ich ich das Training mit Bildgröße 128x128 durchführe
Aufruf:
frame = 128x128

Code: Alles auswählen

preds = model.predict(np.expand_dims(frame, axis=0))[0]
dann läuft das Video und auch das Live Bild flüssig.
Hat jemand ein Idee woran das liegen könnte? Problem ist ja, wenn ich das Training mit kleinen Bilder durchführe verliert es ggf. die Genauigkeit.
Außerdem versuche ich grade Transfer Learning und VGG16 benötigt 224x224
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Naja. Es ist halt zu langsam mit dem groesseren Bild. Welche Plattform benutzt du denn? Ist das ein Raspberry PI? Der ist halt langsam.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Im Moment nutze ich noch meinen Windows Laptop, bis alles läuft. Später ggf. Raspberry PI
Meinst du es liegt an meinem Laptop? (ist schon was älter, hat 8 RAM und i5 Prozessor)
Ich hatte die Hoffnung das ich den Aufruf anders machen muss ..
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Naja, 224x224 sind 3mal soviele Daten die durch das NN müssen und das dauert, je nachdem wie viele Layers und Nodes per Layer, welche Activation Function benutzt wird etc etc.
Da kommt es dann schon auf die Hardware an. Da wäre das trainieren auf einem Desktop/Laptop mit GPU empfehlenswert.
Die Prediction geht ja schneller, auch auf schwächerer Hardware.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Hast du schon mal was von Google Colab gehört?
https://colab.research.google.com/noteb ... come.ipynb

Da kannst du in Jupyter Notebooks auf Google Hardware mit GPU und sogar TPU Unterstützung Modelle trainieren.
Du musst aber vorher alle Daten in ein Google Drive hochladen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Danke für den Tipp, ich werde es mal ausprobieren :-) Das trainieren dauert auf meinem Laptop immer sehr lange....

Bei meinem Problem geht es allerdings nicht um das Training. Ich lade die H5 Datei aus dem Training und prüfe dann jeden Frame mit model.predict
Dadurch das die Funktion model.predict ein bisschen länger braucht, wird das Video verlangsamt angezeigt. Wie gesagt, das passiert nur, wenn die Frames 224x224 groß sind.

Wird dann wahrscheinlich doch an meinem Laptop liegen :-(
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Denke ich auch. Da wird es auch keinen magischen mach-schneller-Knopf geben. Laut stackoverflow ist tensorflow auch parallelisiert. Dazu kannst du mal deinen Taskmanager beobachten, wie die CPU-Last aussieht. Wenn da noch was geht, kann man ggf. mit multiprocessing nacheinander eintreffende Bilder parallel klassifizieren. Man bekommt also Latenz, aber ggf. genug Durchsatz.

Was dann passiert, wenn das ganze auf dem PI laufen soll.... wird wohl eher nicht besser.
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

ThomasL hat geschrieben: Freitag 3. Januar 2020, 14:07 Hast du schon mal was von Google Colab gehört?
https://colab.research.google.com/noteb ... come.ipynb

Da kannst du in Jupyter Notebooks auf Google Hardware mit GPU und sogar TPU Unterstützung Modelle trainieren.
Du musst aber vorher alle Daten in ein Google Drive hochladen.
Ist das alles kostenfrei? Bisher nutze ich Google Drive nicht
Wird das erstellte Modell nach dem Training auf dem Google Drive gespeichert?
Kann ich den Code, aus die Pfad Anpassungen 1:1 nutzen?
Kann ich ein Modell was mit gpu trainiert wurde auf einer CPU Maschine nutzen?
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Colab ist kostenfrei, Google Drive ist bis zu 15GB auch kostenfrei
Du must zwischen Colab und deinem Google Drive eine Verbindung (im Code) herstellen, dann kannst du auf den Speicherplatz lesend und schreibend zugreifen.
Eventuell benötigte Module in deinem Code können in der Colab VM installiert werden.
Ja, das ist dem Modell egal, wo und wie es trainiert wurde.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

ThomasL hat geschrieben: Freitag 3. Januar 2020, 17:40 Colab ist kostenfrei, Google Drive ist bis zu 15GB auch kostenfrei
Du must zwischen Colab und deinem Google Drive eine Verbindung (im Code) herstellen, dann kannst du auf den Speicherplatz lesend und schreibend zugreifen.
Eventuell benötigte Module in deinem Code können in der Colab VM installiert werden.
Ja, das ist dem Modell egal, wo und wie es trainiert wurde.
Danke für den Tipp. Ich bin schon beim einrichten.
eine Frage habe ich noch:
Ich habe den Google drive festgelegt und kann auf die Dateien zugreifen.
In meinem Code habe ich eine Config Import. Hier sind alle Pfade enthalten etc. weißt du vielleicht, wie ich die Datei in meinen Code importierten kann?
Mit dem üblichen Import klappt es nicht

Code: Alles auswählen

from src import config
muss ich die Datei an eine bestimmte stelle im Drive legen?
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Es "sollte" klappen wenn die src.py im selben Pfad wie das Notebook liegt.
Wenn nicht ist es eventuell schneller einfach den Code aus src in dein Notebook zu kopieren.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Anjapy
User
Beiträge: 12
Registriert: Donnerstag 26. Dezember 2019, 11:15

Okay, vielen Dank! der Tipp mit dem Colab war Goldwert :-)
Mein Laptop hat für die Ausführung Stunden gebraucht und mit dem Colab geht es in wenigen Minuten ;-)

Ich habe jetzt auf Grundlage des VGG16 Netzwerk mein Model neu trainiert. Das Ergebnis sieht wie folgt aus:

Code: Alles auswählen

              precision    recall  f1-score   support

       clean       1.00      0.95      0.98        65
   not_clean       0.93      1.00      0.96        38

    accuracy                           0.97       103
   macro avg       0.96      0.98      0.97       103
weighted avg       0.97      0.97      0.97       103
Was interessant ist, wenn ich das ganze auf meinem Laptop ausführe, dann liegt der Wert von "not_clean" nur bei 0.59

Code: Alles auswählen

              precision    recall  f1-score   support

       clean       0.75      1.00      0.86        65
   not_clean       1.00      0.42      0.59        38

    accuracy                           0.79       103
   macro avg       0.87      0.71      0.72       103
weighted avg       0.84      0.79      0.76       103
Ich hätte erwartet das beim Training mit den gleichen Bilder das gleiche Ergebnis raus kommt. Die Test Daten waren identisch!
Antworten