UiPath AI Center 第1回 基礎編 はじめに AI Center を使って物体検出をしよう


UiPath Document Understandingに関する記事の[第6回](https://qiita.com/utanesuke/items/103cae121fc695b77f36)までは、UiPathが提供するマシンラーニングモデルを使用して、請求書や見積書などから必要なデータを抽出できました。

しかし、各社固有フォーマットのドキュメントになると、データを正しく抽出することが難しくなります。
この場合、各社の固有ドキュメントを入力データとしてAI Centerに提供し、モデルを再トレーニングすることや、各社独自のマシンラーニングモデルを使用することで、正確にデータを抽出することができます。

ここでは、UiPath AI Centerの基礎となるプロジェクトの作成からML Skillのデプロイ、そしてUiPath Studioでの利用方法までを紹介します。

# 1.はじめに

AI Center は、UiPath の機械学習プラットフォームで、お客様が自社または UiPath、UiPath のパートナーによって開発された ML Skills をデプロイ、消費、管理、改善できるようにするものです。AIと自動化戦略を加速させるエンドツーエンドプラットフォームです。
UiPath AI Centerを利用して、様々なAIモデルとの接続を容易にすることで、AIを素早くビジネスの現場に展開します。
UiPath AI CenterとStudioとの連携イメージは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/b936664c-65e7-a6a4-3547-341fd6be002c.png)


AI Center™ へのアクセス権限を取得するには、ライセンス プランを **Enterprise 無料トライアルまたは Enterprise に変更して** 、Automation Cloud 組織のテナント内のAI Center サービスを有効化します<sup>補足1</sup>。アカウントに AI Unit ライセンスがあること<sup>補足2</sup>を確認してください。

本記事では手順の詳細については省略しますので、詳細については[AI Center™ にアクセスする](https://docs.uipath.com/ja/ai-center/automation-cloud/latest/user-guide/about-ai-center#accessing-ai-center%E2%84%A2)にアクセスしてください。

- 補足1: テナント内にAI Center サービスが有効化されている画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7f81926f-bab3-1b93-258a-0fe3b7b24daf.png)


- 補足2: アカウントに AI Unit ライセンスがある状態の画面です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/49865bcb-88a9-f0f1-2a6d-1c0312bd6378.png)

# 2. AI Centerの基本概念

UiPath AI Centerを利用する前に、いくつの基本概念を説明します。

- プロジェクト

同じ業務に関連するデータセット、ML パッケージ、パイプライン、ML ログ、ML スキルが**グループ化したプロジェクト**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8af5fa4a-f7a9-aa6c-3dfc-9c9f16c42521.png)
- データセット、パイプライン、ML スキル、ML ログ

| 概念 | 詳細 |
|:-|:-|
|  データセット |データセットとは、任意のサブフォルダーとファイルが格納されているストレージのフォルダーです。プロジェクト内のマシン ラーニング モデルは、データセットを使用することで新しいデータ ポイントにアクセスできます。   |
|  パイプライン | パイプラインとはマシン ラーニングのワークフローの記述であり、ワークフローのあるすべての関数とその実行順序を指定しています。パイプラインには、パイプラインの実行に必要な入力およびパイプラインから得られる出力の定義も記述されています。  |
|  ML スキル |  ML スキルは、デプロイ中のML パッケージ のバージョンです。UiPath Studio で ML スキル アクティビティをドラッグ アンド ドロップするだけで、RPA ワークフローで実装できます。  |
|  ML ログ | ML ログには、プロジェクトに関連するすべてのイベントが集約されて表示されます 。  |



