Im folgenden Artikel habe ich erklärt, wie man mit Lobe lernt und wie man das gelernte Modell exportiert und aus Python verwendet.
Ich habe "Lobe" ausprobiert, wodurch es einfach ist, von Microsoft veröffentlichte Modelle für maschinelles Lernen zu trainieren. Verwendung des in Lobe in Python erlernten Modells
Dieses Mal möchte ich eine REST-API in Kombination mit TensorFlow Serving erstellen.
In dem oben genannten Artikel erfahren Sie, wie Sie mit Lobe lernen und Modelle exportieren.
Nachdem Sie verschiedene Dinge ausprobiert haben, muss der Name des Verzeichnisses, das das Modell enthält, eine Zahl sein, damit TensorFlow Serving funktioniert. (Ich habe diesen Bereich noch nicht erfasst, daher würde ich ihn begrüßen, wenn jemand ihn kennt.)
Erstellen Sie daher ein Verzeichnis mit einer Nummer im Modellverzeichnis, das aus Lobe exportiert wurde, und kopieren oder verschieben Sie die erforderlichen Dateien.
Der einfachste Weg, TensorFlow Serving zu verwenden, ist die Verwendung von Docker. Das offizielle Bild wird auf den Docker-Hub hochgeladen. Verwenden Sie dieses. tensorflow/serving
Das diesmal verwendete Modellverzeichnis lautet wie folgt. TensorFlow Serving verwendet das Modell im Verzeichnis 1.
── sample_model
├── 1 #Erstellen Sie ein neues Beispiel_Kopieren oder verschieben Sie die erforderlichen Dateien unter das Modell
│ ├── saved_model.pb
│ └── variables
│ ├── variables.data-00000-of-00001
│ └── variables.index
├── example
│ ├── README.md
│ ├── requirements.txt
│ └── tf_example.py
├── saved_model.pb
├── signature.json
└── variables
├── variables.data-00000-of-00001
└── variables.index
Starten Sie Docker wie folgt.
# docker run -t --rm -p 8501:8501 -v "`pwd`/sample_model:/models/sample_model" -e MODEL_NAME=sample_model tensorflow/serving
Wenn das Modell geladen ist und der Vorgang normal startet, wird die folgende Meldung angezeigt.
2020-11-03 01:04:51.142942: I tensorflow_serving/model_servers/server.cc:387] Exporting HTTP/REST API at:localhost:8501 ...
[evhttp_server.cc : 238] NET_LOG: Entering the event loop ...
Wenn diese Nachricht ausgegeben wird, wurde TensorFlow Serving gestartet.
Mit den Schritten bis zu diesem Punkt können Sie die Bildklassifizierung mit REST versuchen. Senden wir eine GET-Anfrage, um den Betrieb von TensorFlow Serving zu überprüfen.
import requests
import json
url = 'http://localhost:8501/v1/models/sample_model'
res = requests.get(url)
print(json.loads(res.text))
Wenn die folgende Antwort zurückgegeben wird, funktioniert sie problemlos.
{'model_version_status': [{'version': '1', 'state': 'AVAILABLE', 'status': {'error_code': 'OK', 'error_message': ''}}]}
Vorhersageanforderungen werden per POST gestellt.
import json
import cv2
import numpy as np
import requests
#URL der Vorhersageanforderung
url = 'http://localhost:8501/v1/models/sample_model:predict'
def predict(image_path):
image = cv2.imread(image_path, cv2.IMREAD_COLOR)
image = image.astype(np.float32) / 255
image = image.tolist()
headers = {"content-type": "application/json"}
body = {"inputs": [image]}
r = requests.post(url, data=json.dumps(body), headers=headers)
r_json = json.loads(r.text)
return r_json['outputs']['Prediction'][0]
Sie können das Vorhersageergebnis erhalten, indem Sie die Bilddatei als Argument für die Vorhersage angeben.
predict_label = predict('Bilddatei')
print(predict_label)
Bis zu diesem Punkt können Sie eine Umgebung erstellen, die mindestens funktioniert.
Recommended Posts