LoginSignup
0
1

More than 3 years have passed since last update.

CustomVisionのモデルで推論(Jetson Nano)

Last updated at Posted at 2020-11-06

はじめに

Jetson NanoでCustomVisionのモデルを動かします。
この記事をある程度参考にやっていきます。

環境

  • JetPack4.4

Jetson Nanoのセットアップ

この記事などを参考にセットアップを済ませましょう。GUIのままでも推論はできたのでCUIに切り替えなくても大丈夫です。

CustomVisionモデルのダウンロード

ここを参考にモデルをエクスポートします。

まずCustomVisionで以下のどれかのドメインで学習します。

image.png

学習が終わったらCustomVisionのPerformanceタブ→Exportを押してDockerLinuxでエクスポート、ダウンロードします。
export.png
エクスポートしたモデルのzipファイルをscpなどでNanoに持ってきて展開します。

unzip CustomVision.zip -d customvision

展開したcustomvisionフォルダの中に、DockerFileがあると思います。それを以下のように編集します(python3-opencvいらないかも)。

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

Tensorflow2.3が入っているみたいです。ここを参考に、Tensorflow1.15でも入れられそうです。ビルドに思ったより時間はかかりませんでした。

docker build . -t mycustomvision

ビルドができたらコンテナを起動します。

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

コンテナ一覧を表示すると、起動しているのがわかります。

$ 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

推論

PythonでPOSTして推論してみます。

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)

↓結果

$ 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': ''}

ちゃんと結果が得られました。

おわりに

お疲れさまでした。
もともとのDockerfileではTensorflow2.0.0が指定されていましたが、2.3.0でも大丈夫なのかどうかはわかりません。とりあえず正しそうに推論ができているのでよしとします。

間違い等ありましたらご指摘よろしくお願いします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1