AI Builder を使って、うちの猫かそれ以外かを判定してみる

**_世の中には、2 種類の猫しかいない。うちの猫か、うちの猫以外か_**

ノンコーディングで誰でも AI が使えるようになる AI Builder を使って、猫の画像判定をしていきます。
AI のことをあまり詳しくない人や AI Builder を使ったことない人でもわかるように、画像を多めにして Step-by-Step で進めていきます。

最初に簡単な AI Builder の説明から始まって、次に猫の画像を判定するためのモデル作成、最後にモデルを使ってテストしていきます。

## AI Builder とは

Microsoft が提供している Power Platform の一部である Power Apps などと一緒に使うことによって、全ての人が AI を使えるようになるというコンセプトで作られたサービスです。

現在は予測 AI、テキスト分類 AI、物体検出 AI (Object Detection)、フォーム処理 AI の、計 4 つの AI が提供されています。 詳しい情報は記事の最後の参考リンクを参照ください。

### AI Builder を使うために必要なもの

とりあえず試したいという人は試用版 Power Apps ライセンスと、AI Builder ライセンスがあれば OK です。正式ライセンスは以下の通りです。

- Power Apps ライセンス、Power Automate ライセンス、または Dynamics 365 ライセンスのどれかに加えて、 AI Builder ライセンス
- \*2019-12-15 時点の情報です。まだ新しいサービスなのかライセンス形態がたまに変わるので、必ず公式ドキュメントを見てください。

一つ注意点として 2019-12-15 時点では Japan Region で AI Builder がまだ未提供です。一つのライセンスで複数の Region の環境が作成できるため、 AI Builder を使う場合は US Region など AI Builder を提供している環境を作成してください。

## モデル作成

猫の画像を判定するために必要なモデルを作っていきます。

### Task 1: Entity 作成

猫の名前をデータとして持っている Entity を作ります。

Step 1: Entity name: **Neko**, Primary field: **Name** の Entity を作ります。

