LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

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

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

Lobe とは

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

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

20201206_Lobe_Examples.png

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

20201206_Lobe_CameraDemo01.png
20201206_Lobe_CameraDemo02.png

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

準備

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

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

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

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

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

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

新規プロジェクト作成

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

20201206_Lobe_01.png

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

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

20201206_Lobe_02.png

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

20201206_Lobe_03.png

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

20201206_Lobe_04.png

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

20201206_Lobe_05.png

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

20201206_Lobe_06.png

分析モデルの確認

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

20201206_Lobe_07.png

分析モデルのテスト

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

20201206_Lobe_08.png

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

20201206_Lobe_09.png

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

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

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

20201206_Lobe_10.png

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

20201206_Lobe_11.png

20201206_Lobe_12.png

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

20201206_Lobe_13.png

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"
}

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
What you can do with signing up
2