AI Builder物体検出モデル基礎とパンダ🐼検出モデル作成してみた

こんにちは。今回はAI Builderのカスタムモデル「物体検出モデル」についてご紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/366cbc7c-3097-037d-8ae8-5ad9fdaef89a.png)

最初に概要、そのあとに実際に操作についてお話します。
今回はパンダを検出するモデルを作ります！🐼
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bf63ef95-b433-acae-68a9-a044a860c8a2.png)

# 物体検出モデルとは
画像の中の物体（オブジェクト）を検出するモデルです。
例えば「Car」を検出するモデルに画像を入れる画像の中に含まれる「Car」を検出してくれます。
例えば、工場などで、部品の種類を検出させるなどの使い方ができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ff00a7bc-0c0e-1f85-e513-6bb28cb58959.png" width=50%>

実際の画像でのイメージ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/375b65b6-89e6-e08e-7ef6-35d956915d5e.png" width=50%>

AI Builderの物体検出モデルはカスタムモデルとなっており、学習させて、自分のデータに合わせてモデルを作成することができます。

対象の画像形式はJPG、PNG、BMPです。形式が混在した状態での学習も可能です。
画像の最小サイズは256 ピクセル x 256 ピクセルです。

# 精度をよくするためには？
- **データの数を多く用意**
各オブジェクトに対して最低15個の画像をタグ付けする必要がありますが、多ければ多いほどいいです。50以上あるとよりよいです。
- **オブジェクトごとに安定させるためにはオブジェクトごとにまんべんなくデータを用意**
複数オブジェクトを検出させることができますがそれぞれのオブジェクトごとに十分なデータ数が必要です。より一貫性のある結果を得るには、画像数が最小の物体と最多の物体の比率が少なくとも 1:2 になるようにします。 
例）
✖1つオブジェクトのに 500 の画像があるのに対し、別のオブジェクトでは 50 の画像しかない場合、トレーニング データセットのバランスが取れていない
〇画像数が最も多いオブジェクトに 500 の画像がある場合、画像数が最も少ないオブジェクトをトレーニングするには少なくとも 250 の画像が必要
- **より多様なシーンの画像を使用する**
特定のシーンの画像ばかり用意すると、そのシーンの精度に偏り、別のシーンの画像に対して認識できない可能性が上がる
::: note
シーンとは：背景、光の加減、オブジェクトのサイズ、カメラアングル、背景とオブジェクトの組み合わせなど
:::

https://learn.microsoft.com/ja-jp/ai-builder/collect-images

# 操作編　パンダ🐼検出モデルを作ってみる

では、操作編ということで作ってみましょう！
ブラウザでPower Apps(https://make.powerapps.com )を開きます。
左で[AI ハブ]>[AIモデル]をクリックし、[新しいAIモデル]をクリックします。(https://aka.ms/tryaibuilder でも直接開けます。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/98b7ae3e-d974-7a60-1e23-57d1282eace7.png)

[物体検出]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/21255707-75e4-e922-07b4-a838ca459449.png)

最初にモデルドメインの選択を行いますが、基本は「共通オブジェクト」で大丈夫です。
小売棚の商品やブランドのロゴ検出に最適化されたモデルを作りたいときは、「小売棚のオブジェクト」「ブランドロゴ」を選択します。
今回は「共通オブジェクト」です。

::: note
モデルの名前は右上の保存して閉じるの横をクリックして、適宜変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5fc6ace7-ce46-9015-472f-df0c52a445ea.png)
:::

[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/83299e02-561b-1468-1cf1-13fade1cf2e8.png)

オブジェクトの名前を設定します。
複数オブジェクトがある場合は[新しいオブジェクトの追加]で追加します。

画面上側のリボンにある[データベースから選択します]を選択すると、Dataverse テーブルの列からオブジェクトを作成することもできます。先にテーブルを定義している場合はこちらがおすすめ。

設定が終わったら[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e0a2a6ae-a01a-3d09-4659-490ef153e939.png)
[イメージの追加]でローカルやSharePoint、Azure Blobのいずれかから画像をアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2aa1e724-4204-f54f-50ae-32b9d41cbdeb.png)

画像が保存されているデータ ソースを選択してから、オブジェクトを含む画像を選択します。
AI Builder に表示されている画像を確認してから、[○○個のイメージのアップロード]をクリックし、アップロードを完了させます。
（除外する画像を選択解除できます。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/00cb4069-7ab9-0f25-7ae3-fd4ea3ec708f.png" width=60%>

画像を選択し、オブジェクトをタグ付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/838c9e40-5b91-4794-8d3e-e4e97b126936.png)

ちなみに、１つの画像に同じオブジェクトを複数タグ付け可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bf63ef95-b433-acae-68a9-a044a860c8a2.png)

すべてタグ付け終わったら、[タグ付けを完了]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1558c4b5-d0b3-e132-7cc3-35ee1a5c285b.png)

[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7d998eff-9e1c-9fda-7b35-74ce3093010e.png)

[トレーニングする]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/710b1e06-2d3c-dba2-4228-56685a20870c.png)

[モデルに移動]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d8daf016-3f5e-e04c-ba27-fd8966a824ae.png)

モデル一覧で、作成したモデルの「状態」が「トレーニング済み」になったら、モデルをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/52bf192b-2748-e387-fdb7-d469655b7fbd.png)

詳細ページが表示されます。
詳細ページにはパフォーマンススコアが表示されます。 最大が100で、今回は77でした。

::: note 
**パフォーマンススコアとは**
このパフォーマンススコアは、アップロードした画像に対するモデルのパフォーマンスを示していて、**今後使用する画像に対するパフォーマンスを示すものではありません**。
その為、
1つのラベルにアップロードする画像が 50 未満の場合は、高いスコアを得る可能性が高くなります。 これは、モデルが万全であることを意味するものではありません。
モデルのパフォーマンススコアは、ラベルあたり 50 個を超える画像がある場合や、トレーニング セットを変更してもこれらのスコアが安定している場合、**より信頼性が高くなります**。
:::

[公開]をクリックします。（公開したあとも編集可能）
公開するとアプリやフローの中で使えるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0c0c3955-ded1-5604-939e-922915a4790c.png)

クイックテストでこの場で簡単にモデルを試すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/971f8b16-6c8c-00ca-2417-cc4e28fe21e3.png)

[自分のデバイスからアップロード]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b1dafc5d-daaf-dd9e-2936-26edfdc5417d.png)

学習には使っていない新しい画像をアップロードします。
うまく検出してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1fb4d9d2-f083-671d-0e01-8274d277aa6c.png)

2頭いても検出してくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c0e779ec-1487-9df6-4de0-d8752ee9d72b.png)

# まとめ
今回はAI Builderの物体検出モデルのカスタマイズを行いました。公開すると、カスタマイズしたあなたのモデルを実際のアプリやフローの中で使うことができますので、ぜひ作ったモデルで作ってみてください。
アプリでモデルを使う際は以下Learnをお使いください。

https://learn.microsoft.com/ja-jp/ai-builder/object-detector-component-in-powerapps

フローでモデルを使う際は以下Learnをお使いください。

https://learn.microsoft.com/ja-jp/ai-builder/object-detection-model-in-flow

# 参照

https://learn.microsoft.com/ja-jp/ai-builder/object-detection-overview