[![Image from Gyazo](https://i.gyazo.com/772424820095dae70fb23e60f5b41dfb.png)](https://gyazo.com/772424820095dae70fb23e60f5b41dfb)

Step 2: Entity Data にうちの猫のレコードと、それ以外の猫のレコードを 2 つ作ります。 \*うちの猫が **Eto** で、それ以外の猫が **Nora** です。

[![Image from Gyazo](https://i.gyazo.com/767b5783bb61e25bec2fb4df7a581070.png)](https://gyazo.com/767b5783bb61e25bec2fb4df7a581070)

### Task 2: Object Detection を使う

AI Builder の Object Detection を使って、猫の判定をするモデルを作ります。

Step 1: Object Detection を選択します。

[![Image from Gyazo](https://i.gyazo.com/b2ccc39c67c57208000e538893d5e11e.png)](https://gyazo.com/b2ccc39c67c57208000e538893d5e11e)

Step 2: Model Name: **Eto or Nora** を設定して Create を選択します。

[![Image from Gyazo](https://i.gyazo.com/f025aa8f6756d6c6c7015ec37dabd64f.png)](https://gyazo.com/f025aa8f6756d6c6c7015ec37dabd64f)

Step 3: Entity は Neko Entity を選択します。

[![Image from Gyazo](https://i.gyazo.com/c8465e285735cad4872f5efd84ad485c.png)](https://gyazo.com/c8465e285735cad4872f5efd84ad485c)

Step 4: 今回検出するオブジェクトの Eto, Nora を選択します。

[![Image from Gyazo](https://i.gyazo.com/583fd86ba1c1fc080d2dea6e984632d2.png)](https://gyazo.com/583fd86ba1c1fc080d2dea6e984632d2)

### Task 3: 猫の画像を選択していく

モデルを学習させるために、猫の画像を選択していきます。

Step 1: うちの猫と、それ以外の猫の画像ファイルをアップロードします。

[![Image from Gyazo](https://i.gyazo.com/f37789cf7dfac9c643a5801adb864ac0.png)](https://gyazo.com/f37789cf7dfac9c643a5801adb864ac0)

Step 1a: うちの猫の画像

[![Image from Gyazo](https://i.gyazo.com/eff3be347f90a208e7a55a4b7a318572.png)](https://gyazo.com/eff3be347f90a208e7a55a4b7a318572)

Step 1b: それ以外の猫の画像

[![Image from Gyazo](https://i.gyazo.com/c431c766aae056deffba093e5908dbed.png)](https://gyazo.com/c431c766aae056deffba093e5908dbed)

Step 2: アップロードが完了するとこんな感じです。うちの猫 15 枚、それ以外の猫 15 枚用意しました。

[![Image from Gyazo](https://i.gyazo.com/ce12f50137eb1d56ed75d9bbf8189738.png)](https://gyazo.com/ce12f50137eb1d56ed75d9bbf8189738)

Step 3: 猫の顔を選択して Eto か Nora かどうかのタグ付けしていきます。

[![Image from Gyazo](https://i.gyazo.com/d49b403fed73f8f2aae9a5d56ab175d0.gif)](https://gyazo.com/d49b403fed73f8f2aae9a5d56ab175d0)

Step 3a: それ以外の猫もこんな感じで選択

[![Image from Gyazo](https://i.gyazo.com/20181028709d4fa417b64401a44b7714.png)](https://gyazo.com/20181028709d4fa417b64401a44b7714)

Step 4: 画像全てにタグを付け終えたら Train を選択します。完了するとモデルを使えるようになります。

[![Image from Gyazo](https://i.gyazo.com/6ff1fca44874289733dca4e45186db2a.png)](https://gyazo.com/6ff1fca44874289733dca4e45186db2a)

## Task 4: うちの猫かどうかをテスト

作ったモデルを使って、うちの猫かどうかをテストしてみます。

Step 1: 作ったモデルを選択して、 Quick test を選択します。

[![Image from Gyazo](https://i.gyazo.com/9ca21b29b49f08a24de3d3ef61694fce.png)](https://gyazo.com/9ca21b29b49f08a24de3d3ef61694fce)

Step 2: テスト用のうちの猫の画像をアップロードするとこんな感じで出てきます。

[![Image from Gyazo](https://i.gyazo.com/23aef01d1f3903cd5761818012770ace.png)](https://gyazo.com/23aef01d1f3903cd5761818012770ace)

Step 3: それ以外の猫もアップロードしてみます。

[![Image from Gyazo](https://i.gyazo.com/e9a11f223169ab863c22d3f67eaad0a5.png)](https://gyazo.com/e9a11f223169ab863c22d3f67eaad0a5)

Step 4: いくつかテストしてみたところ、誤検出されてしまうこともありました。

Step 4a: うちの猫がそれ以外の猫になってしまったパターン

[![Image from Gyazo](https://i.gyazo.com/e67c296ac2c51d3887dfa53560ad39a3.png)](https://gyazo.com/e67c296ac2c51d3887dfa53560ad39a3)

Step 4b: 逆のパターン

[![Image from Gyazo](https://i.gyazo.com/acffb468df274025a27837c0669ef0fc.png)](https://gyazo.com/acffb468df274025a27837c0669ef0fc)

以上で一通りの流れは終わりになります。

## まとめ

- 結構適当にやってもベンガル猫とそれ以外の種類の猫くらいなら判定精度はよさそうでした。
- データさえ集めれば画面をポチポチするだけで簡単に AI が使える時代になったんだなと実感しました。
- データ不足や、タグ付け観点を変更すればパフォーマンスはよくなると思います。
- もっと精度のよいモデルを作りたい場合は他のサービスやライブラリを使って、パラメーターを弄っていく必要がありそうです。
- 今回は Quick test だけでしたが、モデルを Power Apps や Flow (Power Automate) などに組み込んで使うことによって色々なことが出来るようになります。

## 参考リンク

- 公式ドキュメント

  [Microsoft Power Apps のドキュメント - PowerApps | Microsoft Docs](https://docs.microsoft.com/ja-jp/powerapps/)

  [AI Builder のランディング ページ | Microsoft Docs](https://docs.microsoft.com/ja-jp/ai-builder/)

- Microsoft Power Apps Team の人が書いている記事

  [吉田の備忘録 - Dynamics CRM、Dynamics NAV、Office 365 や Microsoft Azure 等のマイクロソフト製品を紹介](https://memo.tyoshida.me/)