Ich werde den Ablauf erklären, bis TensorFlow Lite auf dem Mac ausgeführt wird.
Die Umgebung, deren Betrieb bestätigt wurde, ist wie folgt. · MacOS Catalina Version 10.15 ・ Python 3.7.4 ・ Conda 4.7.12 ・ TensorFlow 1.15.0 ・ Keras 2.2.4
Installieren Sie Anaconda unter der folgenden URL https://www.anaconda.com/distribution/ Doppelklicken Sie auf das heruntergeladene Installationspaket, um es zu starten. Stimmen Sie den Nutzungsbedingungen zu, legen Sie das Speicherziel fest und installieren Sie es. Starten Sie Jupyter Notebook von zu Hause aus. Entscheiden Sie, wo Sie arbeiten möchten, und erstellen Sie eine Ipynb-Datei mit NEW → Python3. Wenn Sie die Datei öffnen, werden Sie zum Bildschirm weitergeleitet, auf dem Sie ein solches Programm schreiben können. Ich werde das Programm hier schreiben. Installieren Sie als Nächstes das Paket, um TensorFlow zu betreiben. Erstellen Sie eine neue Umgebung, indem Sie "Umgebung" → "Erstellen" auswählen. Nicht erforderlich bei Verwendung von base (root). Ändern Sie die Suchkriterien in "Nicht installiert" und suchen Sie nach "Tensorfluss". Wählen Sie dann "Keras" und "Tensorflow" des angezeigten Pakets aus und klicken Sie auf "Übernehmen". Starten Sie Jupyter wie zuvor und schreiben und führen Sie das Programm wie folgt aus. Die Ausführung ist "Steuerung + Eingabe" oder "Umschalt + Eingabe". Sie können sehen, dass es keine Fehler gibt. Die Verwendung ist ungefähr so.
Nachtrag Haben Sie auch Nomkl, Matplotlib und Kissen installiert. nomkl scheint zu verhindern, dass der Kernel beim Ausführen von Tensorflow stirbt. matplotlib wird zum Anzeigen von Bildern verwendet. Kissen wird verwendet, um Bilder zu laden.
Um ein TensorFlow Lite-Modell zu generieren, müssen Sie zuerst ein TensorFlow-Modell erstellen. Dieses Mal verwenden wir einen Datensatz namens cifar10. https://www.cs.toronto.edu/~kriz/cifar.html cifar10 ist ein Datensatz mit 60.000 Bildern. Es ist unterteilt in Flugzeuge, Autos, Vögel, Katzen, Hirsche, Hunde, Frösche, Pferde, Schiffe und Lastwagen. Wir werden dies trainieren und ein Modell erstellen, das Bilder klassifizieren kann.
Unten finden Sie den Code zum Trainieren des Bildes. Da die Anzahl der Epochen auf 20 eingestellt ist, dauert es lange.
"""
Importieren Sie die erforderlichen Bibliotheken und verarbeiten Sie die Bilder vor
"""
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPool2D
from keras.layers.core import Dense,Activation,Dropout,Flatten
from keras.datasets import cifar10
from keras.utils import np_utils
#Laden Sie cifar10 herunter
(x_train,y_train),(x_test,y_test)=cifar10.load_data()
#Bild 0-Normalisieren Sie im Bereich von 1
x_train=x_train.astype('float32')/255.0
x_test=x_test.astype('float32')/255.0
#Ein korrektes Antwortetikett-In heißen Ausdruck konvertieren
y_train=np_utils.to_categorical(y_train,10)
y_test=np_utils.to_categorical(y_test,10)
"""
Erstellen Sie ein Modell für TensorFlow
"""
model=Sequential()
model.add(Conv2D(32,(3,3),padding='same',input_shape=(32,32,3)))
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(64,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3),padding='same'))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
history=model.fit(x_train,y_train,batch_size=128,nb_epoch=20,verbose=1,validation_split=0.1)
#Modell und Gewicht sparen
json_string=model.to_json()
open('cifar10_cnn.json',"w").write(json_string)
model.save_weights('cifar10_cnn.h5')
model.save('cifar10_cnn_model.h5')
#Modell anzeigen
model.summary()
#Auswertung
score=model.evaluate(x_test,y_test,verbose=0)
print('Test loss:',score[0])
print('Test accuracy:',score[1])
Wenn du rennst Ich denke, dass die Dateien "cifar10_cnn.h5" und "cifar10_cnn_model.h5" generiert wurden. "Cifar10_cnn.h5" speichert nur die Modellgewichte und "cifar10_cnn_model.h5" speichert die Modellstruktur und Gewichte. Die Genauigkeit betrug 78%. Es scheint, dass die Genauigkeit durch Bezugnahme auf die folgende Site verbessert werden kann.
Genauigkeit 95% mit CIFAR-10-Techniken zur Verbesserung der Genauigkeit mit CNN- Erreichen Sie 90% der CIFAR-10-Validierungsgenauigkeit mit einem 10-lagigen Faltungs-Neuronalen Netzwerk
Die Bildklassifizierung wird anhand des gespeicherten Modells durchgeführt. Bereiten Sie zunächst das Bild vor, um es vorherzusagen.
Erstellen Sie einen Ordner gemäß der im Code geschriebenen Hierarchie, legen Sie das Bild darin ab und führen Sie den folgenden Code aus.
"""
Vorhersage anhand der aufgenommenen Bilder
"""
from keras.models import model_from_json
import matplotlib.pyplot as plt
from keras.preprocessing.image import img_to_array, load_img
from tensorflow.python.keras.models import load_model
#Bild wird geladen
temp_img=load_img("./images/airplane1.jpeg ",target_size=(32,32))
#Bild in Array 0 konvertieren-Normalisiert um 1
temp_img_array=img_to_array(temp_img)
temp_img_array=temp_img_array.astype('float32')/255.0
temp_img_array=temp_img_array.reshape((1,32,32,3))
#Laden Sie trainierte Modelle und Gewichte
json_string=open('cifar10_cnn.json').read()
model=model_from_json(json_string)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
model.load_weights('cifar10_cnn.h5')
# model = load_model('cifar10_cnn_model.h5')
#Modell anzeigen
model.summary()
#Nehmen Sie das Bild vorweg
img_pred=model.predict_classes(temp_img_array)
print('\npredict_classes=',img_pred)
print('model=',model)
plt.imshow(temp_img)
plt.title('pred:{}'.format(img_pred))
plt.show()
"""
0 - airplane
1 - automobile
2 - bird
3 - cat
4 - deer
5 - dog
6 - frog
7 - horse
8 - ship
9 - truck
"""
Wenn alles gut geht, werden das Bild und die Indexnummer ausgegeben. ↑ So. Sie können sehen, dass die Indexnummer und das Bild übereinstimmen. Die Bildklassifizierung ist erfolgreich.
Konvertieren Sie dann das Modell, das Sie gerade für TensorFlow Lite generiert haben.
#Vorhandenes Keras-Modell(cifar10_cnn_model.h5)Aus dem Modell für TensorFlow Lite(cifar10_cnn.tflite)Erstellen
import tensorflow as tf
if __name__ == '__main__':
converter = tf.lite.TFLiteConverter.from_keras_model_file("cifar10_cnn_model.h5")
tflite_model = converter.convert()
open("cifar10_cnn.tflite", "wb").write(tflite_model)
Wenn Sie diesen Code ausführen, wird "cifar10_cnn.tflite" generiert. Dies ist das Modell für TensorFlow Lite.
Verwenden wir dieses Modell, um Bilder zu klassifizieren.
#Identifizieren Sie das Genre anhand des Eingabebilds anhand des Modells für TensorFlow Lite
import tensorflow as tf
import numpy as np
from keras.models import model_from_json
import matplotlib.pyplot as plt
from keras.preprocessing.image import img_to_array, load_img
from tensorflow.python.keras.models import load_model
if __name__ == '__main__':
# prepara input image
#Bild wird geladen
temp_img=load_img("./images/dog1.jpeg ",target_size=(32,32))
#Bild in Array 0 konvertieren-Normalisiert um 1
temp_img_array=img_to_array(temp_img)
img=temp_img_array.astype('float32')/255.0
img=temp_img_array.reshape((1,32,32,3))
# load model
interpreter = tf.lite.Interpreter(model_path="cifar10_cnn.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# set input tensor
interpreter.set_tensor(input_details[0]['index'], img)
# run
interpreter.invoke()
# get outpu tensor
probs = interpreter.get_tensor(output_details[0]['index'])
# print result
result = np.argmax(probs[0])
score = probs[0][result]
print("Voraussichtlicher Bildindex:{} [{:.2f}]".format(result, score))
plt.imshow(temp_img)
plt.title('pred:{}'.format(img_pred))
plt.show()
"""
0 - airplane
1 - automobile
2 - bird
3 - cat
4 - deer
5 - dog
6 - frog
7 - horse
8 - ship
9 - truck
"""
Wenn dies auch funktioniert, werden das Bild und die Indexnummer ausgegeben.
Der folgende Vergleich hängt von den Bilddaten ab. Verwenden Sie ihn daher nur als Referenz. Wir haben die Zeit gemessen, die zur Vorhersage des Bildes benötigt wurde.
Modell für Keras
Verstrichene Zeit: 0.8839559555053711
Verstrichene Zeit: 0.6288352012634277
Verstrichene Zeit: 0.5877768993377686
Verstrichene Zeit: 0.5789699554443359
Verstrichene Zeit: 0.5908827781677246
Verstrichene Zeit: 0.7207329273223877
Verstrichene Zeit: 0.7104830741882324
Verstrichene Zeit: 0.6035618782043457
Verstrichene Zeit: 0.5244758129119873
Verstrichene Zeit: 0.5348677635192871
Durchschnittliche verstrichene Zeit: 0.636454225
Modell für Tensorflow Lite
Verstrichene Zeit: 0.27948904037475586
Verstrichene Zeit: 0.05380606651306152
Verstrichene Zeit: 0.022572994232177734
Verstrichene Zeit: 0.06809115409851074
Verstrichene Zeit: 0.07050800323486328
Verstrichene Zeit: 0.06940007209777832
Verstrichene Zeit: 0.12052798271179199
Verstrichene Zeit: 0.17615199089050293
Verstrichene Zeit: 0.12544798851013184
Verstrichene Zeit: 0.027255773544311523
Durchschnittliche verstrichene Zeit: 0.101325107
Tensorflow Lite ist schneller, nicht wahr? Es gibt jedoch einen Unterschied in der Genauigkeit.
Katze war das einzige unvorhersehbare Bild im Keras-Modell. Andererseits konnten im Modell von Tensorflow Lite Flugzeug, Vogel, Katze und Frosch nicht vorhergesagt werden. Das für Tensorflow Lite konvertierte Modell scheint erheblich ungenauer zu sein.
Wenn es auf einem MNIST-Modell mit einer Genauigkeit von 99,4% ausgeführt wurde, war es für Keras und Tensorflow Lite gleichermaßen vorhersehbar. Bei Verwendung von TensorflowLite scheint es notwendig zu sein, ein Modell mit ziemlich hoher Genauigkeit vorzubereiten.
Offizielles Beispiel für Tensorflow Lite, das für Anfänger nicht geeignet ist Lassen Sie uns CNN mit Keras erstellen und Bilder von CIFAR-10 klassifizieren
Recommended Posts