3.8) デプロイモデルによる予測

デプロイしたモデルは、ユーザー自身の環境やシステムに組み込んで、 画像の物体認識に使うことができます。

3.8.1) モデルのデプロイ

../_images/38_1_deploy_model.png

図1 モデルのデプロイ

  1. モデルテスト画面において、「デプロイ実行」ボタンをクリックしてください(①)。

  2. モデルがデプロイされると、 マークの色が、黄色 に変わり、 ボタンの表示が「デプロイ解除」に変わります(a)。

注意

1個のワークスペースでデプロイできるモデルは1個のみです。
このため、プロジェクトとワークスペースが分かればデプロイされたモデルも特定できます。

GUI上でデプロイしたモデルを、python API経由で利用することができます。 この際、python APIからモデルを取得するために、プロジェクトのIDとワークスペースのIDが必要となります。 これらの値は以下の手順で確認することができます。

../_images/38_2_id_location.png

図2 プロジェクト詳細画面

  1. モデルテスト画面の左上P部分をクリックすると、プロジェクトやワークスペースが階層的に表現された画面が現れます(図2)。

  2. デプロイしたモデルが所属するプロジェクトのIDを確認します(a)。

  3. デプロイしたモデルが所属するワークスペースのIDを確認します(b)。

3.8.2) デプロイモデルの使用例

ワークスペース(下記では、プロジェクトID=1, ワークスペースID=1)上でデプロイされたモデルを使って、画像の予測をする場合以下のようになります。

>>> from renom_img.common.predictor import Predictor
>>> predictor = Predictor(url="http://localhost", port='8080')
>>> predictor.pull(project_id=1, workspace_id=1)
>>> predictor.predict(img_list, batch_size=1)

注意

python API経由でデプロイモデルを使用する時には、ReNomIMGを起動しておく必要があります。

注意

version 3.0.0 b0 は、物体検出にのみ対応しています。画像分類、セグメンテーションは今後実装予定です。 また、APIの仕様が変更されています。主な変更点は以下です。

  • Predictorクラスで、物体検出、画像分類(実装予定)、セグメンテーション(実装予定)のどのモデルも使用できます。

  • pull関数の引数として、プロジェクトのIDとワークスペースのIDが必要です。

3.8.3) APIリファレンス

Python API:renom_img.common

class Predictor ( url=' http://localhost ' , port='8080' )

ベースクラス: object

Predictorクラスは、ReNomIMGが提供するGUIツールにて作成された学習済みニューラルネットワーク重みをダウンロードして使用する機能を提供します。

パラメータ

url ( string ) -- ReNomIMGアプリケーションサーバのurl
port ( string ) -- ReNomIMGアプリケーションサーバのポート番号
pull (project_id = 1, workspace_id = 1 )

ReNomIMGサーバー上でデプロイされたモデルをダウンロードします。

パラメータ:

project_id -- デプロイされたモデルの所属するプロジェクトID
workspace_id -- デプロイされたモデルの所属するワークスペースID
model_info()

ReNomIMGサーバーからダウンロードされたモデルの情報を表示します。

戻り値:

{'project id': '1',        # プロジェクトのID
'workspace id': '1',       # ワークスペースのID
'label id map': '[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 16, 17, 18, 19, 20, 21]', # ラベルのID
'label name map': "['sofa', 'person', 'chair', 'boat', 'car', 'aeroplane', 'bicycle',
'train', 'horse', 'dog','diningtable', 'bottle', 'cat', 'cow',
'motorbike', 'tvmonitor', 'bus', 'bird', 'pottedplant']", #ラベルの名前
'weight file name': 'Yolov2_7_best.h5',  # モデルの名前
'training parameters': "{'algorithm_id': 30, 'algorithm_version': 2,
'label_id_map': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 16, 17, 18, 19, 20, 21]}", # モデルの設定
'algorithm': 'Yolov2',     # アルゴリズムの名前
'image size': '[[448 448]]',   # 画像のサイズ
'num class': '19'}      # ラベルの個数
predict( img_list, batch_size)

与えられた画像ファイルに対する推論を実行します。

パラメータ:

  • img_list ( string , list , ndarray ) -- 画像のパス、パスのリストもしくはndarrayオブジェクトを引数に与えることができます。

  • batch_size ( integer ) -- 推論計算時に用いるバッチサイズを設定することができます。バッチサイズを大きくすると、計算処理時間は短くなりますが、メモリ消費量は大きくなります。

戻り値:

各画像に対する推論結果を返します。

以下は、img_listの入力画像が3枚の場合に predictor.predict(img_list, batch_size=1) を実行した場合の例です。 1枚目は予測結果のバウンディングボックスが1つ、2枚目は2つ、3枚目は0の場合以下のようになります。

[                 # 1枚目の画像に対する予測
[{'score': 0.36025530099868774, # 予測の精度
'label_id': 1,          # ラベルのID
'name': 'dog',          # 予測結果のカテゴリー名
'box': [0.05626440420746803,  # バウンディングボックスの左上のX座標[0-1]
0.26031598448753357,   # バウンディングボックスの左上のY座標[0-1]
0.17452025413513184,   # バウンディングボックスの右下のX座標[0-1]
0.36408504843711853]}],  # バウンディングボックスの右下のY座標[0-1]
[{'score': 0.8491572141647339, # 2枚目の画像に対する予測
'label_id': 2,
'name': 'cat',
'box': [0.8867120742797852,
0.5820230841636658,
0.9186948537826538,
0.632531464099884]},
{'score': 0.7578645348548889,  # 2枚目の2つ目のボックスに対する予測
'label_id': 3,
'name': 'bird',
'box': [0.12656331062316895,
0.26588642597198486,
0.714851975440979,
0.7764121294021606]}],
[]               # 3枚目の画像に対する予測
]

'box'のlistの中身は、ボックスの左上、右下座標を、画像サイズで規格化(X座標は画像の幅を1としたときの割合、 Y座標は画像の高さを1としたときの割合)した値を示します。