Custom Vision がさらに簡単&ローカル作成可能に!Lobe でカスタム画像分析モデルを作成してみよう


Cognitive Services Custom Vision は充分簡単にカスタム画像認識 (クラス分類(Classification) & オブジェクト検出(Object Detection)) モデルが作成できてしまうサービスなのですが、これをさらにカンタンにした&アプリとしてローカル環境で作成~エクスポートできるのが、Microsoft Lobe です。

Lobe とは

Lobe の利用シナリオとして、以下のようなサンプルが提示されています

  • Plant Species (庭の植物を見分ける)
  • Hand Gestures (数のカウント、じゃんけんもできそう?)
  • Personal Trainer (筋トレポーズ、ヨガももちろんできそう)
  • Emotional Reactions (顔の表情)
  • Interactive Painting (色の検出)
  • :

実は Lobe のスゴイところは、直接カメラ映像(動画)を取得して自動で画像を切り出し、ラベル付けができるところです。


実際に Lobe をダウンロードするところから、学習データ(画像) を覚えさせて TensorFlow にエクスポートして利用してみるまで (もちろん無料!) の手順を紹介します。今回はヨガのポーズを分類するモデルを作成してみます。

準備

特にマイクロソフトアカウントとかAzure サブスクリプションは必要ありません。初期登録 (名前、メールアドレス) のみで利用できます。(※ 2020年12月現在)

Lobe の登録 & アプリのダウンロード

まず Lobe のトップページ (https://lobe.ai/) を参照して、[Download] をクリックします。

Join Beta から登録を行います。Japan を選択すると日本語ローカライズの可能性が高まるかも?!
登録情報を入力したら [Download] をクリックして Lobe をダウンロードします。

ダウンロードした Lobe.exe (← Windows の場合?) をクリックして、ローカル環境にインストールします。

Lobe で画像分析モデルを作成

新規プロジェクト作成

Lobe を起動します。New Project をクリックして、新規プロジェクトを作成します。

学習データのロード~自動でモデル作成

画面右上の [Import] をクリックして、学習データとなる画像を選択します。
画像認識モデルを作成するには 1 タグあたり 5 枚以上の画像が必要というところが既に Custom Vision っぽい :)

[Dataset] を選択すると、分類したフォルダーごと読み込みできるのはとても便利!

Yoga というフォルダーを作成し、その中にポーズ名(Cobra, downdog...)をつけたフォルダーに画像を格納しておきます。Yoga フォルダーを指定します。

画像を分類するタグ名はフォルダー名そのまま or カスタムもできます。今回はそのままで。

プロジェクト名も親フォルダーの名前(Yoga)に設定されました。
画像が読み込まれ、自動で学習 (Training) が実行されます。

分析モデルの確認

[Train] をクリックすると、作成した分析モデルの精度が確認できます。

分析モデルのテスト

Play をクリックして、学習データとして使っていない画像で分析モデルのテストを行います。

テストしたい画像を Drag & Drop するか、Import をクリックして画像を選択すると、画像の分析結果が表示されます。

分析モデルのエクスポートとサンプルコード実行

TensorFlow | TensorFlow Light にエクスポート、または Local API として利用できます。
ひとまず TensorFlow でダウンロードしてみます。

左上の Ξ をクリックして、表示される Export をクリックします。

Export のメニューから TensorFlow を選択します。

ローカルに <プロジェクト名> TensorFlow というフォルダーが作成されます。
example フォルダーにサンプルコード(python) も一緒に作成されます。

example/readme.md に書かれている手順を参考にサンプルコードを実行してみます。

TensorFlow 1.15.3 を利用するため、実行するには Python 3.7.* が必要です。

tf-venv という名前で Python 仮想環境を作ります。(下記 Windows の場合)

python -m venv tf-venv

// Python 3.7 がデフォルト環境でないなら
py -3.7 -m venv tf-venv

tf-venv を起動します。

tf-venv/Scripts/activate

pip をアップグレードした後、example/requirements.txt に記載されているモジュールをインストールします。

(tf-venv) python -m pip install --upgrade pip
(tf-venv) python -m pip install -r example/requirements.txt

requirements.txt からインストールするモジュールは以下の2つです。
- tensorflow==1.15.3
- pillow==7.2.0

無事環境が作成出来たら、サンプルコード(tf_sample.py) を実行してみます。
test というフォルダーを作成して、テスト用画像を配置して指定 (test/warrior2.jpg) しています。

(tf-venv) python example/tf_example.py test/warrior2.jpg

TensorFlow v1.* を利用している Warning が最初出力されますが、Predicted 以下が分析モデルで画像を推定した結果です。

WARNING:tensorflow:From example/tf_example.py:40: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.
Predicted: {'Prediction': 'warrior', 'Confidences': [0.02098606899380684, 0.00528041971847415, 3.6378631193656474e-05, 0.0019086095271632075, 0.00045342574594542384, 0.004871818702667952, 0.9664632081985474]}

Prediction の結果が warrior だとタグ名で出力されます。
Confidences の数値は各タグ(出力順)の推定値になります。(warrior=>0.9664632081985474)

タグの出力順は、分析モデルの情報が記述された signature.json に記載されています。

signature.json
{
    "doc_id": "********-****-****-****-************", 
       :
    "inputs": {
       :
    }, 
    "outputs": {
       :
    }, 
    "tags": ["serve"], 
    "classes": {
        "Label": ["cobra", "downdog", "headstand", "plough", "tree", "triangle", "warrior"]
    }, 
    "filename": "saved_model.pb"
}