Help us understand the problem. What is going on with this article?

Lobeで学習したモデルをPythonで利用する方法

Lobeは、マイクロソフトが公開した機械学習のmodelが簡単に構築できるツールです。
下記の記事ではその使い方を説明しました。
マイクロソフトが公開した機械学習モデルの訓練を容易にできる「Lobe」を試してみた。

本記事では、Lobeで学習したmodelをエクスポートしてPythonから利用するまでの手順を書いていきたいと思います。

学習したmodelをエクスポートする

[File]->[Export]を選択します。
スクリーンショット 2020-10-31 20.30.04.png

今回はTensorFlowを使用するのでそちらを選択し保存先を指定します。
スクリーンショット 2020-10-31 20.35.42.png

Optimize&Optimizingを選択するとmodelを最適化した上で保存することができます。
スクリーンショット 2020-10-31 20.39.02.png

ここまでの手順で学習したmodelをエクスポートすることができます。

学習済みmodelをPythonで利用する

エクスポートしたmodelの保存先にexampleというフォルダがあります。
その中にTensorFlowから利用するためのサンプルコード(tf_example.py)が入っています。

コマンドライン利用する場合:

# python example/tf_example.py '画像パス'

以下、サンプルコードから最低限必要な箇所だけを記載します。

必要なライブラリのimport

predict.py
import json

import numpy as np
import tensorflow as tf
from PIL import Image

Signatureから出入力情報を読み込む

predict.py
with open("modelを保存したパス/signature.json", "r") as f:
    signature = json.load(f)

inputs = signature.get('inputs')
outputs = signature.get('outputs')

modelを読み込む

predict.py
# TensorFlow1系の場合
session = tf.compat.v1.Session(graph=tf.Graph())
tf.compat.v1.saved_model.loader.load(sess=session, tags=signature.get("tags"), export_dir='modelを保存したパス')

# TensorFlow2系の場合
model = tf.saved_model.load('modelを保存したパス')
infer = model.signatures["serving_default"]

予測する画像を用意する

predict.py
# inputのサイズを取得
input_width, input_height = inputs["Image"]["shape"][1:3]

# TensorFlow1系の場合
image = Image.open('画像のパス')
image = image.resize((input_width, input_height))
image = np.asarray(image) / 255.0
feed_dict = {inputs["Image"]["name"]: [image]}
fetches = [(key, output["name"]) for key, output in outputs.items()]

# TensorFlow2系の場合
image = Image.open('画像のパス')
image = image.resize((input_width, input_height))
image = np.asarray(image, dtype=np.float32) / 255.0
image = np.expand_dims(image, axis=0)

予測を実行する

predict.py
# TensorFlow1系の場合
output = session.run(fetches=[name for _, name in fetches], feed_dict=feed_dict)
print(output[0][0].decode())

# TensorFlow2系の場合
predict = infer(tf.constant(image))['Prediction'][0]
print(predict.numpy().decode())

上記のようにLobeで学習したmodelはとても簡単にPythonから利用することができます。

サンプルコードをgitにアップしました。
lobe_py

TensorFlow Servingと組み合わせてREST APIを作ってみました。
Lobeで学習したモデルとTensorFlow Servingを使ってREST APIを作る。

FastAPIと組み合わせてREST APIを作ってみました。

Lobeは10/31現在はBeta版となっています。
作成することができるmodelも画像分類のみですが、今後物体検出やデータ分類なども追加されて行くようです。

tkinjo1
スーパーマリオブラザーズと同い年 ぷろぐらみんぐおべんきょうちう
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away