ABEJA Platformを使って15分で画像分類APIをデプロイする

2018.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

こんにちは、yoshimです。
「ABEJA Platform」を使って画像分類をするAPIをデプロイしてみたので、手順についてご紹介しようと思います。
コンソール画面上で操作するだけで簡単にデプロイできました。

目次

1.ABEJA Platformとは

「ABEJA Platform」とはなんなのか、ということについて公式サイトでは下記のように説明しています。

ABEJA Platformは、 AIの継続的インテグレーションに必要となる、 データの取得・蓄積・学習・デプロイ・推論、再学習の パイプラインを一貫して実装可能な環境を提供します

継続的インテグレーションを前提とした機械学習のプラットフォーム、ということで「ストレージ」、「学習基盤」、「APIとしてのデプロイ」等の機械学習に関わる諸々を1つのプラットフォーム上で実行できるようです。
下記も公式サイトにて利用されている画像ですが、機械学習に関わる人が「アルゴリズム開発」に専念することができるようなプラットフォームのようです。

2.やること

今回は「INPUTとして画像を投入すると、その画像がなんの画像であるか」という推論をしてくれる「画像分類用API」をデプロイします。
具体的には、下記のような画像を投入すると、

こんな結果を取得できるようなAPIをデプロイします。
下記の結果は、「画像に写っているものが何か」、また「その確率がどれくらいか」といったことを示しています。
この結果を見ると、「airliner」である確率が90%ということで、飛行機の画像ということを識別できています。

[
    {
        "label": "airliner",
        "probability": 0.9099587202072144,
        "id": "n02690373"
    },
    {
        "label": "warplane",
        "probability": 0.06528967618942261,
        "id": "n04552348"
    },
    {
        "label": "wing",
        "probability": 0.012471999041736126,
        "id": "n04592741"
    },
    {
        "label": "aircraft_carrier",
        "probability": 0.006938019767403603,
        "id": "n02687172"
    },
    {
        "label": "submarine",
        "probability": 0.002972003072500229,
        "id": "n04347754"
    }
]

3.やってみた

今回は、最初からテンプレートとして用意されている「Resnet50」を利用します。
そのために必要な作業は下記の通りです。

1.モデルを作成
2.作成したモデルをAPIとしてデプロイ
3.実際に推論処理をしてみる

3-1.モデルを作成

まずは利用するモデルを作成します。
今回は「Resnet50」という画像分類に利用されるアルゴリズムを使います。

まずは「Abeja Platform」のコンソール画面の「モデル」から「モデル作成」をクリックします。

続いて、上から「名前(モデル名)」、「詳細(モデルについての詳細説明)」、「モデルのバージョン」、「モデル作成後にデプロイするかどうか」、「デプロイメント名」、「利用するアルゴリズム」を指定した後、「モデル作成」をクリックします。
今回は下記のように指定しました。

少し待つと、下記のように「モデル」が作成できたことが確認できます。

3-2.作成したモデルをAPIとしてデプロイ

続いて、APIとして利用できるようにデプロイ作業に移ります。
先ほどモデル作成時に「作成後にデプロイ」をチェックしていたため、モデル作成が完了すると「デプロイ」画面上に先ほど作成したモデルが表示されています。
(表示されているのは「デプロイメント名」)

まずは、この「デプロイメント名」をクリックし、

「HTTPサービス作成」をクリックします。

「デプロイするモデルのバージョン」、「インスタンスタイプ」、「インスタンス数」を指定して「HTTPサービス作成」をクリックします。

下記の通り、デプロイ処理が開始します。
「ステータス」が「使用可能」になるまで待ちましょう。

3-3.実際に推論処理をしてみる

デプロイが完了したので、デフォルトで用意されている画像で推論できるか確認してみようと思います。
「確認」をクリックし、

デフォルトで用意されている猫の画像を選択し、「送信」をクリックします。

推論結果が返ってきました。
「tabby(ブチ猫、トラ猫)」である確率が68%、「tiger_cat」である確率が11%、「Egyptian_cat」である確率が9.9%、とかなり細かいレベルまで分類してくれます。

折角なので、ローカルに保存している画像を使ってCURLで推論をしてみました。

下記のような画像で推論してみます。

下記のようなコマンドを実行します。

curl  --user user-<ユーザーID>:<パーソナルアクセストークン> \
-H 'Content-Type:image/jpeg' \
-X POST --data-binary @"<画像ファイルまでのパス。フルパス、相対パスのいずれでも可。>" \
<エンドポイントのURL> \
| python -mjson.tool # 出力結果のjsonを整形するために利用。不要なら省略。

下記のような結果が返ってきました。
「airliner(大型旅客機)」である確率が90%、ということでよく推論できていました。

[
    {
        "label": "airliner",
        "probability": 0.9099587202072144,
        "id": "n02690373"
    },
    {
        "label": "warplane",
        "probability": 0.06528967618942261,
        "id": "n04552348"
    },
    {
        "label": "wing",
        "probability": 0.012471999041736126,
        "id": "n04592741"
    },
    {
        "label": "aircraft_carrier",
        "probability": 0.006938019767403603,
        "id": "n02687172"
    },
    {
        "label": "submarine",
        "probability": 0.002972003072500229,
        "id": "n04347754"
    }
]

ちなみに、コマンドで指定する「ユーザーID」、「パーソナルアクセストークン」、「エンドポイントのURL」についてはコンソール画面上から確認できます。

・ユーザーIDとパーソナルアクセストークン
ユーザー情報から確認。

・エンドポイントのURL
「デプロイメント」から確認。

4.まとめ

「Abeja Platform」を使って、画像分類用APIをデプロイする手順についてご紹介しました。
コンソール画面上からぽちぽちするだけで簡単にデプロイできました。

5.引用

Abeja Platformの公式サイト