AITRIOS Local Edition を使用した手話検出モデルの作成

# はじめに
[メカトラックス株式会社](https://mechatrax.com/)の[maeda01](https://qiita.com/maeda01)です。
[以前の記事](https://qiita.com/maeda01/items/34fbf9175815e35ff700) で AITRIOS の Local Edition でサンプルのデータセットを使用して硬貨の検出タスクを作成し、検証を行いました。
本記事では Brain Builder を使用して自分で AI モデルを作成する方法を Brain Builder の使い方とともにご紹介します。

# AITRIOS ローカル環境 のセットアップ
以前のブログを参考にローカルライセンスを有効化して、新規プロジェクトが作成できる状態にしてください。

https://qiita.com/maeda01/items/34fbf9175815e35ff700

# プロジェクトの作成
新規にプロジェクトを作成します。
プロジェクト名は「Object Detection ASL」としました。

![プロジェクトの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/fa142b0b-6f25-4ef8-ac11-193c4851d6ad.png)

# データセットのインポート
データセットを作成します。データセット名は「ASL Alphabet」としました。
このデータセットにデータをアップロードしていきます。

データは kaggle からお借りしました。

https://www.kaggle.com/datasets/danrasband/asl-alphabet-test

![データセットの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/1daeea29-b7b6-421a-968c-9ec8da414321.png)

# アノテーション作業
一番上の注釈を選択するとアノテーションができるようになります。マウスをドラッグして検出したい物体を四角で囲みます。
四角で囲んだらラベリングを行います。四角の線を選択した状態で右のクラスの一覧からラベリングするクラスを選択します。クラスを作成する場合は "+" ボタンから作成してください。

注釈状態でもラベリングはできますが選択ツールを使用すると新規に bounding box を作成することなく既存の bounding box を選択でき、選択しやすくなります。

![アノテーション_ラベリング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/d404021d-b8e1-45c5-a688-9090218a19f3.png)

グリッドを使用するとデータセットの画像にグリッドが入り、グリッドに沿って bounding box を作成することができます。

![アノテーション_グリッド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/e38f781d-202c-4bdb-a7e0-1ca46206e40f.png)


画像の明るさやコントラストを変更することも可能です。
左のメニューから明るさの塗りつぶしやコントラストの塗りつぶしを選択し、下のスクロールバーから調整してください。

![アノテーション_コントラスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/05ec20b3-f591-40bd-a133-adfecfbf1975.png)

これらの機能を活用して画像1枚1枚にアノテーションを行います。
1枚終了したら「次を保存」を押して保存しつつ、次の画像を選択します。

:::note info
アノテーションを行う際は以下のようなガイドラインに従うとよいと思います
* VOC2011 Annotation Guidelines
http://host.robots.ox.ac.uk/pascal/VOC/voc2011/guidelines.html
* Nanonets のドキュメント
https://nanonets.github.io/tutorials-page/docs/annotate
* Ultralytics のドキュメント
https://docs.ultralytics.com/ja/guides/data-collection-and-annotation/#techniques-of-annotation
:::

# 学習
アノテーション作業が完了したら学習をさせ、AI モデルを作成してきます。
学習タブに移動し、学習方法を選択します。今回はバランス型で学習を行っていきます。
それぞれの学習方法の特徴は以下の通りです。

* クイック (Quick): いくつかの学習器を使用して最良のモデルを使用して学習
* 徹底的 (Thorough): 用意されているすべての学習器を使用して最良のモデルを使用して学習
* バランス型 (Balance): ある程度 (Quick 以上の数) の学習器を使用して最良のモデルを使用して学習

今回のケースではバランス型で840個の物体の学習をさせました。学習は数時間で完了しました。

また、一度学習を行った後にデータやラベルを追加して追加学習を行うことも可能です。

![学習開始.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/c3134789-1de1-4925-b486-9a7afe38a707.png)

# 評価
学習が完了すると学習結果に対する評価が自動的に計算されます。

適合率 95% と多少誤検出はあるが検出漏れはほぼないモデルになったことがここで確認されました。
高度な結果のトグルを ON にすると平均平均精度 (mAP) も確認できます。必要に応じて確認をしてください。


![学習の評価-高度.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/faa48f24-4301-4d36-8a3b-acde70d91044.png)

:::note info 
評価の各項目に対する解説は Neurala のドキュメントに記載されています
https://support.neurala.com/docs/evaluating-brain-performance
:::


# テスト
テストタブから生成された AI モデルのテストを行うことができます。
テスト用のデータセットも kaggle からお借りしました。

https://www.kaggle.com/datasets/debashishsau/aslamerican-sign-language-aplhabet-dataset

テストタブに移動し、テスト用の画像をアップロードします。
アップロードが完了すると自動的に画像に対して推論が開始されます。

![テスト結果A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/0a5c1d6a-7e20-44f8-8c35-274a1b2ec08c.png)

テスト用の画像データに対しては推論が期待通り正しくできていることが確認できました。

# カメラにデプロイしてテスト
実際に AI モデルをカメラにデプロイして Local Console からリアルタイムで推論結果の確認をしてみます。

Local Console の Inference タブに移動します。
Brain Builder から出力される zip ファイルに AI モデルやラベル・パラメータのファイルが入っているのでそれを選択します。

![AIモデルのデプロイ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/3fa79e84-d09d-4527-bf70-62728c78071d.png)

Apply ボタンを押して設定を保存して、実際にカメラを動かします。
Inference Control の Start ボタンを押すとカメラ画像の取得と推論が開始されます。

![Capture_W.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104552/004e97ad-384b-46b4-8b27-3ef9026cf5c3.jpeg)

# おわりに
この Brain Builder を活用すると画像処理の AI モデルが簡単に作れるようになります。
基本的に GUI に従ってアノテーションや学習を行うので操作もわかりやすいと思います。
自作の画像処理モデルを作成する際、参考にしていただければ幸いです。