Dans l'article ci-dessous, j'ai expliqué comment apprendre avec Lobe et comment exporter le modèle appris et l'utiliser à partir de Python.
J'ai essayé "Lobe", qui facilite la formation des modèles d'apprentissage automatique publiés par Microsoft. Comment utiliser le modèle appris dans Lobe en Python
Cette fois, je souhaite créer une API REST en combinaison avec le service TensorFlow.
Voir l'article mentionné ci-dessus pour apprendre avec Lobe et exporter des modèles.
Après avoir essayé diverses choses, il semble que le nom du répertoire contenant le modèle doit être un nombre pour que TensorFlow Serving fonctionne. (Je n'ai pas encore saisi ce domaine, alors j'apprécierais que quelqu'un le sache.)
Par conséquent, créez un répertoire nommé avec un numéro dans le répertoire du modèle exporté depuis Lobe et copiez ou déplacez les fichiers nécessaires.
Le moyen le plus simple d'utiliser le service TensorFlow est d'utiliser Docker. L'image officielle est téléchargée sur le hub docker, alors utilisez-la. tensorflow/serving
Le répertoire de modèle utilisé cette fois est le suivant. TensorFlow Serving utilise le modèle dans le répertoire 1.
── sample_model
├── 1 #Créer un nouvel échantillon_Copiez ou déplacez les fichiers nécessaires sous le modèle
│ ├── 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
Démarrez le docker comme suit.
# docker run -t --rm -p 8501:8501 -v "`pwd`/sample_model:/models/sample_model" -e MODEL_NAME=sample_model tensorflow/serving
Lorsque le modèle est chargé et que l'opération démarre normalement, le message suivant s'affiche.
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 ...
Si ce message s'affiche, le traitement TensorFlow a démarré.
Avec les étapes jusqu'à ce point, vous êtes prêt à essayer la classification d'images avec REST. Envoyons une requête GET pour vérifier le fonctionnement de TensorFlow Serving.
import requests
import json
url = 'http://localhost:8501/v1/models/sample_model'
res = requests.get(url)
print(json.loads(res.text))
Si la réponse suivante est renvoyée, cela fonctionne sans aucun problème.
{'model_version_status': [{'version': '1', 'state': 'AVAILABLE', 'status': {'error_code': 'OK', 'error_message': ''}}]}
Les demandes de prédiction sont effectuées par POST.
import json
import cv2
import numpy as np
import requests
#URL de la demande de prédiction
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]
Vous pouvez obtenir le résultat de la prédiction en donnant le fichier image comme argument à prédire.
predict_label = predict('Fichier d'image')
print(predict_label)
Jusqu'à ce point, vous pouvez créer un environnement qui fonctionne au minimum.
Recommended Posts