[DOCKER] Inféré avec un modèle Custom Vision sur Jetson Nano

introduction

Exécutez un modèle Custom Vision sur le Jetson Nano. Cet article Je vais continuer.

environnement

Configuration du Jetson Nano

Complétons la configuration en nous référant à cet article. Vous pouvez en déduire même avec l'interface graphique, vous n'avez donc pas besoin de basculer vers la CUI.

Télécharger le modèle Custom Vision

Exportez le modèle en vous référant à here.

Tout d'abord, apprenez dans l'un des domaines suivants avec Custom Vision.

image.png

Après avoir appris, appuyez sur l'onglet Custom Vision Performance → Exporter pour exporter et télécharger avec ** Docker ** ** Linux **. export.png Apportez le fichier zip du modèle exporté vers Nano avec scp``` etc. et décompressez-le.

unzip CustomVision.zip -d customvision

Vous devriez trouver DockerFile dans le dossier extrait `` customvision ''. Modifiez-le comme suit (python3-opencv peut ne pas être nécessaire).

Dockerfile


FROM nvcr.io/nvidia/l4t-tensorflow:r32.4.4-tf2.3-py3
RUN apt-get update -y
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3-opencv
RUN pip3 install flask pillow
COPY app /app
# Expose the port
EXPOSE 80
# Set the working directory
WORKDIR /app
# Run the flask server for the endpoints
CMD python3 -u app.py

Il semble que Tensorflow 2.3 soit inclus. Reportez-vous à ici, et il semble que Tensorflow 1.15 puisse également être inclus. Il a fallu moins de temps que prévu pour le construire.

docker build . -t mycustomvision

Démarrez le conteneur après la construction.

docker run -p 127.0.0.1:80:80 -d mycustomvision

Si vous affichez la liste des conteneurs, vous pouvez voir qu'elle est en cours d'exécution.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
10548014b918        mycustomvision      "/bin/sh -c 'python3…"   2 hours ago         Up 2 hours          127.0.0.1:80->80/tcp   sleepy_elgamal

inférence

POSTONS et déduisons avec Python.

inference.py


import json
import requests

file = "./test.png "

with open(file,"rb") as f:
    data = f.read()

url = "http://127.0.0.1/image"
files = {"imageData":data}

response = requests.post(url,files=files)
results = json.loads(response.content)
print(results)

↓ Résultat

$ python3 inference.py
{'created': '2020-11-05T14:58:32.073106', 'id': '', 'iteration': '', 'predictions': [{'boundingBox': {'height': 0.16035638, 'left': 0.738249, 'top': 0.41299437, 'width': 0.05781723}, 'probability': 0.91550273, 'tagId': 0, 'tagName': '1'}], 'project': ''}

J'ai eu le résultat correctement.

en conclusion

Je vous remercie pour votre travail acharné. À l'origine, Tensorflow 2.0.0 était spécifié dans le Dockerfile, mais je ne suis pas sûr que 2.3.0 soit correct. Pour le moment, je suis heureux de pouvoir faire une inférence correcte.

Si vous avez des erreurs, veuillez les signaler.

Recommended Posts

Inféré avec un modèle Custom Vision sur Jetson Nano
[Ruby on Rails] Test de modèle avec RSpec
Définir des limites de référent sur l'API Google Vision avec Hocalhost