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 に記載されています。
{
"doc_id": "********-****-****-****-************",
:
"inputs": {
:
},
"outputs": {
:
},
"tags": ["serve"],
"classes": {
"Label": ["cobra", "downdog", "headstand", "plough", "tree", "triangle", "warrior"]
},
"filename": "saved_model.pb"
}