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
Deep Learning – CNN Keras
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?
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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
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
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.
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.
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.
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?
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?
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.
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.
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
die Video anzeige und auch live Cam anzeige ist verlangsamt.
Wenn ich ich das Training mit Bildgröße 128x128 durchführe
Aufruf:
frame = 128x128
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
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]
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]
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
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 ..
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 ..
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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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
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
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.
Was dann passiert, wenn das ganze auf dem PI laufen soll.... wird wohl eher nicht besser.
Ist das alles kostenfrei? Bisher nutze ich Google Drive nichtThomasL 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.
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?
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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Danke für den Tipp. Ich bin schon beim einrichten.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.
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
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.
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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:
Was interessant ist, wenn ich das ganze auf meinem Laptop ausführe, dann liegt der Wert von "not_clean" nur bei 0.59
Ich hätte erwartet das beim Training mit den gleichen Bilder das gleiche Ergebnis raus kommt. Die Test Daten waren identisch!
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
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