:::note info
詳細な解説はUiPathのドキュメントの[AI Center を使用する](https://docs.uipath.com/ja/ai-center/automation-cloud/latest/user-guide/using-ai-center)を参照してください。
:::


# 3. AI Centerを使って物体検出

次に、実際の操作を通して基本概念をより深く理解していきましょう。ここでは、UiPath AI Centerでの既存マシンラーニングモデル(ObjectDetection)を利用して、与えられた画像から物体を検出します。
流れは以下の通り：
```mermaid
graph LR
  1.プロジェクト作成-->2.MLパッケージ選ぶ
　2.MLパッケージ選ぶ-->3.MLスキル作成
　3.MLスキル作成-->4.StudioからMLスキル利用
```

:::note info
補足：
今回は既存のMLパッケージを再トレーニングせずに、そのまま利用します。このMLパッケージが既にトレーニング済みの物体でしたら、再トレーニングせずに検出できますが、新しい物体の検出になると、新しい物体のデータセットを投入して、既存のMLパッケージを再トレーニングする必要があります。
再トレーニング必要な流れは以下の通りになります。
```mermaid
graph LR
  1.プロジェクト作成-->2.MLパッケージ選ぶ
　2.MLパッケージ選ぶ-->3.データセット登録
  3.データセット登録-->4.パイプライン実行
  4.パイプライン実行-->5.MLスキル作成
　5.MLスキル作成-->6.StudioからMLスキル利用
```
＊ [3.データセット登録]及び[4.パイプライン実行]が追加されます
:::

## 3.1 プロジェクトを作成する

前述した通り、プロジェクトとは、特定の ML ソリューションの構築に使用できる、データセット、ML パッケージ、パイプライン、ML ログ、ML スキルなどの独立したリソースでグループです。プロジェクトを一番最初に作成する必要があります。

**手順：**
- **プロジェクト**ページで、**プロジェクトを作成**ボタンをクリックします。**新しいプロジェクトを作成**ページが表示されます。
- **プロジェクト名**を入力します。**プロジェクト名**は今後更新できないため、現在のユース ケースに関連している必要があります。
- 必要に応じて、**プロジェクトの説明**を入力します。
- **作成**をクリックします。新しいプロジェクトが作成され、対応する **ダッシュボード** ページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8a18b20a-45d3-d5f8-5cf6-d9d85503af2e.png)

## 3.2 すぐに使えるパッケージを選びます

ML パッケージには、AIモデルのトレーニングと提供に必要なすべてのコードとメタデータが含まれています。現在、次の三つの種類のパッケージから選択できます。
- カスタム作成のML パッケージ
- すぐに使えるパッケージ
- ML パッケージをインポートする

今回は画像からの検出ですので、[すぐに使えるパッケージ]での[ObjectDetection]パッケージを利用します。

**手順：**
- 左側のナビゲーション バーからの**ML パッケージ** に移動し、**すぐに使えるパッケージ**をクリックします。
- **Image Analysis > ObjectDetection**へ移動して、必要な項目を入力し、**送信**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/cbd93ea8-8435-bbdf-7dc8-9701853e79b9.png)
- 送信が終わったら、作成したML パッケージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/db7b875f-796b-b499-b002-a7951eeb661b.png)

## 3.3 ML スキルを作成する
**ML スキル** とは、すぐに使用できる ML パッケージのデプロイです。ML スキル としてデプロイした ML パッケージは、UiPath Studioで[ML スキル]アクティビティをドラッグ アンド ドロップするだけで、UiPath ワークフローでいつでも使用できるモデルになります。

**手順：**
- **ML スキル**を作成するには、左側のナビゲーション バーから **ML スキル** を選択し、右上隅の **新規作成** をクリックします。**新しい ML スキルを作成** ページが表示されます。
- **新しい ML スキルを作成**に、必要な項目を入力し、**作成**をクリックします。<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/08d782c3-d079-adf1-1788-752249b0e9f6.png" width=480>

- 作成をクリックしたら、MLスキル画面で表示され、ステータスが**デプロイ中**になり、**利用可能**までしばらくお待ちください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/b74b0058-3199-0af2-2896-8b7a151da65b.png)
- 次に、デプロイしたML スキルをStudioからでも利用できるように、ML スキルを公開する必要があります。[Junli_demo_faceRecognition_04]をクリックして、以下の画面でML スキルを公開します。<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7c52b381-04c7-193c-6399-9794ba2b39de.png" width=320>
- 公開ができましたら、[Junli_demo_faceRecognition_04]をクリックして、次の画面に表示されたAPIキーとURLをメモします（Studioで利用します）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/725dcf01-b6d6-2cd2-dd3a-46c0036df576.png)


## 3.4 UiPath StudioからMLスキルを使って物体検出

上記3.1から3.3までの操作で、UiPath Studioから呼び出す可能なMLスキルが作成されました。これからUiPath Studioで、このMLスキルを使って、実際に画像から物体検出をします。
MLスキルの呼び出し及び返されたリスポンスJsonデータの解析のために、以下の二つのパッケージをインストールします。
- UiPath.MLServices.Activities 2.0.0
- UiPath.WebAPI.Activities 1.16.2

