Seite 1 von 1

Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Donnerstag 27. Juni 2019, 04:00
von offifee
Guten Tag,

hat hier schonmal jemand ein neuronales Netz (Objekterkennung auf Bildern) außerhalb des Raspberrys in Python trainiert und anschließend auf einem Raspberry Pi verwendet?

Es ist leider schwierig, da konsistente Informationen zu zu finden. Ich habe gelesen, man müsse das Netzwerk als Frozen intergraph .pb file speichern.
Allerdings finde ich nirgends weitere Infos, WIE man das denn macht.

Ich habe bereits ein Netz über Keras trainiert und konnte seperat die Netzwerkarchitektur und die Gewichtungen (weights) speichern, falls jemand weiß wie ich das pb. file daraus konvertieren kann.

Weiß da jemand was? Oder kennt jemand eine andere Möglichkeit?


Vielen Dank für jegliche Hilfe.

Liebe Grüße
offifee

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Donnerstag 27. Juni 2019, 17:50
von ThomasL
Wie willst du denn dann auf dem Pi das trainierte NN verwenden, mit welchem Python Package?

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Freitag 28. Juni 2019, 03:18
von offifee
ThomasL hat geschrieben: Donnerstag 27. Juni 2019, 17:50 Wie willst du denn dann auf dem Pi das trainierte NN verwenden, mit welchem Python Package?

Das ist mir an sich egal. Was bereits mit einem vortrainierten NN geklappt hat (das habe ich direkt als Frozen intergraph .pb file runtergeladen): Dieses NN in Python 3.6 auf dem Raspberry ueber tensorflow zu verwenden. Wenn ich es richtig verstanden habe, gehoeren diese .pb files so wie so zu tensorflow.

Also waere es super zu wissen, wie ich ein in Keras trainiertes Netz entsprechend konvertiere oder zu wissen, wie ich ein NN in tensorflow trainiere und als .pb speichere/exportiere.

Wenn jemand eine andere Gesamtloesung hat, wuerde ich das aber auch probieren.

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Freitag 28. Juni 2019, 05:18
von ThomasL
Also ich würde das so machen:

Code: Alles auswählen

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# dummy NN
model = Sequential()
model.add(Dense(64, activation = ‘relu’, input_dim = 10))
model.add(Dense(1, activation = ‘sigmoid’))
model.compile(optimizer = ‘adam’, loss = ‘binary_crossentropy’, metrics = [‘accuracy’])

# training
model.fit(X_train, y_train, epochs = 5)

# predicting 
y_pred = model.predict(X_test)
y_pred = (y_pred > 0.5)

# saving the model
model.save(“model.h5”)
Auf einem anderen Rechner kann man dann das gespeicherte Model laden und benutzen

Code: Alles auswählen

from tensorflow.keras.models import load_model

model = load_model(“model.h5”)

new_prediction = model.predict(new_X_test)
new_prediction = (new_prediction > 0.5)

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Dienstag 2. Juli 2019, 04:09
von offifee
ThomasL hat geschrieben: Freitag 28. Juni 2019, 05:18 Also ich würde das so machen:

Code: Alles auswählen

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# dummy NN
model = Sequential()
model.add(Dense(64, activation = ‘relu’, input_dim = 10))
model.add(Dense(1, activation = ‘sigmoid’))
model.compile(optimizer = ‘adam’, loss = ‘binary_crossentropy’, metrics = [‘accuracy’])

# training
model.fit(X_train, y_train, epochs = 5)

# predicting 
y_pred = model.predict(X_test)
y_pred = (y_pred > 0.5)

# saving the model
model.save(“model.h5”)
Auf einem anderen Rechner kann man dann das gespeicherte Model laden und benutzen

Code: Alles auswählen

from tensorflow.keras.models import load_model

model = load_model(“model.h5”)

new_prediction = model.predict(new_X_test)
new_prediction = (new_prediction > 0.5)
Vielen Dank fuer Ihre Antwort!
Das Problem ist, dass ich dann am Ende wieder ein Keras Modell habe. Ein solches habe ich auch schon erfolgreich trainiert, nur bekomme ich es nicht auf dem Raspberry zum Laufen. Auf dem Raspberry habe ich es bisher nur geschafft, ein .pb (wenn ich es richtig verstehe ein in Tensorflow ohne Keras) trainiertes Netz zu verwenden. Aber eben nur eins, das ich so fertig im passsenden Format runtergeladen habe.

Wissen Sie, wie man ein .h5 Model auf dem Raspberry verwenden oder es in ein .pb konvertieren kann? Ich finde leider keine wirklich hilfreichen Informationen dazu.

Oder funktioniert das schon mit dem zweiten Teil des Codes? Sind in dem .h5 nicht nur die Gewichtungen (Weights) hinterlegt? Ich habe zum Speichern eines Netzwerks in Keras immer nur gelesen, dass man Architektur und Gewichtungen einzelnd speichert, auch wenn das fuer mich wenig Sinn ergeben hat.

Liebe Gruesse

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Dienstag 2. Juli 2019, 06:03
von ThomasL
Dann zeig doch mal den Code mit dem du eine .pb Datei erzeugt hast und den Code, mit dem du die .pb Datei auf dem Pi verwendest.
Was spricht dagegen, Tensorflow auf dem Pi zu verwenden? (Darüber habe ich keine Info/Erfahrung)
Von .pb Dateien habe ich auch das erste Mal von dir gehört.

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Dienstag 2. Juli 2019, 06:10
von ThomasL
Habe mal etwas Zeit in Google investiert und das hier gefunden:
https://stackoverflow.com/questions/454 ... sorflow-pb

Re: Trainiertes neuronales Netz auf dem Raspberry verwenden

Verfasst: Dienstag 2. Juli 2019, 09:28
von offifee
Mit ein paar kleinen Erweiterungen hat Ihr Code zum verwenden des Netzwerks als .h5 tatsaechlich funktioniert! Vielen Dank, da werde ich jetzt drauf aufbauen.

Sie haben mir damit sehr geholfen.

Ich habe jetzt folgendes genutzt:


from tensorflow.keras.models import load_model

model = load_model(“model.h5”)

%hier ein paar Befehle zum Bild einlesen, als img speichern und in die richtige Form bringen

classes=model.predict_classes(img)
print(classes)

Funktioniert super, jetzt muss nur noch verschoenert werden. Also, nochmals vielen Dank!