[PYTHON] Implementieren Sie TensorFlow Lite auf einem Mac [Ausgabe 2019]

Ich werde den Ablauf erklären, bis TensorFlow Lite auf dem Mac ausgeführt wird.

Umgebung

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

Umgebung

Installieren Sie Anaconda unter der folgenden URL https://www.anaconda.com/distribution/ Screenshot 2019-11-29 10.42.24.png 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. スクリーンショット 2019-11-29 10.49.31.png Entscheiden Sie, wo Sie arbeiten möchten, und erstellen Sie eine Ipynb-Datei mit NEW → Python3. スクリーンショット 2019-11-29 10.52.39.png 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. スクリーンショット 2019-11-29 11.00.34.png Installieren Sie als Nächstes das Paket, um TensorFlow zu betreiben. スクリーンショット 2019-11-29 11.08.12.png 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". スクリーンショット 2019-11-29 11.25.28.png 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.

Modell bauen

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

Bilder tatsächlich klassifizieren

Die Bildklassifizierung wird anhand des gespeicherten Modells durchgeführt. Bereiten Sie zunächst das Bild vor, um es vorherzusagen. スクリーンショット 2019-11-29 13.01.30.png

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. スクリーンショット 2019-11-29 13.04.43.png ↑ So. Sie können sehen, dass die Indexnummer und das Bild übereinstimmen. Die Bildklassifizierung ist erfolgreich.

In Modell für TensorFlow Lite konvertieren

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. スクリーンショット 2019-11-29 13.20.47.png

Vergleich von Tensorflow und Tensorflow Lite

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.

Referenz

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

Implementieren Sie TensorFlow Lite auf einem Mac [Ausgabe 2019]
Installieren Sie Tensorflow auf dem Mac
Warnung bei Verwendung von TensorFlow auf einem Mac
Python auf Mac
Installieren Sie TensorFlow unter Ubuntu
Installieren Sie pyenv auf dem Mac
Installieren Sie Python3 auf einem Mac und erstellen Sie eine Umgebung [Definitive Edition]
Pyenv + virtualenv auf dem Mac
Installieren Sie Ansible auf einem Mac
Installieren Sie Python auf dem Mac
Installieren von Python 3 in einer Mac-Umgebung
numba Installation auf dem Mac
Ausführung von MINST in TensorFlow 2.0 und Visualisierung in TensorBoard (Version 2019)
Führen Sie OpenMVG auf einem Mac aus
Erstellen Sie TensorFlow unter Windows
Installieren Sie Python 3.4 auf einem Mac
Installieren Sie Caffe auf dem Mac
Installieren Sie Mecab auf dem Mac
Mindestnotizen bei Verwendung von Python auf Mac (pyenv edition)
Installieren Sie Mecab-Python auf dem Mac
Versuchen Sie Deepdream auf dem Mac
Mindestnotizen bei Verwendung von Python auf Mac (Homebrew Edition)
Hinweise zur Installation von dlib auf einem Mac
Pyramid + Mongodb-Umgebung auf Mac
Installieren Sie pygame auf python3.4 auf dem Mac
Installieren Sie das Modul auf Anaconda (Mac)
Installieren Sie OpenPose auf einem Mac (Catalina)
Python-Installation (Mac Edition) (alt)
Installieren Sie numba auf dem Mac
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Umgang mit Python auf Mac
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Installieren Sie pandas 0.14 auf python3.4 [auf Mac]
Starten Sie einen lokalen Server auf dem Mac
Hinweise zur Installation von Python auf Ihrem Mac
Installieren Sie Django auf dem Mac
Einführung von TensorFlow in Ubuntu + Python 2.7
Pyenv unter Mac OSX Mavericks
Installieren Sie das Kissen unter Mac OSX 10.9
[Mac] Tipps: Installieren Sie pyquery auf einem Mac [pyquery]
Verwenden Sie matplot libwidget auf dem Mac
Hinweise zur Vorbereitung der Python-Entwicklungsumgebung unter Mac OS X.
Hinweise zur Installation von pipenv auf Ihrem Mac
[Tensorflow] Aufbau der Tensorflow-Umgebung unter Windows 10
Catalina auf Mac und Pyenv
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
TensorFlow TypeError auflösen: __init __ () hat auf dem Mac ein unerwartetes Schlüsselwortargument'syntax 'erhalten