ワークフローの作成手順はこちらでは省略しますので、詳細な作成方法を知りたい方は[11.AIC_1st_物体検出](https://drive.google.com/drive/folders/1dv0VG7yEt1EBbPOxGfK4-JXpW7-3iTDn?usp=sharing)をご参照ください。作成したワークフローは以下の通りです。
![Object_Detection.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/53d9a787-a9a3-585e-1237-98126b65fbec.jpeg)

上記のワークフローの作成ができたら、一回実行してみてください。

**実行手順：**
1.[Invoke Object Detection]アクティビティの[MLスキルURL]と[APIキー]に、前の手順でメモした値を設定します。
2.UiPath Studioの実行ボタンをクリックします。
3.ファイル選択のダイアログが開くので、任意の画像ファイルを選択します。（例：[catdog01.png](https://drive.google.com/file/d/1_Ip1vLCAicDx-MDe0s_F5WGvdvNuym7s/view?usp=share_link)）
4.Studioの実行ログでオブジェクトの検出ログが表示されていることを確認します。
```log:UiPath Studio log
AI_Basic_1st_物体検出 の実行が開始されました。
dog :  0.99
cat :  0.99
AI_Basic_1st_物体検出 の実行が終了しました。 in: 00:00:24
```
5.プロジェクトフォルダ\PredictedOutput フォルダ内に、認識されたオブジェクトの画像ファイルが生成されていることを確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/8445a7ad-67be-911a-aaa0-d3e8661b6122.png" width=480>

**次に、** **$①$から$⑤$までの処理の概要を説明します。**
- $①$. ファイル選択のダイアログを表示して、利用者が選択したイメージファイル(*.png,*jpegなど)のファイルパスを変数の[インプットファイルパス]に保存します。
- $②$. [ML スキル]アクティビティを利用して、入力されたファイルから物体検出をします。検出した結果が出力変数の[AICenterリスポンス]に保存します。
- $③$. $②$で出力した[AICenterリスポンス]変数の型がJsonフォーマットの文字列です。文字列から必要な情報を取り出すのが困難ですので、[JSONを逆シリアル化]アクティビティを利用して、JObjectの変数型に変換します。
[AICenterリスポンス]のフォーマットは、UiPath AI CenterのML パッケージ画面より確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/604c9c3c-10e5-0dff-e797-35469d8f08f3.png)

- $④$. JObjectへ変換した[出力Jsonオブジェクト]変数から識別結果と精度を取り出します。一つの画像に複数物体が含まれる可能性があるので、[繰り返し(コレクションの各要素)]を利用して、全ての物体の検出結果を取り出します。
- $⑤$. 上記$④$と同じように、[Predicted ByteArray]データを取り出して、エンコーディング処理して、このデータを再度イメージファイルに書き込みます。

## 3.5 物体検出の結果を確認する

インタネットで適当なイメージファイルをダウンロードして、3.4 で作ったワークフローに投入し、物体検出を実施しました。
- 投入した画像データは以下の[四枚](https://drive.google.com/drive/folders/1VqEclXrUDx036uVaHyrHu5haXKytpKYn?usp=share_link)：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7e8db342-e0bf-7a4f-8121-ae73e0863201.png)

- 物体検出した結果は以下の通りです：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/e0f7f39d-1c5f-9333-9eba-2dcafb487cc2.png)

ひよこを鳥に間違ってしまったが、その以外は正しそうです。ひよこと鳥を区別するために、ひよこと鳥のデータセットを投入して、MLパッケージを再トレーニングする必要があります。

ご参考までに、ワークフローとデータはこちらの[11.AIC_1st_物体検出](https://drive.google.com/drive/folders/1dv0VG7yEt1EBbPOxGfK4-JXpW7-3iTDn?usp=share_link)よりダウンロードしてください。

# 4. 終わりに

実際の業務で使用する場合は、業務データを使って再トレーニングするケースがほとんどかと思います。
業務データの投入や再トレーニングの方法に関して、次の記事で解説していきます。

# 5. 参考情報

https://docs.uipath.com/ja/ai-center/automation-cloud/latest/user-guide/about-ai-center


https://docs.uipath.com/ai-center/automation-cloud/latest/user-guide/object-detection